U
    ª…7hu  ã                   @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ G dd„ dƒZ,dS )é    N)ÚBytesIOÚStringIO)Úcopyé   )ÚApp)ÚComments)ÚContentTypes)ÚCore)ÚCustom)ÚEmptyChartSeries)ÚFeaturePropertyBag)ÚMetadata)ÚRelationships)Ú	RichValue)ÚRichValueRel)ÚRichValueStructure)ÚRichValueTypes)ÚSharedStrings)ÚStyles)ÚTable)ÚTheme)ÚVmlc                       sX  e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+‡  Z,S )RÚPackagera€  
    A class for writing the Excel XLSX Packager file.

    This module is used in conjunction with XlsxWriter to create an
    Excel XLSX container file.

    From Wikipedia: The Open Packaging Conventions (OPC) is a
    container-file technology initially created by Microsoft to store
    a combination of XML and non-XML files that together form a single
    entity such as an Open XML Paper Specification (OpenXPS)
    document. http://en.wikipedia.org/wiki/Open_Packaging_Conventions.

    At its simplest an Excel XLSX file contains the following elements::

         ____ [Content_Types].xml
        |
        |____ docProps
        | |____ app.xml
        | |____ core.xml
        |
        |____ xl
        | |____ workbook.xml
        | |____ worksheets
        | | |____ sheet1.xml
        | |
        | |____ styles.xml
        | |
        | |____ theme
        | | |____ theme1.xml
        | |
        | |_____rels
        |   |____ workbook.xml.rels
        |
        |_____rels
          |____ .rels

    The Packager class coordinates the classes that represent the
    elements of the package and writes them into the XLSX file.

    c                    sV   t ƒ  ¡  d| _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _g | _g | _dS )z
        Constructor.

        Ú FNr   )ÚsuperÚ__init__ÚtmpdirÚ	in_memoryÚworkbookÚworksheet_countÚchartsheet_countÚchart_countÚdrawing_countÚtable_countÚnum_vml_filesÚnum_comment_filesÚnamed_rangesÚ	filenames©Úself©Ú	__class__© úM/var/www/formularioweb/env/lib/python3.8/site-packages/xlsxwriter/packager.pyr   V   s    
zPackager.__init__c                 C   s
   || _ d S ©N)r   )r)   r   r,   r,   r-   Ú_set_tmpdirq   s    zPackager._set_tmpdirc                 C   s
   || _ d S r.   )r   )r)   r   r,   r,   r-   Ú_set_in_memoryu   s    zPackager._set_in_memoryc                 C   sn   || _ t|jƒ| _t|jƒ| _|j| _|j| _|j| _| j  	¡ D ](}|j
rZ|  jd7  _q@|  jd7  _q@d S ©Nr   )r   ÚlenÚchartsr!   Údrawingsr"   r$   r%   r&   Ú
worksheetsÚis_chartsheetr    r   )r)   r   Ú	worksheetr,   r,   r-   Ú_add_workbooky   s    zPackager._add_workbookc                 C   sæ   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  	¡  |  
¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | jS r.   )Ú_write_content_types_fileÚ_write_root_rels_fileÚ_write_workbook_rels_fileÚ_write_worksheet_filesÚ_write_chartsheet_filesÚ_write_workbook_fileÚ_write_chart_filesÚ_write_drawing_filesÚ_write_vml_filesÚ_write_comment_filesÚ_write_table_filesÚ_write_shared_strings_fileÚ_write_styles_fileÚ_write_custom_fileÚ_write_theme_fileÚ_write_worksheet_rels_filesÚ_write_chartsheet_rels_filesÚ_write_drawing_rels_filesÚ_write_rich_value_rels_filesÚ_add_image_filesÚ_add_vba_projectÚ_add_vba_project_signatureÚ_write_vba_project_rels_fileÚ_write_core_fileÚ_write_app_fileÚ_write_metadata_fileÚ_write_feature_bag_propertyÚ_write_rich_value_filesr'   r(   r,   r,   r-   Ú_create_packageˆ   s:    zPackager._create_packagec                 C   s@   | j rtƒ }ntj| jd\}}t |¡ | j ||df¡ |S )N)ÚdirF)	r   r   ÚtempfileÚmkstempr   ÚosÚcloser'   Úappend)r)   Zxml_filenameÚos_filenameÚfdr,   r,   r-   Ú	_filename©   s    
zPackager._filenamec                 C   s"   | j }| |  d¡¡ | ¡  d S )Núxl/workbook.xml)r   Ú_set_xml_writerr^   Ú_assemble_xml_file)r)   r   r,   r,   r-   r>   ¶   s    zPackager._write_workbook_filec                 C   sb   d}| j  ¡ D ]N}|jrq|jr0| ¡  | ¡  | |  dt|ƒ d ¡¡ | 	¡  |d7 }qd S )Nr   zxl/worksheets/sheetú.xml)
r   r5   r6   Zconstant_memoryZ_opt_reopenZ_write_single_rowr`   r^   Ústrra   ©r)   Úindexr7   r,   r,   r-   r<   ½   s    ÿzPackager._write_worksheet_filesc                 C   sL   d}| j  ¡ D ]8}|jsq| |  dt|ƒ d ¡¡ | ¡  |d7 }qd S )Nr   zxl/chartsheets/sheetrb   )r   r5   r6   r`   r^   rc   ra   rd   r,   r,   r-   r=   Î   s    ÿz Packager._write_chartsheet_filesc                 C   sd   | j jsd S d}| j jD ]F}|js2td|› dƒ‚| |  dt|ƒ d ¡¡ | ¡  |d7 }qd S )Nr   ZChartz? must contain at least one data series. See chart.add_series().zxl/charts/chartrb   )r   r3   Zseriesr   r`   r^   rc   ra   )r)   re   Úchartr,   r,   r-   r?   Û   s    
ÿÿzPackager._write_chart_filesc                 C   sL   | j s
d S d}| jjD ]0}| |  dt|ƒ d ¡¡ | ¡  |d7 }qd S )Nr   zxl/drawings/drawingrb   )r"   r   r4   r`   r^   rc   ra   )r)   re   Údrawingr,   r,   r-   r@   ï   s    ÿzPackager._write_drawing_filesc                 C   sÆ   d}| j  ¡ D ]²}|js |js q|jrhtƒ }| |  dt|ƒ d ¡¡ | |j	|j
|j|j¡ |d7 }|jrtƒ }| |  dt|ƒ d ¡¡ | |j|jd d d |j¡ |  ||¡ |d7 }qd S )Nr   zxl/drawings/vmlDrawingz.vmli   )r   r5   Zhas_vmlZhas_header_vmlr   r`   r^   rc   ra   Zvml_data_idZvml_shape_idÚcomments_listZbuttons_listZvml_header_idZheader_images_listÚ_write_vml_drawing_rels_file)r)   re   r7   Úvmlr,   r,   r-   rA   ü   s<    ÿüÿûzPackager._write_vml_filesc                 C   sV   d}| j  ¡ D ]B}|jsqtƒ }| |  dt|ƒ d ¡¡ | |j¡ |d7 }qd S )Nr   zxl/commentsrb   )	r   r5   Úhas_commentsr   r`   r^   rc   ra   rh   )r)   re   r7   Úcommentr,   r,   r-   rB      s    zPackager._write_comment_filesc                 C   s:   t ƒ }| jj|_| jjjsd S | |  d¡¡ | ¡  d S )Nzxl/sharedStrings.xml)r   r   Ú	str_tableZstring_tableÚcountr`   r^   ra   )r)   Zsstr,   r,   r-   rD   ,  s    

z#Packager._write_shared_strings_filec                 C   sê   | j j}tƒ }d}| j  ¡ D ]*}|jr(q|jdkr| |j¡ |d7 }q| d|g¡ | j  ¡ D ]}|jslq`| |j¡ q`| d| j	g¡ | j
r¤| dt| j
ƒg¡ | j
D ]}| |¡ qª| |¡ | j j|_| |  d¡¡ | ¡  d S )Nr   é   r   Z
WorksheetsZChartszNamed RangesúdocProps/app.xml)r   Údoc_propertiesr   r5   r6   ZhiddenZ_add_part_nameÚnameZ_add_heading_pairr    r&   r2   Ú_set_propertiesZ	read_onlyZdoc_securityr`   r^   ra   )r)   Ú
propertiesÚappr   r7   Znamed_ranger,   r,   r-   rQ   7  s.    




zPackager._write_app_filec                 C   s4   | j j}tƒ }| |¡ | |  d¡¡ | ¡  d S )NúdocProps/core.xml)r   rq   r	   rs   r`   r^   ra   )r)   rt   Úcorer,   r,   r-   rP   a  s
    
zPackager._write_core_filec                 C   sH   | j jsd S tƒ }| j j|_t| j jjƒ|_| |  	d¡¡ | 
¡  d S )Nzxl/metadata.xml)r   Úhas_metadatar   Zhas_dynamic_functionsr2   Úembedded_imagesÚimagesÚnum_embedded_imagesr`   r^   ra   )r)   Úmetadatar,   r,   r-   rR   j  s    
zPackager._write_metadata_filec                 C   s:   | j  ¡ }|sd S tƒ }||_| |  d¡¡ | ¡  d S )Nz,xl/featurePropertyBag/featurePropertyBag.xml)r   Ú_has_feature_property_bagsr   Úfeature_property_bagsr`   r^   ra   )r)   r~   Zproperty_bagr,   r,   r-   rS   v  s    
ÿz$Packager._write_feature_bag_propertyc                 C   s4   | j j ¡ sd S |  ¡  |  ¡  |  ¡  |  ¡  d S r.   )r   ry   Ú
has_imagesÚ_write_rich_valueÚ_write_rich_value_typesÚ_write_rich_value_structureÚ_write_rich_value_relr(   r,   r,   r-   rT   „  s    z Packager._write_rich_value_filesc                 C   s2   |   d¡}tƒ }| jjj|_| |¡ | ¡  d S )Nzxl/richData/rdrichvalue.xml)r^   r   r   ry   rz   r`   ra   ©r)   ÚfilenameZxml_filer,   r,   r-   r€   Ž  s
    

zPackager._write_rich_valuec                 C   s&   |   d¡}tƒ }| |¡ | ¡  d S )Nz xl/richData/rdRichValueTypes.xml)r^   r   r`   ra   r„   r,   r,   r-   r   –  s    

z Packager._write_rich_value_typesc                 C   s0   |   d¡}tƒ }| jj|_| |¡ | ¡  d S )Nz$xl/richData/rdrichvaluestructure.xml)r^   r   r   Zhas_embedded_descriptionsr`   ra   r„   r,   r,   r-   r‚     s
    


z$Packager._write_rich_value_structurec                 C   s6   |   d¡}tƒ }t| jjjƒ|_| |¡ | ¡  d S )Nzxl/richData/richValueRel.xml)	r^   r   r2   r   ry   rz   r{   r`   ra   r„   r,   r,   r-   rƒ   ¥  s
    

zPackager._write_rich_value_relc                 C   s<   | j j}tƒ }|sd S | |¡ | |  d¡¡ | ¡  d S )NúdocProps/custom.xml)r   Úcustom_propertiesr
   rs   r`   r^   ra   )r)   rt   Úcustomr,   r,   r-   rF   ­  s    
zPackager._write_custom_filec                 C   sÂ  t ƒ }| | jj¡ |  ¡  d}d}| j ¡ D ]@}|jrT| dt|ƒ ¡ |d7 }q.| 	dt|ƒ ¡ |d7 }q.t
d| jd ƒD ]}| dt|ƒ ¡ q€t
d| jd ƒD ]}| dt|ƒ ¡ q¨| jrÎ| ¡  t
d| jd ƒD ]}| dt|ƒ ¡ qÞt
d| jd ƒD ]}| dt|ƒ ¡ q| jjjr4| ¡  | jjrX| ¡  | jjrX| ¡  | jjrj| ¡  | jjr|| ¡  | j  ¡ r| !¡  | jj" #¡ r¦| $¡  | %|  &d¡¡ | '¡  d S )Nr   Zsheetrf   rg   ÚtableÚcommentsz[Content_Types].xml)(r   Z_add_image_typesr   Zimage_typesÚ_get_table_countr5   r6   Z_add_chartsheet_namerc   Z_add_worksheet_nameÚranger!   Z_add_chart_namer"   Z_add_drawing_namer$   Z_add_vml_namer#   Z_add_table_namer%   Z_add_comment_namerm   rn   Z_add_shared_stringsÚvba_projectrM   Úvba_project_signaturerN   r‡   Z_add_custom_propertiesrx   Z_add_metadatar}   Z_add_feature_bag_propertyry   r   Z_add_rich_valuer`   r^   ra   )r)   ÚcontentÚworksheet_indexÚchartsheet_indexr7   Úir,   r,   r-   r9   ¹  sJ    





z"Packager._write_content_types_filec                 C   s†   | j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j	}	t
ƒ }
|
 |||||||||	g	¡ |
 |  d¡¡ |
 ¡  d S )Nzxl/styles.xml)r   Ú
xf_formatsÚpaletteÚ
font_countÚnum_formatsÚborder_countÚ
fill_countÚcustom_colorsÚdxf_formatsrk   r   Z_set_style_propertiesr`   r^   ra   )r)   r“   r”   r•   r–   r—   r˜   r™   rš   rk   Ústylesr,   r,   r-   rE   ö  s0    ÷ÿzPackager._write_styles_filec                 C   s"   t ƒ }| |  d¡¡ | ¡  d S )Nzxl/theme/theme1.xml)r   r`   r^   ra   )r)   Úthemer,   r,   r-   rG     s    zPackager._write_theme_filec              	   C   sj   d}| j  ¡ D ]V}|j}|sq|D ]@}tƒ }| |  dt|ƒ d ¡¡ | |¡ | ¡  |d7 }q"qd S )Nr   zxl/tables/tablerb   )	r   r5   Útablesr   r`   r^   rc   rs   ra   )r)   re   r7   Ztable_propsr‰   r,   r,   r-   rC     s    ÿ
zPackager._write_table_filesc                 C   s.   | j  ¡ D ]}|jD ]}|  jd7  _qq
d S r1   )r   r5   r   r#   )r)   r7   Ú_r,   r,   r-   r‹   -  s    
zPackager._get_table_countc                 C   sZ   t ƒ }| dd¡ | dd¡ | dd¡ | jjr>| dd¡ | |  d	¡¡ | ¡  d S )
Nz/officeDocumentr_   z/metadata/core-propertiesrv   z/extended-propertiesrp   z/custom-propertiesr†   z_rels/.rels)r   Ú_add_document_relationshipZ_add_package_relationshipr   r‡   r`   r^   ra   )r)   Úrelsr,   r,   r-   r:   3  s    zPackager._write_root_rels_filec                 C   sþ   t ƒ }d}d}| j ¡ D ]L}|jrD| ddt|ƒ d ¡ |d7 }q| ddt|ƒ d ¡ |d7 }q| dd¡ | d	d
¡ | jjjr”| dd¡ | jjr¨| 	dd¡ | jj
r¼| dd¡ | jj ¡ rÐ| ¡  | j ¡ râ| ¡  | |  d¡¡ | ¡  d S )Nr   z/chartsheetzchartsheets/sheetrb   z
/worksheetzworksheets/sheetz/themeztheme/theme1.xmlz/stylesz
styles.xmlz/sharedStringszsharedStrings.xmlz/vbaProjectzvbaProject.binz/sheetMetadatazmetadata.xmlzxl/_rels/workbook.xml.rels)r   r   r5   r6   rŸ   rc   rm   rn   r   Ú_add_ms_package_relationshiprx   ry   r   Z_add_rich_value_relationshipr}   Z_add_feature_bag_relationshipr`   r^   ra   )r)   r    r   r‘   r7   r,   r,   r-   r;   D  s:     ÿ
 ÿ


z"Packager._write_workbook_rels_filec                 C   s   d}| j  ¡ D ]|}|jrq|d7 }|j|j |j |j |j |j }|sLqt	ƒ }|D ]}|j
|Ž  qV| |  dt|ƒ d ¡¡ | ¡  qd S )Nr   r   zxl/worksheets/_rels/sheetú	.xml.rels)r   r5   r6   Zexternal_hyper_linksÚexternal_drawing_linksÚexternal_vml_linksZexternal_background_linksZexternal_table_linksZexternal_comment_linksr   rŸ   r`   r^   rc   ra   ©r)   re   r7   Zexternal_linksr    Z	link_datar,   r,   r-   rH   q  s4    ÿþýüûÿ	ÿz$Packager._write_worksheet_rels_filesc                 C   sx   d}| j  ¡ D ]d}|jsq|d7 }|j|j }|s4qtƒ }|D ]}|j|Ž  q>| |  dt	|ƒ d ¡¡ | 
¡  qd S )Nr   r   zxl/chartsheets/_rels/sheetr¢   )r   r5   r6   r£   r¤   r   rŸ   r`   r^   rc   ra   r¥   r,   r,   r-   rI   ’  s     
ÿÿz%Packager._write_chartsheet_rels_filesc                 C   sn   d}| j  ¡ D ]Z}|jr |d7 }|js(qtƒ }|jD ]}|j|Ž  q4| |  dt|ƒ d ¡¡ | 	¡  qd S )Nr   r   zxl/drawings/_rels/drawingr¢   )
r   r5   rg   Zdrawing_linksr   rŸ   r`   r^   rc   ra   )r)   re   r7   r    Údrawing_datar,   r,   r-   rJ   ®  s    
ÿz"Packager._write_drawing_rels_filesc                 C   sD   t ƒ }|jD ]}|j|Ž  q| |  dt|ƒ d ¡¡ | ¡  d S )Nzxl/drawings/_rels/vmlDrawingz	.vml.rels)r   Zvml_drawing_linksrŸ   r`   r^   rc   ra   )r)   r7   re   r    r¦   r,   r,   r-   ri   Ä  s    
ÿz%Packager._write_vml_drawing_rels_filec                 C   s>   | j j}|sd S tƒ }| dd¡ | |  d¡¡ | ¡  d S )Nz/vbaProjectSignaturezvbaProjectSignature.binzxl/_rels/vbaProject.bin.rels)r   rŽ   r   r¡   r`   r^   ra   )r)   rŽ   r    r,   r,   r-   rO   Ô  s     ÿz%Packager._write_vba_project_rels_filec                 C   st   | j j ¡ sd S tƒ }d}| j jjD ]2}|j ¡ }d|› d|› }| d|¡ |d7 }q$| |  	d¡¡ | 
¡  d S )Nr   z../media/imageÚ.z/imagez(/xl/richData/_rels/richValueRel.xml.rels)r   ry   r   r   rz   Z
image_typeÚlowerrŸ   r`   r^   ra   )r)   r    re   ÚimageZimage_extensionÚ
image_filer,   r,   r-   rK   å  s    

z%Packager._write_rich_value_rels_filesc           
   	   C   s  | j }d}|jj|j }|D ]æ}dt|ƒ d |j }| js´|  |¡}|jrrt|dd}| 	|j 
¡ ¡ | ¡  qút|j|ƒ zt |t |¡jtjB ¡ W qú tk
r°   Y qúX nF|jrÂ|j}n&t|jdd}| ¡ }	t|	ƒ}| ¡  | j ||df¡ |d7 }qd S )Nr   zxl/media/imager§   Úwb©ÚmodeÚrbT)r   ry   rz   rc   Z_image_extensionr   r^   Ú
image_dataÚopenÚwriteÚgetvaluerZ   r   r…   rY   ÚchmodÚstatÚst_modeÚS_IWRITEÚOSErrorÚreadr   r'   r[   )
r)   r   re   rz   r©   Zxml_image_namer\   Úos_filerª   r¯   r,   r,   r-   rL   ù  s8    ÿ

 ÿzPackager._add_image_filesc                 C   s¤   | j j}| j j}|sd S d}| js`|  |¡}|rTt|dd}| | ¡ ¡ | ¡  q t	||ƒ n@|rj|}n$t|dd}| 
¡ }t|ƒ}| ¡  | j ||df¡ d S )Nzxl/vbaProjectSignature.binr«   r¬   r®   T)r   rŽ   Úvba_project_signature_is_streamr   r^   r°   r±   r²   rZ   r   r¸   r   r'   r[   )r)   rŽ   rº   Zxml_vba_signature_namer\   r¹   Úvba_fileÚvba_datar,   r,   r-   rN   (  s&    

z#Packager._add_vba_project_signaturec                 C   s¤   | j j}| j j}|sd S d}| js`|  |¡}|rTt|dd}| | ¡ ¡ | ¡  q t	||ƒ n@|rj|}n$t|dd}| 
¡ }t|ƒ}| ¡  | j ||df¡ d S )Nzxl/vbaProject.binr«   r¬   r®   T)r   r   Úvba_project_is_streamr   r^   r°   r±   r²   rZ   r   r¸   r   r'   r[   )r)   r   r½   Zxml_vba_namer\   r¹   r»   r¼   r,   r,   r-   rM   L  s&    

zPackager._add_vba_project)-Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r/   r0   r8   rU   r^   r>   r<   r=   r?   r@   rA   rB   rD   rQ   rP   rR   rS   rT   r€   r   r‚   rƒ   rF   r9   rE   rG   rC   r‹   r:   r;   rH   rI   rJ   ri   rO   rK   rL   rN   rM   Ú__classcell__r,   r,   r*   r-   r   &   sR   /!$*	
=-!/$r   )-rY   r´   rW   Úior   r   Úshutilr   ru   r   rŠ   r   Zcontenttypesr   rw   r	   rˆ   r
   Ú
exceptionsr   Zfeature_property_bagr   r|   r   Zrelationshipsr   Z
rich_valuer   Zrich_value_relr   Zrich_value_structurer   Zrich_value_typesr   Zsharedstringsr   r›   r   r‰   r   rœ   r   rj   r   r   r,   r,   r,   r-   Ú<module>   s.   