o
    ]iOv                     @   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                       s  e Zd ZdZdT fddZdTddZdTdd	ZdTd
dZdd Zdd Z	dTddZ
dTddZdTddZdTddZdTddZdTddZdTddZdTddZdTd d!ZdTd"d#ZdTd$d%ZdTd&d'ZdTd(d)ZdTd*d+ZdTd,d-ZdTd.d/ZdTd0d1ZdTd2d3ZdTd4d5ZdTd6d7ZdTd8d9ZdTd:d;ZdTd<d=Z dTd>d?Z!dTd@dAZ"dTdBdCZ#dTdDdEZ$dTdFdGZ%dTdHdIZ&dTdJdKZ'dTdLdMZ(dTdNdOZ)dTdPdQZ*dTdRdSZ+  Z,S )U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.

    returnNc                    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__ X/var/www/html/stock_analysis/be/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/   r0   )r   )r*   r   r-   r-   r.   _set_in_memoryu   r2   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 r0   )_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*   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_writerrb   _assemble_xml_file)r*   r   r-   r-   r.   rA         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   r8   r9   constant_memory_opt_reopen_write_single_rowrd   rb   strre   r*   indexr:   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/sheetrg   )r   r8   r9   rd   rb   rk   re   rl   r-   r-   r.   r@      s   
z Packager._write_chartsheet_filesc                 C   sd   | j jsd S d}| j jD ]#}|jstd| d|| dt| d  |  |d7 }qd S )Nr   Chartz? must contain at least one data series. See chart.add_series().zxl/charts/chartrg   )r   r6   seriesr   rd   rb   rk   re   )r*   rm   chartr-   r-   r.   rB      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/drawingrg   )r#   r   r7   rd   rb   rk   re   )r*   rm   drawingr-   r-   r.   rC      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   r8   has_vmlhas_header_vmlr   rd   rb   rk   re   vml_data_idvml_shape_idcomments_listbuttons_listvml_header_idheader_images_list_write_vml_drawing_rels_file)r*   rm   r:   vmlr-   r-   r.   rD      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/commentsrg   )	r   r8   has_commentsr   rd   rb   rk   re   rv   )r*   rm   r:   commentr-   r-   r.   rE      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_tablestring_tablecountrd   rb   re   )r*   sstr-   r-   r.   rG   ,  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   
WorksheetsChartszNamed RangesdocProps/app.xml)r   doc_propertiesr   r8   r9   hidden_add_part_namename_add_heading_pairr!   r'   r5   _set_properties	read_onlydoc_securityrd   rb   re   )r*   
propertiesappr    r:   named_ranger-   r-   r.   rT   7  s0   



zPackager._write_app_filec                 C   s4   | j j}t }|| || d |  d S )NdocProps/core.xml)r   r   r	   r   rd   rb   re   )r*   r   corer-   r-   r.   rS   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   has_dynamic_functionsr5   embedded_imagesimagesnum_embedded_imagesrd   rb   re   )r*   metadatar-   r-   r.   rU   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_bagsrd   rb   re   )r*   r   property_bagr-   r-   r.   rV   v  s   
z$Packager._write_feature_bag_propertyc                 C   s4   | j j sd S |   |   |   |   d S r0   )r   r   
has_images_write_rich_value_write_rich_value_types_write_rich_value_structure_write_rich_value_relr)   r-   r-   r.   rW     s   z Packager._write_rich_value_filesc                 C   s2   |  d}t }| jjj|_|| |  d S )Nzxl/richData/rdrichvalue.xml)rb   r   r   r   r   rd   re   r*   filenamexml_filer-   r-   r.   r     s
   

zPackager._write_rich_valuec                 C   s&   |  d}t }|| |  d S )Nz xl/richData/rdRichValueTypes.xml)rb   r   rd   re   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)rb   r   r   has_embedded_descriptionsrd   re   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)	rb   r   r5   r   r   r   r   rd   re   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
   r   rd   rb   re   )r*   r   customr-   r-   r.   rI     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  r|!  | jj"# r|$  |%| &d |'  d S )Nr   sheetrp   rq   tablecommentsz[Content_Types].xml)(r   _add_image_typesr   image_types_get_table_countr8   r9   _add_chartsheet_namerk   _add_worksheet_nameranger"   _add_chart_namer#   _add_drawing_namer%   _add_vml_namer$   _add_table_namer&   _add_comment_namer~   r   _add_shared_stringsvba_projectrP   vba_project_signaturerQ   r   _add_custom_propertiesr   _add_metadatar   _add_feature_bag_propertyr   r   _add_rich_valuerd   rb   re   )r*   contentworksheet_indexchartsheet_indexr:   ir-   r-   r.   r<     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_formatsr|   r   _set_style_propertiesrd   rb   re   )r*   r   r   r   r   r   r   r   r   r|   stylesr-   r-   r.   rH     s0   zPackager._write_styles_filec                 C   s"   t  }|| d |  d S )Nzxl/theme/theme1.xml)r   rd   rb   re   )r*   themer-   r-   r.   rJ     rf   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/tablerg   )	r   r8   tablesr   rd   rb   rk   r   re   )r*   rm   r:   table_propsr   r-   r-   r.   rF     s   

zPackager._write_table_filesc                 C   s.   | j  D ]}|jD ]	}|  jd7  _q
qd S r4   )r   r8   r   r$   )r*   r:   _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/officeDocumentrc   z/metadata/core-propertiesr   z/extended-propertiesr   z/custom-propertiesr   z_rels/.rels)r   _add_document_relationship_add_package_relationshipr   r   rd   rb   re   )r*   relsr-   r-   r.   r=   3  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|  | j rq|  || d |  d S )Nr   z/chartsheetzchartsheets/sheetrg   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   r8   r9   r   rk   r~   r   r   _add_ms_package_relationshipr   r   r   _add_rich_value_relationshipr   _add_feature_bag_relationshiprd   rb   re   )r*   r   r   r   r:   r-   r-   r.   r>   D  s6   



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   r8   r9   external_hyper_linksexternal_drawing_linksexternal_vml_linksexternal_background_linksexternal_table_linksexternal_comment_linksr   r   rd   rb   rk   re   r*   rm   r:   external_linksr   	link_datar-   r-   r.   rK   q  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   r8   r9   r   r   r   r   rd   rb   rk   re   r   r-   r-   r.   rL     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   r8   rq   drawing_linksr   r   rd   rb   rk   re   )r*   rm   r:   r   drawing_datar-   r-   r.   rM     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   vml_drawing_linksr   rd   rb   rk   re   )r*   r:   rm   r   r   r-   r-   r.   rz     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   rd   rb   re   )r*   r   r   r-   r-   r.   rR     s   z%Packager._write_vba_project_rels_filec                 C   st   | j j sd S t }d}| j jjD ]}|j }d| d| }|d| |d7 }q|| 	d |
  d S )Nr   z../media/image.z/imagez(/xl/richData/_rels/richValueRel.xml.rels)r   r   r   r   r   
image_typelowerr   rd   rb   re   )r*   r   rm   imageimage_extension
image_filer-   r-   r.   rN     s   

z%Packager._write_rich_value_rels_filesc           
   	   C   s  | j }d}|jj|j }|D ]q}dt| d |j }| jsX| |}|jr9t|dd}|	|j
  |  nBt|j| zt|t|jtjB  W n, tyW   Y n$w |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   r   r   rk   _image_extensionr   rb   
image_dataopenwritegetvaluer]   r   r   r\   chmodstatst_modeS_IWRITEOSErrorreadr   r(   r^   )
r*   r   rm   r   r   xml_image_namer`   os_filer   r   r-   r-   r.   rO     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   rb   r   r   r   r]   r   r   r   r(   r^   )r*   r   r   xml_vba_signature_namer`   r   vba_filevba_datar-   r-   r.   rQ   (  &   
z#Packager._add_vba_project_signaturec                 C   r   )Nzxl/vbaProject.binr   r   r   T)r   r   vba_project_is_streamr   rb   r   r   r   r]   r   r   r   r(   r^   )r*   r   r   xml_vba_namer`   r   r   r   r-   r-   r.   rP   L  r   zPackager._add_vba_project)r   N)-__name__
__module____qualname____doc__r   r1   r3   r;   rX   rb   rA   r?   r@   rB   rC   rD   rE   rG   rT   rS   rU   rV   rW   r   r   r   r   rI   r<   rH   rJ   rF   r   r=   r>   rK   rL   rM   rz   rR   rN   rO   rQ   rP   __classcell__r-   r-   r+   r.   r   &   sT    /


!






$


*
	









=





-
!





/$r   )-r\   r   rZ   ior   r   shutilr   r   r   r   r   contenttypesr   r   r	   r   r
   
exceptionsr   feature_property_bagr   r   r   relationshipsr   
rich_valuer   rich_value_relr   rich_value_structurer   rich_value_typesr   sharedstringsr   r   r   r   r   r   r   r{   r   r   r-   r-   r-   r.   <module>   s0   
