o
    ]oiq  ã                   @   s  d dl Z d dl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	 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e*ƒZ+dS )é    N)Úcopy)ÚStringIO)ÚBytesIOé   )ÚApp)ÚContentTypes)ÚCore)ÚCustom)ÚMetadata)ÚRelationships)ÚSharedStrings)Ú	RichValue)ÚRichValueTypes)ÚRichValueRel)ÚRichValueStructure)ÚStyles)ÚTheme)ÚVml)ÚTable)ÚComments)ÚEmptyChartSeriesc                       sP  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*‡  Z+S )PÚ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                    sZ   t t| ƒ ¡  d| _d| _d| _d| _d| _d| _d| _	d| _
d| _d| _g | _g | _dS )z
        Constructor.

        Ú FNr   )Úsuperr   Ú__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__© ú[/var/www/html/kuke-dev/django-kuke/venv/lib/python3.10/site-packages/xlsxwriter/packager.pyr   V   s   
zPackager.__init__c                 C   ó
   || _ d S ©N)r   )r(   r   r+   r+   r,   Ú_set_tmpdirq   ó   
zPackager._set_tmpdirc                 C   r-   r.   )r   )r(   r   r+   r+   r,   Ú_set_in_memoryu   r0   zPackager._set_in_memoryc                 C   sn   || _ t|jƒ| _t|jƒ| _|j| _|j| _|j| _| j  	¡ D ]}|j
r-|  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_rich_value_filesr&   r'   r+   r+   r,   Ú_create_packageˆ   s8   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?   µ   ó   zPackager._write_workbook_filec                 C   sb   d}| j  ¡ D ]'}|jrq|jr| ¡  | ¡  | |  dt|ƒ d ¡¡ | 	¡  |d7 }qd S )Nr   zxl/worksheets/sheetú.xml)
r   r6   r7   Zconstant_memoryZ_opt_reopenZ_write_single_rowr`   r^   Ústrra   ©r(   Úindexr8   r+   r+   r,   r=   ¼   s   ÿ
ôzPackager._write_worksheet_filesc                 C   sL   d}| j  ¡ D ]}|jsq| |  dt|ƒ d ¡¡ | ¡  |d7 }qd S )Nr   zxl/chartsheets/sheetrc   )r   r6   r7   r`   r^   rd   ra   re   r+   r+   r,   r>   Í   s   ÿ
øz Packager._write_chartsheet_filesc                 C   s`   | j jsd S d}| j jD ]!}|jstd| ƒ‚| |  dt|ƒ d ¡¡ | ¡  |d7 }qd S )Nr   zFChart%d must contain at least one data series. See chart.add_series().zxl/charts/chartrc   )r   r4   Zseriesr   r`   r^   rd   ra   )r(   rf   Úchartr+   r+   r,   r@   Ú   s    ÿÿÿ
ôzPackager._write_chart_filesc                 C   sL   | j sd S d}| jjD ]}| |  dt|ƒ d ¡¡ | ¡  |d7 }qd S )Nr   zxl/drawings/drawingrc   )r!   r   r5   r`   r^   rd   ra   )r(   rf   Údrawingr+   r+   r,   rA   î   s   ÿ
ûzPackager._write_drawing_filesc                 C   sÆ   d}| j  ¡ D ]Y}|js|jsq|jr4tƒ }| |  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   r6   Zhas_vmlZhas_header_vmlr   r`   r^   rd   ra   Zvml_data_idZvml_shape_idÚcomments_listZbuttons_listZvml_header_idZheader_images_listÚ_write_vml_drawing_rels_file)r(   rf   r8   Úvmlr+   r+   r,   rB   û   s@   ÿüÿû€ázPackager._write_vml_filesc                 C   sV   d}| j  ¡ D ]!}|jsqtƒ }| |  dt|ƒ d ¡¡ | |j¡ |d7 }qd S )Nr   zxl/commentsrc   )	r   r6   Úhas_commentsr   r`   r^   rd   ra   ri   )r(   rf   r8   Úcommentr+   r+   r,   rC     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,   rE   +  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s6q0| |j¡ q0| d| j	g¡ | j
rR| dt| j
ƒg¡ | j
D ]}| |¡ qU| |¡ | j j|_| |  d¡¡ | ¡  d S )Nr   é   r   Z
WorksheetsZChartszNamed RangesúdocProps/app.xml)r   Údoc_propertiesr   r6   r7   ZhiddenZ_add_part_nameÚnameZ_add_heading_pairr   r%   r3   Ú_set_propertiesZ	read_onlyZdoc_securityr`   r^   ra   )r(   Ú
propertiesÚappr   r8   Znamed_ranger+   r+   r,   rR   6  s0   
€


zPackager._write_app_filec                 C   s4   | j j}tƒ }| |¡ | |  d¡¡ | ¡  d S )NúdocProps/core.xml)r   rr   r   rt   r`   r^   ra   )r(   ru   Úcorer+   r+   r,   rQ   `  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_functionsr3   Úembedded_imagesÚimagesÚnum_embedded_imagesr`   r^   ra   )r(   Úmetadatar+   r+   r,   rS   i  s   
zPackager._write_metadata_filec                 C   s4   | j j ¡ sd S |  ¡  |  ¡  |  ¡  |  ¡  d S r.   )r   rz   Ú
has_imagesÚ_write_rich_valueÚ_write_rich_value_typesÚ_write_rich_value_structureÚ_write_rich_value_relr'   r+   r+   r,   rT   u  s   z Packager._write_rich_value_filesc                 C   s2   |   d¡}tƒ }| jjj|_| |¡ | ¡  d S )Nzxl/richData/rdrichvalue.xml)r^   r   r   rz   r{   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   r3   r   rz   r{   r|   r`   ra   rƒ   r+   r+   r,   r‚   –  s
   

zPackager._write_rich_value_relc                 C   s@   | j j}tƒ }t|ƒsd S | |¡ | |  d¡¡ | ¡  d S )NúdocProps/custom.xml)r   Úcustom_propertiesr	   r3   rt   r`   r^   ra   )r(   ru   Úcustomr+   r+   r,   rG   ž  s   
zPackager._write_custom_filec                 C   s   t ƒ }| | jj¡ |  ¡  d}d}| j ¡ D ] }|jr*| 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|ƒ ¡ qT| jrg| ¡  t
d| jd ƒD ]}| dt|ƒ ¡ qot
d| jd ƒD ]}| dt|ƒ ¡ qƒ| jjjr˜| ¡  | jjr¨| ¡  | jjr¨| ¡  | jjr°| ¡  | jjr¸| ¡  | jj  !¡ rÂ| "¡  | #|  $d¡¡ | %¡  d S )Nr   Zsheetrg   rh   ÚtableÚcommentsz[Content_Types].xml)&r   Z_add_image_typesr   Zimage_typesÚ_get_table_countr6   r7   Z_add_chartsheet_namerd   Z_add_worksheet_nameÚranger    Z_add_chart_namer!   Z_add_drawing_namer#   Z_add_vml_namer"   Z_add_table_namer$   Z_add_comment_namern   ro   Z_add_shared_stringsÚvba_projectrN   Úvba_project_signaturerO   r†   Z_add_custom_propertiesry   Z_add_metadatarz   r~   Z_add_rich_valuer`   r^   ra   )r(   ÚcontentÚworksheet_indexÚchartsheet_indexr8   Úir+   r+   r,   r:   ª  sF   


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_formatsrl   r   Z_set_style_propertiesr`   r^   ra   )r(   r’   r“   r”   r•   r–   r—   r˜   r™   rl   Ústylesr+   r+   r,   rF   ã  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,   rH     rb   zPackager._write_theme_filec              	   C   sj   d}| j  ¡ D ]+}|j}|sq|D ] }tƒ }| |  dt|ƒ d ¡¡ | |¡ | ¡  |d7 }qqd S )Nr   zxl/tables/tablerc   )	r   r6   Útablesr   r`   r^   rd   rt   ra   )r(   rf   r8   Ztable_propsrˆ   r+   r+   r,   rD     s   ÿ

ùúzPackager._write_table_filesc                 C   s.   | j  ¡ D ]}|jD ]	}|  jd7  _q
qd S r2   )r   r6   rœ   r"   )r(   r8   Ú_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-propertiesrw   z/extended-propertiesrq   z/custom-propertiesr…   z_rels/.rels)r   Ú_add_document_relationshipZ_add_package_relationshipr   r†   r`   r^   ra   )r(   Úrelsr+   r+   r,   r;      s   zPackager._write_root_rels_filec                 C   sì   t ƒ }d}d}| j ¡ D ]&}|jr"| ddt|ƒ d ¡ |d7 }q| ddt|ƒ d ¡ |d7 }q| dd¡ | d	d
¡ | jjjrJ| dd¡ | jjrT| 	dd¡ | jj
r^| dd¡ | jj ¡ rh| ¡  | |  d¡¡ | ¡  d S )Nr   z/chartsheetzchartsheets/sheetrc   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   r6   r7   rž   rd   rn   ro   rŒ   Ú_add_ms_package_relationshipry   rz   r~   Z_add_rich_value_relationshipr`   r^   ra   )r(   rŸ   r   r   r8   r+   r+   r,   r<   1  s2   ÿ
ÿ

z"Packager._write_workbook_rels_filec                 C   s   d}| j  ¡ D ]>}|jrq|d7 }|j|j |j |j |j |j }|s&qt	ƒ }|D ]}|j
|Ž  q+| |  dt|ƒ d ¡¡ | ¡  qd S )Nr   r   zxl/worksheets/_rels/sheetú	.xml.rels)r   r6   r7   Zexternal_hyper_linksÚexternal_drawing_linksÚexternal_vml_linksZexternal_background_linksZexternal_table_linksZexternal_comment_linksr   rž   r`   r^   rd   ra   ©r(   rf   r8   Zexternal_linksrŸ   Z	link_datar+   r+   r,   rI   Z  s6   ÿþýüûÿ	ÿ
äz$Packager._write_worksheet_rels_filesc                 C   sx   d}| j  ¡ D ]2}|jsq|d7 }|j|j }|sqtƒ }|D ]}|j|Ž  q| |  dt	|ƒ d ¡¡ | 
¡  qd S )Nr   r   zxl/chartsheets/_rels/sheetr¡   )r   r6   r7   r¢   r£   r   rž   r`   r^   rd   ra   r¤   r+   r+   r,   rJ   {  s"   
ÿÿ
éz%Packager._write_chartsheet_rels_filesc                 C   sn   d}| j  ¡ D ]-}|jr|d7 }|jsqtƒ }|jD ]}|j|Ž  q| |  dt|ƒ d ¡¡ | 	¡  qd S )Nr   r   zxl/drawings/_rels/drawingr¡   )
r   r6   rh   Zdrawing_linksr   rž   r`   r^   rd   ra   )r(   rf   r8   rŸ   Údrawing_datar+   r+   r,   rK   —  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^   rd   ra   )r(   r8   rf   rŸ   r¥   r+   r+   r,   rj   ­  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,   rP   ½  s   ÿz%Packager._write_vba_project_rels_filec                 C   sr   | j j ¡ sd S tƒ }d}| j jjD ]}|d }d|› d|› }| d|¡ |d7 }q| |  d¡¡ | ¡  d S )Nr   z../media/imageÚ.z/imagez(/xl/richData/_rels/richValueRel.xml.rels)	r   rz   r~   r   r{   rž   r`   r^   ra   )r(   rŸ   rf   Ú
image_dataÚ	file_typeÚ
image_filer+   r+   r,   rL   Î  s   
z%Packager._write_rich_value_rels_filesc              	   C   s  | j }d}|jj|j }|D ]v}|d }d|d  }|d }dt|ƒ | }| js`|  |¡}	|rBt|	dd}
|
 | ¡ ¡ |
 	¡  n>t
||	ƒ zt |	t |	¡jtjB ¡ W n) ty_   Y n!w |re|}	nt|dd}| ¡ }t|ƒ}	| 	¡  | j |	|d	f¡ |d7 }qd S )
Nr   r   r¦   rp   zxl/media/imageÚwb©ÚmodeÚrbT)r   rz   r{   rd   r   r^   ÚopenÚwriteÚgetvaluerZ   r   rY   ÚchmodÚstatÚst_modeÚS_IWRITEÚOSErrorÚreadr   r&   r[   )r(   r   rf   r{   Úimager„   Úextr§   Zxml_image_namer\   Úos_filer©   r+   r+   r,   rM   â  s>   


ÿÿ
ÙzPackager._add_image_filesc                 C   ó¨   | j j}| j j}|sd S d}| js2|  |¡}|r+t|dd}| | ¡ ¡ | ¡  d S t	||ƒ d S |r7|}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,   rO     ó&   
z#Packager._add_vba_project_signaturec                 C   rº   )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,   rN   5  r¾   zPackager._add_vba_project),Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r/   r1   r9   rU   r^   r?   r=   r>   r@   rA   rB   rC   rE   rR   rQ   rS   rT   r   r€   r   r‚   rG   r:   rF   rH   rD   rŠ   r;   r<   rI   rJ   rK   rj   rP   rL   rM   rO   rN   Ú__classcell__r+   r+   r)   r,   r   &   sR    / $*	
9)!0#r   ),rY   r²   rW   Úshutilr   Úior   r   rv   r   Zcontenttypesr   rx   r   r‡   r	   r}   r
   Zrelationshipsr   Zsharedstringsr   Z
rich_valuer   Zrich_value_typesr   Zrich_value_relr   Zrich_value_structurer   rš   r   r›   r   rk   r   rˆ   r   r‰   r   Ú
exceptionsr   Úobjectr   r+   r+   r+   r,   Ú<module>   s0   	