
    ddb                        d Z ddlmZ ddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl
m&Z&  e            Ze'                    d	d
           e'                    dd           e'                    dd           e'                    dd           e'                    dd            G d de          Z( G d de          Z) e(dd           e(dd	          gZ* e)dez   e           e)dez   e           e)dd           e)dd          gZ+ G d de          Z,dS ) z
File manifest
    )	MimeTypesN)Serialisable)StringSequence)
fromstring)ARC_COREARC_CONTENT_TYPESARC_WORKBOOKARC_APP	ARC_THEME	ARC_STYLEARC_SHARED_STRINGSEXTERNAL_LINK
THEME_TYPESTYLES_TYPEXLSXXLSMXLTMXLTXWORKSHEET_TYPECOMMENTS_TYPESHARED_STRINGSDRAWING_TYPE
CHART_TYPECHARTSHAPE_TYPECHARTSHEET_TYPECONTYPES_NSACTIVEXCTRLVBA)tostringzapplication/xmlz.xmlz8application/vnd.openxmlformats-package.relationships+xmlz.relsz$application/vnd.ms-office.vbaProjectz.binz8application/vnd.openxmlformats-officedocument.vmlDrawingz.vmlzimage/x-emfz.emfc                   @    e Zd ZdZ e            Z e            Zd ZdS )FileExtensionDefaultc                 "    || _         || _        d S N)	ExtensionContentType)selfr'   r(   s      ;lib/python3.11/site-packages/openpyxl/packaging/manifest.py__init__zFileExtension.__init__9   s    "&    N)__name__
__module____qualname__tagnamer   r'   r(   r+    r,   r*   r#   r#   2   s>        GI&((K' ' ' ' 'r,   r#   c                   @    e Zd Zd Z e            Z e            Zd ZdS )Overridec                 "    || _         || _        d S r&   PartNamer(   )r)   r6   r(   s      r*   r+   zOverride.__init__E   s     &r,   N)r-   r.   r/   r0   r   r6   r(   r+   r1   r,   r*   r3   r3   >   s>        GvxxH&((K' ' ' ' 'r,   r3   relsxml/z/docProps/core.xmlz:application/vnd.openxmlformats-package.core-properties+xmlz/docProps/app.xmlzEapplication/vnd.openxmlformats-officedocument.extended-properties+xmlc                        e Zd ZdZ eed          Z eed          ZdZdZ		 	 ddZ
ed             Zed	             Z fd
Zd Zd Zd Zd Zd Zd Zd Z xZS )ManifestTypesT)expected_typeuniquez[Content_Types].xml)r$   r3   r1   c                 F    |st           }|| _        |st          }|| _        d S r&   )DEFAULT_TYPESr$   DEFAULT_OVERRIDEr3   )r)   r$   r3   s      r*   r+   zManifest.__init__a   s0      	$#G 	('H r,   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r1   )r6   .0parts     r*   
<listcomp>z&Manifest.filenames.<locals>.<listcomp>o   s    888$888r,   )r3   )r)   s    r*   	filenameszManifest.filenamesm   s    88$-8888r,   c                 V    d | j         D             }d t          |          D             S )z\
        Map content types to file extensions
        Skip parts without extensions
        c                 b    h | ],}t           j                            |j                  d          -S ))ospathsplitextr6   rD   s     r*   	<setcomp>z&Manifest.extensions.<locals>.<setcomp>x   s/    NNN  //3NNNr,   c                 V    g | ]&}||d d         t           j        d         |         f'S )   NT)	mimetypes	types_map)rE   exts     r*   rG   z'Manifest.extensions.<locals>.<listcomp>y   s8    YYYcUXYQRR)-d3C89YYYr,   )r3   sorted)r)   extss     r*   
extensionszManifest.extensionsr   s4     ONNNNYYVD\\YYYYr,   c                 $   d | j         D             }| j        D ]3\  }}||vr*t          ||          }| j                             |           4t	          t
          |                                           }|                    dt                     |S )zR
        Custom serialisation method to allow setting a default namespace
        c                     g | ]	}|j         
S r1   )r'   )rE   ts     r*   rG   z$Manifest.to_tree.<locals>.<listcomp>   s    666AAK666r,   xmlns)	r$   rW   r#   appendsuperr;   to_treesetr   )r)   defaultsrT   mimetree	__class__s        r*   r^   zManifest.to_tree|   s     76666 	* 	*IC(" *$S$//##D)))Xt$$,,..+&&&r,   c                 6    | j         D ]}|j        |k    r dS dS )zF
        Check whether a particular content type is contained
        TNr3   r(   r)   content_typerZ   s      r*   __contains__zManifest.__contains__   s:      	 	A}, tt	 	r,   c                 j    	 t          |                     |                    S # t          $ r Y dS w xY w)z,
        Find specific content-type
        N)nextfindallStopIteration)r)   rg   s     r*   findzManifest.find   sC    	\22333 	 	 	FF	s   !$ 
22c              #   <   K   | j         D ]}|j        |k    r|V  dS )z>
        Find all elements of a specific content-type
        Nre   rf   s      r*   rk   zManifest.findall   s<        	 	A}, 	 	r,   c                 p    t          |j        |j                  }| j                             |           dS )zZ
        Add content object to the package manifest
        # needs a contract...
        r5   N)r3   rM   	mime_typer\   )r)   objcts      r*   r\   zManifest.append   s6    
 sxS]CCCR     r,   c                    |                      |           |                     |           |                     |                                           |                    | j        t          |                                                      dS )z/
        Write manifest to the archive
        )rH   N)r\   
_write_vba_register_mimetypesnamelistwritestrrM   r!   r^   )r)   archiveworkbooks      r*   _writezManifest._write   sy     	H!!!  7+;+;+=+= >>>HT\\^^$<$<=====r,   c                     |D ]t}t           j                            |          d         }|s*t          j        d         |         }t          |dd         |          }| j                            |           udS )zT
        Make sure that the mime type for all file extensions is registered
        rK   TrQ   N)rL   rM   rN   rR   rS   r#   r$   r\   )r)   rH   fnrT   ra   fes         r*   ru   zManifest._register_mimetypes   s      	$ 	$B'""2&&r*C &t,S1Ds122w--BL####	$ 	$r,   c                 D   |j         rt          |j                             t                              }t                              |          }| j        }|j        D ]C}|j        t          t          t          fvr|j        |vr| j                            |           BdS dS )zI
        Add content types from cached workbook when keeping VBA
        N)vba_archiver   readr	   r;   	from_treerH   r3   r6   r   r   r    r\   )r)   ry   nodemfrH   overrides         r*   rt   zManifest._write_vba   s      	3h2778IJJKKD##D))BIK 3 3$WdC,@@ $I5 3M((222	3 	33 3r,   )r1   r1   )r-   r.   r/   r0   r   r#   r$   r3   rM   __elements__r+   propertyrH   rW   r^   rh   rm   rk   r\   rz   ru   rt   __classcell__)rc   s   @r*   r;   r;   W   s-       Gh]4@@@Gxht<<<H D*L 	! 	! 	! 	! 9 9 X9 Z Z XZ          ! ! !> > >
$ 
$ 
$3 3 3 3 3 3 3r,   r;   )-__doc__rR   r   os.pathrL   !openpyxl.descriptors.serialisabler   openpyxl.descriptorsr   r   openpyxl.xml.functionsr   openpyxl.xml.constantsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   add_typer#   r3   r@   rA   r;   r1   r,   r*   <module>r      s            : : : : : : 1 1 1 1 1 1 1 1 - - - - - -                                                     6 , + + + + + IKK	 	  $f - - - 	  Mw W W W 	  96 B B B 	  Mv V V V 	  =& ) ) )	' 	' 	' 	' 	'L 	' 	' 	'	' 	' 	' 	' 	'| 	' 	' 	' M&TUUM%*++ HS9_k**HS9_j))H!#_``H "ijj	 {3 {3 {3 {3 {3| {3 {3 {3 {3 {3r,   