
    f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+dS )    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 | _        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__s    U/var/www/ffwdstore.be/apps/py-env/lib/python3.11/site-packages/xlsxwriter/packager.pyr   zPackager.__init__V   s     	h&&(((  !!"    c                     || _         d S N)r   )r*   r   s     r,   _set_tmpdirzPackager._set_tmpdirq   s    r-   c                     || _         d S r/   )r   )r*   r   s     r,   _set_in_memoryzPackager._set_in_memoryu   s    "r-   c                 H   || _         t          |j                  | _        t          |j                  | _        |j        | _        |j        | _        |j        | _        | j         	                                D ]*}|j
        r| xj        dz  c_        | xj        dz  c_        +d S Nr   )r    lenchartsr#   drawingsr$   r&   r'   r(   
worksheetsis_chartsheetr"   r!   )r*   r    	worksheets      r,   _add_workbookzPackager._add_workbooky   s     x// !233%3!)!;$11133 	* 	*I& *%%*%%%$$)$$$		* 	*r-   c                 H   |                                   |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  | 	                                 | 
                                 |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  |                                  | 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*   s    r,   _create_packagezPackager._create_package   s   &&(((""$$$&&(((##%%%$$&&&!!###!!!!!###!!###!!!'')))!!!!!!   ((***))+++&&((())+++'')))))+++!!###$$&&&~r-   c                     | j         rt                      }n1t          j        | j                  \  }}t          j        |           | j                            ||df           |S )N)dirF)	r   r   tempfilemkstempr   oscloser)   append)r*   xml_filenameos_filenamefds       r,   	_filenamezPackager._filename   sc     > 	"**KK ( 0T[ A A ARHRLLL{L%@AAAr-   c                     | j         }|                    |                     d                     |                                 d S )Nxl/workbook.xml)r    _set_xml_writerrd   _assemble_xml_file)r*   r    s     r,   rB   zPackager._write_workbook_file   sB    =  0A!B!BCCC##%%%%%r-   c           	      X   d}| j                                         D ]}|j        r
|j        r(|                                 |                                 |                    |                     dt          |          z   dz                        |	                                 |dz  }d S )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3 	 	I& ( .%%'''++---%%4s5zzAFJKK   ((***QJEE	 	r-   c           	          d}| j                                         D ]^}|j        s
|                    |                     dt          |          z   dz                        |                                 |dz  }_d S )Nr   zxl/chartsheets/sheetrj   )r    r8   r9   rg   rd   rn   rh   ro   s      r,   rA   z Packager._write_chartsheet_files   s    1133 	 	I* %%5E

BVKLL   ((***QJEE	 	r-   c           	         | j         j        sd S d}| j         j        D ]o}|j        st          d|z            |                    |                     dt          |          z   dz                        |                                 |dz  }pd S )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    }# 	F]) 	 	E< &;=BC  
 !!03u::=FGG   $$&&&QJEE	 	r-   c           	          | j         sd S d}| j        j        D ]V}|                    |                     dt          |          z   dz                        |                                 |dz  }Wd S )Nr   zxl/drawings/drawingrj   )r$   r    r7   rg   rd   rn   rh   )r*   rp   drawings      r,   rD   zPackager._write_drawing_files   s    ! 	F}- 	 	G##4s5zzAFJKK   &&(((QJEE	 	r-   c           	         d}| j                                         D ])}|j        s|j        s|j        rzt	                      }|                    |                     dt          |          z   dz                        |                    |j	        |j
        |j        |j                   |dz  }|j        rt	                      }|                    |                     dt          |          z   dz                        |                    |j        |j        dz  d d |j                   |                     ||           |dz  }+d S )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   st   1133 	 	I$ Y-E   ee##NN#;c%jj#H6#QRR   &&)*+*	   
' ee##NN#;c%jj#H6#QRR   &&++d20   11)UCCC
?	 	r-   c           	      "   d}| j                                         D ]r}|j        s
t                      }|                    |                     dt          |          z   dz                        |                    |j                   |dz  }sd S )Nr   zxl/commentsrj   )	r    r8   has_commentsr   rg   rd   rn   rh   r|   )r*   rp   r:   comments       r,   rF   zPackager._write_comment_files  s    1133 	 	I) jjG##DNN=3u::3MPV3V$W$WXXX&&y'>???QJEE	 	r-   c                     t                      }| j        j        |_        | j        j        j        sd S |                    |                     d                     |                                 d S )Nzxl/sharedStrings.xml)r   r    	str_tablestring_tablecountrg   rd   rh   )r*   ssts     r,   rH   z#Packager._write_shared_strings_file+  sf    oo=2}&, 	FDNN+ABBCCC     r-   c                    | j         j        }t                      }d}| j                                         D ]4}|j        r
|j        dk    r|                    |j                   |dz  }5|                    d|g           | j                                         D ]$}|j        s
|                    |j                   %|                    d| j	        g           | j
        r)|                    dt          | j
                  g           | j
        D ]}|                    |           |                    |           | 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_securityrg   rd   rh   )r*   
propertiesappr!   r:   named_ranges         r,   rU   zPackager._write_app_file6  s   ]1
ee 1133 	% 	%I&  1$$""9>2221$ 	|_=>>> 1133 	/ 	/I* y~.... 	x)>?@@@  	L!!>3t7H3I3I"JKKK  , 	, 	,K{++++J'''=2DNN+=>>???     r-   c                     | j         j        }t                      }|                    |           |                    |                     d                     |                                 d S )NdocProps/core.xml)r    r   r	   r   rg   rd   rh   )r*   r   cores      r,   rT   zPackager._write_core_file`  sb    ]1
vvZ(((T^^,?@@AAA!!!!!r-   c                    | 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_imagesrg   rd   rh   )r*   metadatas     r,   rV   zPackager._write_metadata_filei  s{    }) 	F::)-)L&'*4=+H+O'P'P$  0A!B!BCCC##%%%%%r-   c                     | j         j                                        sd S |                                  |                                  |                                  |                                  d S 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  sn    },7799 	F   $$&&&((***""$$$$$r-   c                     |                      d          }t                      }| j        j        j        |_        |                    |           |                                 d S )Nzxl/richData/rdrichvalue.xml)rd   r   r    r   r   rg   rh   r*   filenamexml_files      r,   r   zPackager._write_rich_value  sY    >>"?@@;;#'=#@#G   ***##%%%%%r-   c                     |                      d          }t                      }|                    |           |                                 d S )Nz xl/richData/rdRichValueTypes.xml)rd   r   rg   rh   r   s      r,   r   z Packager._write_rich_value_types  sK    >>"DEE!##  ***##%%%%%r-   c                     |                      d          }t                      }| j        j        |_        |                    |           |                                 d S )Nz$xl/richData/rdrichvaluestructure.xml)rd   r   r    has_embedded_descriptionsrg   rh   r   s      r,   r   z$Packager._write_rich_value_structure  sX    >>"HII%''-1]-T*  ***##%%%%%r-   c                     |                      d          }t                      }t          | j        j        j                  |_        |                    |           |                                 d S )Nzxl/richData/richValueRel.xml)	rd   r   r5   r    r   r   r   rg   rh   r   s      r,   r   zPackager._write_rich_value_rel  sa    >>"@AA>>'*4=+H+O'P'P$  ***##%%%%%r-   c                     | j         j        }t                      }t          |          sd S |                    |           |                    |                     d                     |                                 d S )NdocProps/custom.xml)r    custom_propertiesr
   r5   r   rg   rd   rh   )r*   r   customs      r,   rJ   zPackager._write_custom_file  su    ]4
: 	Fz***t~~.CDDEEE!!#####r-   c                    t                      }|                    | j        j                   |                                  d}d}| j                                        D ]^}|j        r+|                    dt          |          z              |dz  }4|	                    dt          |          z              |dz  }_t          d| j        dz             D ]'}|                    dt          |          z              (t          d| j        dz             D ]'}|                    dt          |          z              (| j        r|                                 t          d| j        dz             D ]'}|                    dt          |          z              (t          d| j        dz             D ]'}|                    dt          |          z              (| j        j        j        r|                                 | j        j        r4|                                 | j        j        r|                                 | j        j        r|                                 | j        j        r|                                 | j        j         !                                r|"                                 |#                    | $                    d                     |%                                 d S )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  s   ..  !:;;;1133 	% 	%I& %,,Ws;K7L7L-LMMM A%  ++Gc/6J6J,JKKK1$q$*Q.// 	6 	6A##Gc!ff$45555q$,q011 	: 	:A%%i#a&&&89999 	$!!###q$*Q.// 	6 	6A##Gc!ff$45555q$01455 	; 	;A%%j3q66&9:::: ="( 	*''))) =$ 	5$$&&&}2 522444 =* 	-**,,, =% 	$!!### =(3355 	&##%%%/D E EFFF""$$$$$r-   c                    | 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_propertiesrg   rd   rh   )r*   r   r   r   r   r   r   r   r   r   styless              r,   rI   zPackager._write_styles_file  s    ]-
-']-
m/}1]-
3m/}1$$
	
 	
 	
 	t~~o>>???!!#####r-   c                     t                      }|                    |                     d                     |                                 d S )Nzxl/theme/theme1.xml)r   rg   rd   rh   )r*   themes     r,   rK   zPackager._write_theme_file  sD    dnn-BCCDDD  """""r-   c           
      N   d}| j                                         D ]}|j        }|s|D ]y}t                      }|                    |                     dt          |          z   dz                        |                    |           |                                 |dz  }zd S )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3 	 	I#*K *  %%NN#4s5zz#AF#JKK   %%k222((***
	 	r-   c                 r    | j                                         D ]}|j        D ]}| xj        dz  c_        d S r4   )r    r8   r   r%   )r*   r:   _s      r,   r   zPackager._get_table_count  sW    1133 	& 	&I% & &  A%   &	& 	&r-   c                 b   t                      }|                    dd           |                    dd           |                    dd           | j        j        r|                    dd           |                    |                     d	                     |                                 d S )
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MM&&'BDWXXX''(>@RSSS=* 	Y++,@BWXXXT^^M::;;;!!!!!r-   c                 4   t                      }d}d}| j                                        D ]f}|j        r/|                    ddt          |          z   dz              |dz  }8|                    ddt          |          z   dz              |dz  }g|                    dd           |                    d	d
           | j        j        j        r|                    dd           | j        j        r|	                    dd           | j        j
        r|                    dd           | j        j                                        r|                                 |                    |                     d                     |                                 d S )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  s   1133 
	% 
	%I& 	%//!#6=M9N9N#NQW#W   !A%  // "4s?7K7K"Kf"T    1$''2DEEE''	<@@@ ="( 	S++,<>QRRR =$ 	O--m=MNNN =% 	N++,<nMMM =(3355 	0--///T^^,HIIJJJ!!!!!r-   c           	         d}| j                                         D ]}|j        r
|dz  }|j        |j        z   |j        z   |j        z   |j        z   |j        z   }|sAt                      }|D ]} |j
        |  |                    |                     dt          |          z   dz                        |                                 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   rg   rd   rn   rh   r*   rp   r:   external_linksr   	link_datas         r,   rL   z$Packager._write_worksheet_rels_filesZ  s   1133 	& 	&I& QJE .23./ 56 0	1
 23  "  !??D+ < <	//;;;   :SZZG+UVV   ##%%%%9	& 	&r-   c           	      X   d}| j                                         D ]}|j        s
|dz  }|j        |j        z   }|s!t                      }|D ]} |j        |  |                    |                     dt          |          z   dz                        |
                                 d S )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3 	& 	&I* QJE 093OO  "  !??D+ < <	//;;;   ;c%jjH;VWW   ##%%%%/	& 	&r-   c           	      L   d}| j                                         D ]}|j        r|dz  }|j        st	                      }|j        D ]} |j        |  |                    |                     dt          |          z   dz                        |	                                 d S )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3 	& 	&I  
*  !??D ) 7 ? ?//>>>   :SZZG+UVV   ##%%%%#	& 	&r-   c                     t                      }|j        D ]} |j        |  |                    |                     dt          |          z   dz                        |                                 d S )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  s    
 %7 	; 	;L+D+\::: 	NN9CJJFTUU	
 	
 	
 	!!!!!r-   c                     | j         j        }|sd S t                      }|                    dd           |                    |                     d                     |                                 d S )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$ 	F ))"$=	
 	
 	
 	T^^,JKKLLL!!!!!r-   c                 \   | j         j                                        sd S t                      }d}| j         j        j        D ]-}|d         }d| d| }|                    d|           |dz  }.|                    |                     d                     |                                 d S )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9 	F -7> 	 	J"1I=%==)==J++HjAAAQJEE 	T^^,VWWXXX!!!!!r-   c                    | j         }d}|j        j        |j        z   }|D ]h}|d         }d|d         z   }|d         }dt          |          z   |z   }| j        s|                     |          }	|rMt          |	d          }
|
                    |                                           |
	                                 nt          ||	           	 t          j        |	t          j        |	          j        t          j        z             nz# t           $ r Y nnw xY w|r|}	nHt          |d          }|                                }t%          |          }	|	                                 | j                            |	|d	f           |dz  }jd S )
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  s   =)08?B '	 '	EQxHa.CqJ-E

:S@N> K"nn^<< ";T:::GMM*"5"5"7"7888MMOOOO;///')=)=)E)U    #     '",KK!%hT!:!:!:J!+!2!2J")*"5"5K$$&&&%%{ND&IJJJQJEEO'	 '	s   9D		
DDc                    | j         j        }| j         j        }|sd S d}| j        sw|                     |          }|rNt          |d          }|                    |                                           |                                 d S t          ||           d S |r|}nHt          |d          }|
                                }t          |          }|                                 | j                            ||df           d S )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*.-*W'$ 	F!=~ 	O..)?@@K. 9{6663<<>>???*K88888 / !3 5DAAA#==??%h//   N!!;0F"MNNNNNr-   c                    | j         j        }| j         j        }|sd S d}| j        sw|                     |          }|rNt          |d          }|                    |                                           |                                 d S t          ||           d S |r|}nHt          |d          }|
                                }t          |          }|                                 | j                            ||df           d S )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   m/ $ C 	F*~ 	E..66K$ /{666k2244555[+..... % !)$777#==??%h//   N!!;d"CDDDD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% 7% 7%r$ $ $<# # #  $& & &" " ""'" '" '"R& & &B& & &8& & &," " " " " """ " "(. . .`!O !O !OF!E !E !E !E !E !E !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 4 4 4 4 4                               ( ( ( ( ( (pE pE pE pE pEv pE pE pE pE pEr-   