
    ,hu                     $   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      Z,y)    N)BytesIOStringIO)copy   )App)Comments)ContentTypes)Core)Custom)EmptyChartSeries)FeaturePropertyBag)Metadata)Relationships)	RichValue)RichValueRel)RichValueStructure)RichValueTypes)SharedStrings)Styles)Table)Theme)Vmlc                       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*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         |           d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        g | _        g | _        y)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__s    U/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/xlsxwriter/packager.pyr   zPackager.__init__V   sl     	  !!"    c                     || _         y N)r   )r+   r   s     r-   _set_tmpdirzPackager._set_tmpdirq   s	    r.   c                     || _         y r0   )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                    | 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                          | j7                          | j8                  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+   s    r-   _create_packagezPackager._create_package   s\   &&(""$&&(##%$$&!!#!!!#!!#!'')!! ((*))+&&())+'')))+!!#((*$$&~~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_writerrf   _assemble_xml_file)r+   r!   s     r-   rC   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!   r9   r:   constant_memory_opt_reopen_write_single_rowri   rf   strrj   r+   indexr;   s      r-   rA   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/sheetrl   )r!   r9   r:   ri   rf   rp   rj   rq   s      r-   rB   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 ]a  }|j                  st        d| d      |j	                  | j                  dt        |      z   dz                |j                          |dz  }c y )Nr   Chartz? must contain at least one data series. See chart.add_series().zxl/charts/chartrl   )r!   r7   seriesr   ri   rf   rp   rj   )r+   rr   charts      r-   rD   zPackager._write_chart_files   s    }}##]])) 	E<<&E7 #; < 
 !!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/drawingrl   )r%   r!   r8   ri   rf   rp   rj   )r+   rr   drawings      r-   rE   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!   r9   has_vmlhas_header_vmlr   ri   rf   rp   rj   vml_data_idvml_shape_idcomments_listbuttons_listvml_header_idheader_images_list_write_vml_drawing_rels_file)r+   rr   r;   vmls       r-   rF   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/commentsrl   )	r!   r9   has_commentsr   ri   rf   rp   rj   r   )r+   rr   r;   comments       r-   rG   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countri   rf   rj   )r+   ssts     r-   rI   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   r9   r:   hidden_add_part_namename_add_heading_pairr#   r)   r6   _set_properties	read_onlydoc_securityri   rf   rj   )r+   
propertiesappr"   r;   named_ranges         r-   rV   zPackager._write_app_file7  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   ri   rf   rj   )r+   r   cores      r-   rU   zPackager._write_core_filea  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_functionsr6   embedded_imagesimagesnum_embedded_imagesri   rf   rj   )r+   metadatas     r-   rW   zPackager._write_metadata_filej  sl    }})):)-)L)L&'*4==+H+H+O+O'P$  0A!BC##%r.   c                     | j                   j                         }|sy t               }||_        |j	                  | j                  d             |j                          y )Nz,xl/featurePropertyBag/featurePropertyBag.xml)r!   _has_feature_property_bagsr   feature_property_bagsri   rf   rj   )r+   r   property_bags      r-   rX   z$Packager._write_feature_bag_propertyv  sT     $ H H J$)+-B*$$NNIJ	
 	'')r.   c                     | j                   j                  j                         sy | j                          | j	                          | j                          | j                          y r0   )r!   r   
has_images_write_rich_value_write_rich_value_types_write_rich_value_structure_write_rich_value_relrZ   s    r-   rY   z Packager._write_rich_value_files  sK    }},,779 $$&((*""$r.   c                     | j                  d      }t               }| j                  j                  j                  |_        |j                  |       |j                          y )Nzxl/richData/rdrichvalue.xml)rf   r   r!   r   r   ri   rj   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)rf   r   ri   rj   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)rf   r   r!   has_embedded_descriptionsri   rj   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)	rf   r   r6   r!   r   r   r   ri   rj   r   s      r-   r   zPackager._write_rich_value_rel  sO    >>"@A>'*4==+H+H+O+O'P$  *##%r.   c                     | j                   j                  }t               }|sy |j                  |       |j	                  | j                  d             |j                          y )NdocProps/custom.xml)r!   custom_propertiesr   r   ri   rf   rj   )r+   r   customs      r-   rK   zPackager._write_custom_file  sP    ]]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                  jA                         r|jC                          | j                  jD                  jG                         r|jI                          |jK                  | jM                  d             |jO                          y )Nr   sheetrw   ry   tablecommentsz[Content_Types].xml)(r	   _add_image_typesr!   image_types_get_table_countr9   r:   _add_chartsheet_namerp   _add_worksheet_nameranger$   _add_chart_namer%   _add_drawing_namer'   _add_vml_namer&   _add_table_namer(   _add_comment_namer   r   _add_shared_stringsvba_projectrR   vba_project_signaturerS   r   _add_custom_propertiesr   _add_metadatar   _add_feature_bag_propertyr   r   _add_rich_valueri   rf   rj   )r+   contentworksheet_indexchartsheet_indexr;   is         r-   r>   z"Packager._write_content_types_file  s   .  !:!:;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--/ ==((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_propertiesri   rf   rj   )r+   r   r   r   r   r   r   r   r   r   styless              r-   rJ   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   ri   rf   rj   )r+   themes     r-   rL   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/tablerl   )	r!   r9   tablesr   ri   rf   rp   r   rj   )r+   rr   r;   table_propsr   s        r-   rH   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 r5   )r!   r9   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/officeDocumentrh   z/metadata/core-propertiesr   z/extended-propertiesr   z/custom-propertiesr   z_rels/.rels)r   _add_document_relationship_add_package_relationshipr!   r   ri   rf   rj   )r+   relss     r-   r?   zPackager._write_root_rels_file3  s    ''(9;LM&&'BDWX''(>@RS==**++,@BWXT^^M:;!r.   c                 x   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                         r|j                          |j!                  | j#                  d             |j%                          y )Nr   z/chartsheetzchartsheets/sheetrl   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!   r9   r:   r   rp   r   r   r   _add_ms_package_relationshipr   r   r   _add_rich_value_relationshipr   _add_feature_bag_relationshipri   rf   rj   )r+   r   r   r   r;   s        r-   r@   z"Packager._write_workbook_rels_fileD  s   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--/ ==335..0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!   r9   r:   external_hyper_linksexternal_drawing_linksexternal_vml_linksexternal_background_linksexternal_table_linksexternal_comment_linksr   r   ri   rf   rp   rj   r+   rr   r;   external_linksr   	link_datas         r-   rM   z$Packager._write_worksheet_rels_filesq  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!   r9   r:   r   r   r   r   ri   rf   rp   rj   r   s         r-   rN   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!   r9   ry   drawing_linksr   r   ri   rf   rp   rj   )r+   rr   r;   r   drawing_datas        r-   rO   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   ri   rf   rp   rj   )r+   r;   rr   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   ri   rf   rj   )r+   r   r   s      r-   rT   z%Packager._write_vba_project_rels_file  s[     $ C C$ ))"$=	
 	T^^,JKL!r.   c                    | j                   j                  j                         sy t               }d}| j                   j                  j                  D ];  }|j
                  j                         }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   
image_typelowerr   ri   rf   rj   )r+   r   rr   imageimage_extension
image_files         r-   rP   z%Packager._write_rich_value_rels_files  s    }},,779 ]]2299 	E#..446O)%/1BCJ++HjAQJE		 	T^^,VWX!r.   c                 f   | j                   }d}|j                  j                  |j                  z   }|D ]k  }dt        |      z   dz   |j                  z   }| j
                  s| j                  |      }|j                  rGt        |d      }|j                  |j                  j                                |j                          nt        |j                  |       	 t        j                  |t        j                   |      j"                  t         j$                  z         ny|j                  r|j                  }nBt        |j                  d      }|j)                         }	t+        |	      }|j                          | j,                  j/                  ||df       |dz  }n y # t&        $ r Y w xY w)Nr   zxl/media/imager  wbmoderbT)r!   r   r   rp   _image_extensionr    rf   
image_dataopenwritegetvaluera   r   r   r`   chmodstatst_modeS_IWRITEOSErrorreadr   r*   rb   )
r+   r!   rr   r   r  xml_image_namerd   os_filer	  r  s
             r-   rQ   zPackager._add_image_files  sg    ==))008??B %	E 3u:-3e6L6LL  >>"nn^<##";T:GMM%"2"2";";"=>MMO5')=)E)E)U ##"'"2"2K!%enn4!@J!+!2J")*"5K$$&%%{ND&IJQJEK%	, # s   AF$$	F0/F0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    rf   r  r  r  ra   r   r  r   r*   rb   )r+   r   r  xml_vba_signature_namerd   r  vba_filevba_datas           r-   rS   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    rf   r  r  r  ra   r   r  r   r*   rb   )r+   r   r"  xml_vba_namerd   r  r  r   s           r-   rR   zPackager._add_vba_projectL  s     mm// $ C C*~~..6K${6k2245[+. %)$7#==?%h/ NN!!;d"CDr.   )-__name__
__module____qualname____doc__r   r1   r3   r<   r[   rf   rC   rA   rB   rD   rE   rF   rG   rI   rV   rU   rW   rX   rY   r   r   r   r   rK   r>   rJ   rL   rH   r   r?   r@   rM   rN   rO   r   rT   rP   rQ   rS   rR   __classcell__)r,   s   @r-   r   r   &   s    '^6#*B&"("H
	!(!T"
&*%&&&&
$;%z$<#$&""+"Z&B&8&," """(-^"OH"Er.   r   )-r`   r  r^   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-   <module>r5     s\    
        &   ( 4  ( ! ( 4 , (    HE HEr.   