
    >wgq                     "   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e*      Z+y)    N)copy)StringIO)BytesIO   )App)ContentTypes)Core)Custom)Metadata)Relationships)SharedStrings)	RichValue)RichValueTypes)RichValueRel)RichValueStructure)Styles)Theme)Vml)Table)Comments)EmptyChartSeriesc                       e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z* xZ+S ))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                     t         t        |           d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        g | _        g | _        y)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__s    J/var/www/horilla/myenv/lib/python3.12/site-packages/xlsxwriter/packager.pyr   zPackager.__init__V   sn     	h&(  !!"    c                     || _         y N)r   )r*   r   s     r,   _set_tmpdirzPackager._set_tmpdirq   s	    r-   c                     || _         y r/   )r   )r*   r   s     r,   _set_in_memoryzPackager._set_in_memoryu   s	    "r-   c                    || _         t        |j                        | _        t        |j                        | _        |j                  | _        |j                  | _        |j                  | _        | j                   j                         D ]9  }|j                  r| xj                  dz  c_        %| xj                  dz  c_        ; y Nr   )r    lenchartsr#   drawingsr$   r&   r'   r(   
worksheetsis_chartsheetr"   r!   )r*   r    	worksheets      r,   _add_workbookzPackager._add_workbooky   s     x/ !2!23%33!)!;!;$11113 	*I&&%%*%$$)$		*r-   c                 z   | j                          | j                          | j                          | j                          | j	                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j                          | j!                          | j#                          | j%                          | j'                          | j)                          | j+                          | j-                          | j/                          | j1                          | j3                          | j5                          | j6                  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*   s    r,   _create_packagezPackager._create_package   sP   &&(""$&&(##%$$&!!#!!!#!!#!'')!! ((*))+&&())+'')))+!!#$$&~~r-   c                     | j                   rt               }n8t        j                  | j                        \  }}t        j                  |       | j                  j                  ||df       |S )N)dirF)	r   r   tempfilemkstempr   oscloser)   append)r*   xml_filenameos_filenamefds       r,   	_filenamezPackager._filename   sU     >>"*K ( 0 0T[[ ARHHRL{L%@Ar-   c                 |    | j                   }|j                  | j                  d             |j                          y )Nxl/workbook.xml)r    _set_xml_writerrd   _assemble_xml_file)r*   r    s     r,   rB   zPackager._write_workbook_file   s/    ==  0A!BC##%r-   c           	      @   d}| j                   j                         D ]  }|j                  r|j                  r |j	                          |j                          |j                  | j                  dt        |      z   dz                |j                          |dz  } y )Nr   zxl/worksheets/sheet.xml)
r    r8   r9   constant_memory_opt_reopen_write_single_rowrg   rd   strrh   r*   indexr:   s      r,   r@   zPackager._write_worksheet_files   s    113 	I&&((%%'++-%%4s5zAFJK ((*QJE	r-   c           	          d}| j                   j                         D ]S  }|j                  s|j                  | j	                  dt        |      z   dz                |j                          |dz  }U y )Nr   zxl/chartsheets/sheetrj   )r    r8   r9   rg   rd   rn   rh   ro   s      r,   rA   z Packager._write_chartsheet_files   so    113 	I**%%5E
BVKL ((*QJE	r-   c           	      (   | j                   j                  sy d}| j                   j                  D ]`  }|j                  st        d|z        |j	                  | j                  dt        |      z   dz                |j                          |dz  }b y )Nr   zFChart%d must contain at least one data series. See chart.add_series().zxl/charts/chartrj   )r    r6   seriesr   rg   rd   rn   rh   )r*   rp   charts      r,   rC   zPackager._write_chart_files   s    }}##]])) 	E<<&;=BC 
 !!03u:=FG $$&QJE	r-   c           	          | j                   sy d}| j                  j                  D ]F  }|j                  | j	                  dt        |      z   dz                |j                          |dz  }H y )Nr   zxl/drawings/drawingrj   )r$   r    r7   rg   rd   rn   rh   )r*   rp   drawings      r,   rD   zPackager._write_drawing_files   sl    !!}}-- 	G##4s5zAFJK &&(QJE	r-   c           	         d}| j                   j                         D ]5  }|j                  s|j                  s|j                  rzt	               }|j                  | j                  dt        |      z   dz                |j                  |j                  |j                  |j                  |j                         |dz  }|j                  st	               }|j                  | j                  dt        |      z   dz                |j                  |j                  |j                  dz  d d |j                         | j                  ||       |dz  }8 y )Nr   zxl/drawings/vmlDrawingz.vmli   )r    r8   has_vmlhas_header_vmlr   rg   rd   rn   rh   vml_data_idvml_shape_idcomments_listbuttons_listvml_header_idheader_images_list_write_vml_drawing_rels_file)r*   rp   r:   vmls       r,   rE   zPackager._write_vml_files   s9   113 	I$$Y-E-E  e##NN#;c%j#H6#QR &&))**++**	 
''e##NN#;c%j#H6#QR &&++++d200 11)UC
?	r-   c           	         d}| j                   j                         D ]h  }|j                  st               }|j	                  | j                  dt        |      z   dz                |j                  |j                         |dz  }j y )Nr   zxl/commentsrj   )	r    r8   has_commentsr   rg   rd   rn   rh   r|   )r*   rp   r:   comments       r,   rF   zPackager._write_comment_files  sy    113 	I))jG##DNN=3u:3MPV3V$WX&&y'>'>?QJE	r-   c                     t               }| j                  j                  |_        | j                  j                  j                  sy |j                  | j                  d             |j                          y )Nzxl/sharedStrings.xml)r   r    	str_tablestring_tablecountrg   rd   rh   )r*   ssts     r,   rH   z#Packager._write_shared_strings_file+  sU    o==22}}&&,,DNN+ABC r-   c                 N   | j                   j                  }t               }d}| j                   j                         D ]?  }|j                  r|j
                  dk7  s |j                  |j                         |dz  }A |j                  d|g       | j                   j                         D ]*  }|j                  s|j                  |j                         , |j                  d| j                  g       | j                  r&|j                  dt        | j                        g       | j                  D ]  }|j                  |        |j                  |       | j                   j                  |_        |j                  | j!                  d             |j#                          y )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_securityrg   rd   rh   )r*   
propertiesappr!   r:   named_ranges         r,   rU   zPackager._write_app_file6  ss   ]]11
e 113 	%I&& 1$""9>>21$	% 	|_=> 113 	/I**y~~.	/ 	x)>)>?@ !!>3t7H7H3I"JK  ,, 	,K{+	, 	J'==22DNN+=>? r-   c                     | j                   j                  }t               }|j                  |       |j	                  | j                  d             |j                          y )NdocProps/core.xml)r    r   r	   r   rg   rd   rh   )r*   r   cores      r,   rT   zPackager._write_core_file`  sJ    ]]11
vZ(T^^,?@A!r-   c                 8   | j                   j                  sy t               }| j                   j                  |_        t	        | j                   j
                  j                        |_        |j                  | j                  d             |j                          y )Nzxl/metadata.xml)r    has_metadatar   has_dynamic_functionsr5   embedded_imagesimagesnum_embedded_imagesrg   rd   rh   )r*   metadatas     r,   rV   zPackager._write_metadata_filei  sl    }})):)-)L)L&'*4==+H+H+O+O'P$  0A!BC##%r-   c                     | j                   j                  j                         sy | j                          | j	                          | j                          | j                          y r/   )r    r   
has_images_write_rich_value_write_rich_value_types_write_rich_value_structure_write_rich_value_relrX   s    r,   rW   z Packager._write_rich_value_filesu  sK    }},,779 $$&((*""$r-   c                     | j                  d      }t               }| j                  j                  j                  |_        |j                  |       |j                          y )Nzxl/richData/rdrichvalue.xml)rd   r   r    r   r   rg   rh   r*   filenamexml_files      r,   r   zPackager._write_rich_value  sJ    >>"?@;#'==#@#@#G#G   *##%r-   c                 |    | j                  d      }t               }|j                  |       |j                          y )Nz xl/richData/rdRichValueTypes.xml)rd   r   rg   rh   r   s      r,   r   z Packager._write_rich_value_types  s3    >>"DE!#  *##%r-   c                     | j                  d      }t               }| j                  j                  |_        |j	                  |       |j                          y )Nz$xl/richData/rdrichvaluestructure.xml)rd   r   r    has_embedded_descriptionsrg   rh   r   s      r,   r   z$Packager._write_rich_value_structure  sE    >>"HI%'-1]]-T-T*  *##%r-   c                     | j                  d      }t               }t        | j                  j                  j
                        |_        |j                  |       |j                          y )Nzxl/richData/richValueRel.xml)	rd   r   r5   r    r   r   r   rg   rh   r   s      r,   r   zPackager._write_rich_value_rel  sO    >>"@A>'*4==+H+H+O+O'P$  *##%r-   c                     | j                   j                  }t               }t        |      sy |j	                  |       |j                  | j                  d             |j                          y )NdocProps/custom.xml)r    custom_propertiesr
   r5   r   rg   rd   rh   )r*   r   customs      r,   rJ   zPackager._write_custom_file  sT    ]]44
:z*t~~.CDE!!#r-   c                    t               }|j                  | j                  j                         | j	                          d}d}| j                  j                         D ]S  }|j                  r#|j                  dt        |      z          |dz  }2|j                  dt        |      z          |dz  }U t        d| j                  dz         D ]  }|j                  dt        |      z          ! t        d| j                  dz         D ]  }|j                  dt        |      z          ! | j                  r|j!                          t        d| j"                  dz         D ]  }|j%                  dt        |      z          ! t        d| j&                  dz         D ]  }|j)                  dt        |      z          ! | j                  j*                  j,                  r|j/                          | j                  j0                  r6|j3                          | j                  j4                  r|j7                          | j                  j8                  r|j;                          | j                  j<                  r|j?                          | j                  j@                  jC                         r|jE                          |jG                  | jI                  d             |jK                          y )Nr   sheetrt   rv   tablecommentsz[Content_Types].xml)&r   _add_image_typesr    image_types_get_table_countr8   r9   _add_chartsheet_namern   _add_worksheet_nameranger#   _add_chart_namer$   _add_drawing_namer&   _add_vml_namer%   _add_table_namer'   _add_comment_namer   r   _add_shared_stringsvba_projectrQ   vba_project_signaturerR   r   _add_custom_propertiesr   _add_metadatar   r   _add_rich_valuerg   rd   rh   )r*   contentworksheet_indexchartsheet_indexr:   is         r,   r=   z"Packager._write_content_types_file  ss   .  !:!:;113 	%I&&,,Ws;K7L-LM A% ++Gc/6J,JK1$	% q$**Q./ 	6A##Gc!f$45	6 q$,,q01 	:A%%i#a&&89	: !!#q$**Q./ 	6A##Gc!f$45	6 q$00145 	;A%%j3q6&9:	; ==""(('') ==$$$$&}}22224 ==****, ==%%!!# ==((335##%/D EF""$r-   c                 8   | j                   j                  }| j                   j                  }| j                   j                  }| j                   j                  }| j                   j
                  }| j                   j                  }| j                   j                  }| j                   j                  }| j                   j                  }	t               }
|
j                  |||||||||	g	       |
j                  | j                  d             |
j                          y )Nzxl/styles.xml)r    
xf_formatspalette
font_countnum_formatsborder_count
fill_countcustom_colorsdxf_formatsr   r   _set_style_propertiesrg   rd   rh   )r*   r   r   r   r   r   r   r   r   r   styless              r,   rI   zPackager._write_styles_file  s    ]]--
--'']]--
mm//}}11]]--
33mm//}}11$$
	
 	t~~o>?!!#r-   c                 x    t               }|j                  | j                  d             |j                          y )Nzxl/theme/theme1.xml)r   rg   rd   rh   )r*   themes     r,   rK   zPackager._write_theme_file  s-    dnn-BCD  "r-   c           
      0   d}| j                   j                         D ]w  }|j                  }|s|D ]a  }t               }|j	                  | j                  dt        |      z   dz                |j                  |       |j                          |dz  }c y y )Nr   zxl/tables/tablerj   )	r    r8   tablesr   rg   rd   rn   r   rh   )r*   rp   r:   table_propsr   s        r,   rG   zPackager._write_table_files  s    113 	I#**K* %%NN#4s5z#AF#JK %%k2((*
	r-   c                     | j                   j                         D ](  }|j                  D ]  }| xj                  dz  c_         * y r4   )r    r8   r   r%   )r*   r:   _s      r,   r   zPackager._get_table_count  sD    113 	&I%% &  A% &	&r-   c                 4   t               }|j                  dd       |j                  dd       |j                  dd       | j                  j                  r|j                  dd       |j                  | j                  d	             |j                          y )
Nz/officeDocumentrf   z/metadata/core-propertiesr   z/extended-propertiesr   z/custom-propertiesr   z_rels/.rels)r   _add_document_relationship_add_package_relationshipr    r   rg   rd   rh   )r*   relss     r,   r>   zPackager._write_root_rels_file   s    ''(9;LM&&'BDWX''(>@RS==**++,@BWXT^^M:;!r-   c                 $   t               }d}d}| j                  j                         D ][  }|j                  r'|j	                  ddt        |      z   dz          |dz  }6|j	                  ddt        |      z   dz          |dz  }] |j	                  dd       |j	                  d	d
       | j                  j                  j                  r|j	                  dd       | j                  j                  r|j                  dd       | j                  j                  r|j	                  dd       | j                  j                  j                         r|j                          |j                  | j                  d             |j!                          y )Nr   z/chartsheetzchartsheets/sheetrj   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   rn   r   r   r   _add_ms_package_relationshipr   r   r   _add_rich_value_relationshiprg   rd   rh   )r*   r   r   r   r:   s        r,   r?   z"Packager._write_workbook_rels_file1  sl   113 
	%I&&//!#6=M9N#NQW#W !A% // "4s?7K"Kf"T  1$
	% 	''2DE''	<@ ==""((++,<>QR ==$$--m=MN ==%%++,<nM ==((335--/T^^,HIJ!r-   c           	         d}| j                   j                         D ]  }|j                  r|dz  }|j                  |j                  z   |j
                  z   |j                  z   |j                  z   |j                  z   }|set               }|D ]  } |j                  |   |j                  | j                  dt        |      z   dz                |j                           y )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   rg   rd   rn   rh   r*   rp   r:   external_linksr   	link_datas         r,   rL   z$Packager._write_worksheet_rels_filesZ  s    113 	&I&&QJE ..223../ 556 00	1
 223  " !?D+ <	///;<   :SZG+UV ##%9	&r-   c           	      `   d}| j                   j                         D ]  }|j                  s|dz  }|j                  |j                  z   }|s1t               }|D ]  } |j                  |   |j                  | j                  dt        |      z   dz                |j                           y )Nr   r   zxl/chartsheets/_rels/sheetr   )r    r8   r9   r   r   r   r   rg   rd   rn   rh   r   s         r,   rM   z%Packager._write_chartsheet_rels_files{  s    113 	&I**QJE 0093O3OO  " !?D+ <	///;<   ;c%jH;VW ##%/	&r-   c           	      T   d}| j                   j                         D ]  }|j                  r|dz  }|j                  s!t	               }|j                  D ]  } |j
                  |   |j                  | j                  dt        |      z   dz                |j                           y )Nr   r   zxl/drawings/_rels/drawingr   )
r    r8   rv   drawing_linksr   r   rg   rd   rn   rh   )r*   rp   r:   r   drawing_datas        r,   rN   z"Packager._write_drawing_rels_files  s    113 	&I  
** !?D ) 7 7 ?///>?   :SZG+UV ##%#	&r-   c                     t               }|j                  D ]  } |j                  |   |j                  | j	                  dt        |      z   dz                |j                          y )Nzxl/drawings/_rels/vmlDrawingz	.vml.rels)r   vml_drawing_linksr   rg   rd   rn   rh   )r*   r:   rp   r   r   s        r,   r   z%Packager._write_vml_drawing_rels_file  si    
 %77 	;L+D++\:	; 	NN9CJFTU	
 	!r-   c                     | j                   j                  }|sy t               }|j                  dd       |j	                  | j                  d             |j                          y )Nz/vbaProjectSignaturezvbaProjectSignature.binzxl/_rels/vbaProject.bin.rels)r    r   r   r   rg   rd   rh   )r*   r   r   s      r,   rS   z%Packager._write_vba_project_rels_file  s[     $ C C$ ))"$=	
 	T^^,JKL!r-   c                 X   | j                   j                  j                         sy t               }d}| j                   j                  j                  D ]&  }|d   }d| d| }|j                  d|       |dz  }( |j                  | j                  d             |j                          y )Nr   z../media/image.z/imagez(/xl/richData/_rels/richValueRel.xml.rels)	r    r   r   r   r   r   rg   rd   rh   )r*   r   rp   
image_data	file_type
image_files         r,   rO   z%Packager._write_rich_value_rels_files  s    }},,779 --77>> 	J"1I)%)=J++HjAQJE		 	T^^,VWX!r-   c                    | j                   }d}|j                  j                  |j                  z   }|D ]4  }|d   }d|d   z   }|d   }dt        |      z   |z   }| j                  s| j                  |      }	|r=t        |	d      }
|
j                  |j                                |
j                          nt        ||	       	 t        j                  |	t        j                  |	      j                  t        j                  z         n[|r|}	n8t        |d      }|j#                         }t%        |      }	|j                          | j&                  j)                  |	|d	f       |dz  }7 y # t         $ r Y w xY w)
Nr   r   r   r   zxl/media/imagewbmoderbT)r    r   r   rn   r   rd   openwritegetvaluer_   r   r^   chmodstatst_modeS_IWRITEOSErrorreadr   r)   r`   )r*   r    rp   r   imager   extr   xml_image_namerb   os_filer   s               r,   rP   zPackager._add_image_files  sT   ==))008??B '	EQxHa.CqJ-E
:S@N>>"nn^<";T:GMM*"5"5"78MMO;/')=)E)E)U ",K!%hT!:J!+!2J")*"5K$$&%%{ND&IJQJEO'	0 # s   AE--	E98E9c                    | j                   j                  }| j                   j                  }|sy d}| j                  s]| j	                  |      }|r=t        |d      }|j                  |j                                |j                          y t        ||       y |r|}n8t        |d      }|j                         }t        |      }|j                          | j                  j                  ||df       y )Nzxl/vbaProjectSignature.binr   r  r  T)r    r   vba_project_signature_is_streamr   rd   r  r  r  r_   r   r  r   r)   r`   )r*   r   r  xml_vba_signature_namerb   r  vba_filevba_datas           r,   rR   z#Packager._add_vba_project_signature  s     $ C C*.--*W*W'$!=~~..)?@K.{63<<>?*K8 /3 5DA#==?%h/ NN!!;0F"MNr-   c                    | j                   j                  }| j                   j                  }|sy d}| j                  s]| j	                  |      }|r=t        |d      }|j                  |j                                |j                          y t        ||       y |r|}n8t        |d      }|j                         }t        |      }|j                          | j                  j                  ||df       y )Nzxl/vbaProject.binr   r  r  T)r    r   vba_project_is_streamr   rd   r  r  r  r_   r   r  r   r)   r`   )r*   r   r  xml_vba_namerb   r  r  r  s           r,   rQ   zPackager._add_vba_project5  s    mm// $ C C*~~..6K${6k2245[+. %)$7#==?%h/ NN!!;d"CDr-   ),__name__
__module____qualname____doc__r   r0   r2   r;   rY   rd   rB   r@   rA   rC   rD   rE   rF   rH   rU   rT   rV   rW   r   r   r   r   rJ   r=   rI   rK   rG   r   r>   r?   rL   rM   rN   r   rS   rO   rP   rR   rQ   __classcell__)r+   s   @r,   r   r   &   s    '^6#*@&"("H
	!(!T"
&%&&&&
$7%r$<#$&""'"R&B&8&," """(.`!OF!Er-   r   ),r^   r  r\   shutilr   ior   r   r   r   contenttypesr   r   r	   r   r
   r   r   relationshipsr   sharedstringsr   
rich_valuer   rich_value_typesr   rich_value_relr   rich_value_structurer   r   r   r   r   r   r   r   r   r   r   
exceptionsr   objectr    r-   r,   <module>r*     s^    
       &    ( ( ! , ( 4      (pEv pEr-   