
    `jq                       d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZ dd	lmZmZ dd
lmZ  ej,                  e      ZddZddZ	 	 	 	 	 	 	 	 ddZddd	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)z?Public facade for XML export generation and download responses.    )annotationsN)date)HttpResponse)XmlPayloadValidationError)build_xml_download_responsebuild_zip_download_response)generate_c59_xml_exportgenerate_c59_zip_exportgenerate_guest_xml_export)load_default_c59_xsd_pathvalidate_c59_xml_against_xsd)	Structurec                $    | j                  d      S )Nz<guest>countxml_contents    6/backend/istat/xml_export/application/export_facade.py_count_guest_payloadsr      s    Y''    c                $    | j                  d      S )Nz<rim:rigac59r   r   s    r   _count_c59_rowsr   "   s    ^,,r   c                p   t         j                  j                  |       j                  dd      j	                         }t        t        |dd      xs d      j                         xs d}| |dt        |t              r|j                         n|t        |t              r|j                         n|ddd}	 t        | ||	      }t        |      }t        j!                  di ||j"                  t%        |j&                        dd       |S # t        $ r t        j                  d
i |ddi        w xY w)z?Generate a guest XML export and wrap it in a download response.idr   
istat_code N	guest_xmlF)structure_idstructure_istat_codeexport_type
start_dateend_datexsd_validation_enabledxsd_pathr   r"   r#   z$Guest XML download generation failedstatusfailureextrazGuest XML download generatedsuccess)filenamepayload_countr'   )r   objectsfilteronlyfirststrgetattrstrip
isinstancer   	isoformatr   r   r   loggerwarninginfor,   r   contentr   r"   r#   	structurer    log_contextexport_resultresponses           r   generate_guest_xml_downloadr@   &   sI    !!((L(9>>t\RXXZIGI|R06B7==?G4  % 4"0::t0Lj**,R\,6x,FH&&(H"'K1%!

 /}= KK&

%..2=3H3HI	
   O! % 26[6(I6 	 	
 	s   6D (D5F)validate_xsdr%   c                   t         j                  j                  |       j                  dd      j	                         }t        t        |dd      xs d      j                         xs d}|xs |r
t               nd}| |dt        |t              r|j                         n|||d}	 t        | |      }|rt        |j                  |       t        |      }	t"        j'                  di ||j(                  t+        |j                        dd       |	S # t         $ r t"        j%                  d	i |d
di        w xY w)zRGenerate a C59 XML export, optionally validate it, and return a download response.r   r   r   r   Nc59_xml)r   r    r!   report_dater$   r%   )r   rD   z"C59 XML download generation failedr'   r(   r)   zC59 XML download generatedr+   )r,   	row_countr'   )r   r.   r/   r0   r1   r2   r3   r4   r   r5   r   r6   r	   r   r:   r   r   r7   r8   r9   r,   r   )
r   rD   rA   r%   r<   r    resolved_xsd_pathr=   r>   r?   s
             r   generate_c59_xml_downloadrG   V   sW    !!((L(9>>t\RXXZIGI|R06B7==?G4  ![L%>%@VZ$ 4 2<[$2O{,,.U`".%K/%#
 ()>)>@QR.}= KK$

%..()>)>?	
   O! % 06[6(I6 	 	
 	s   '0D (D=c           	     p   t         j                  j                  |       j                  dd      j	                         }t        t        |dd      xs d      j                         xs d}| |dt        |t              r|j                         n|t        |t              r|j                         n|d}	 t        | ||      }t        |      }t        j!                  di ||j"                  |j$                  |j&                  dd       |S # t        $ r t        j                  d	i |d
di        w xY w)zGenerate a multi-day C59 ZIP export and return a download response.

    One C59 XML file is generated per calendar day in [start_date, end_date].
    All files are packed into a single in-memory ZIP archive.
    r   r   r   r   Nc59_zip)r   r    r!   r"   r#   r&   z"C59 ZIP download generation failedr'   r(   r)   zC59 ZIP download generatedr+   )zip_filename
file_countzip_byte_sizer'   )r   r.   r/   r0   r1   r2   r3   r4   r5   r   r6   r
   r   r   r7   r8   r9   r,   rK   	byte_sizer;   s           r   generate_c59_zip_downloadrN      sG    !!((L(9>>t\RXXZIGI|R06B7==?G4  % 4 0::t0Lj**,R\,6x,FH&&(HK/%!

 /}= KK$

)22'22*44
  	 O# % 06[6(I6 	 	
 	s   4D (D5)r   r2   returnint)r   rP   r"   r   r#   r   rO   r   )
r   rP   rD   r   rA   boolr%   z
str | NonerO   r   )__doc__
__future__r   loggingdatetimer   django.httpr   istat.xml_export.exceptionsr   istat.xml_export.http.responsesr   r   ,istat.xml_export.services.xml_export_servicer	   r
   r   )istat.xml_export.validation.xsd_validatorr   r   structures.modelsr   	getLogger__name__r7   r   r   r@   rG   rN    r   r   <module>r_      s    E "   $ A 
 ( 
		8	$(--- - 	-
 -h // / 	/
 / /d// / 	/
 /r   