
    Mwg                        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 ddl
mZ  e       Zej/                  d	d
       ej/                  dd       ej/                  dd       ej/                  dd       ej/                  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y) z
File manifest
    )	MimeTypesN)Serialisable)StringSequence)
fromstring)	ARC_CONTENT_TYPES	ARC_THEME	ARC_STYLE
THEME_TYPESTYLES_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                   2    e Zd ZdZ e       Z e       Zd Zy)FileExtensionDefaultc                      || _         || _        y N)	ExtensionContentType)selfr   r   s      R/var/www/horilla/myenv/lib/python3.12/site-packages/openpyxl/packaging/manifest.py__init__zFileExtension.__init__)   s    "&    N)__name__
__module____qualname__tagnamer   r   r   r    r   r   r   r   "   s    GI(K'r   r   c                   2    e Zd Zd Z e       Z e       Zd Zy)Overridec                      || _         || _        y r   PartNamer   )r   r&   r   s      r   r   zOverride.__init__5   s     &r   N)r   r   r   r    r   r&   r   r   r!   r   r   r#   r#   .   s    GxH(K'r   r#   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   r#   c                 @    |st         }|| _        |st        }|| _        y r   )DEFAULT_TYPESr   DEFAULT_OVERRIDEr#   )r   r   r#   s      r   r   zManifest.__init__Q   s"     #G'H r   c                 T    | j                   D cg c]  }|j                   c}S c c}w r   )r#   r&   )r   parts     r   	filenameszManifest.filenames]   s    *.--8$888s   %c                    | j                   D ch c].  }t        j                  j                  |j                        d   0 }}t        |      D cg c]   }|s|dd t        j                  d   |   f" c}S c c}w c c}w )z\
        Map content types to file extensions
        Skip parts without extensions
           NT)r#   ospathsplitextr&   sorted	mimetypes	types_map)r   r3   extsexts       r   
extensionszManifest.extensionsb   sq     AEN  /3NNEKD\YcUXQR)--d3C89YY OYs   3A9A>A>c                     | j                   D cg c]  }|j                   }}| j                  D ]1  \  }}||vst        ||      }| j                   j	                  |       3 t
        |          }|j                  dt               |S c c}w )zR
        Custom serialisation method to allow setting a default namespace
        xmlns)	r   r   r@   r   appendsuperto_treesetr   )r   tdefaultsr?   mimetree	__class__s         r   rE   zManifest.to_treel   s     *.6AAKK66 	*IC("$S$/##D)	* w +& 7s   Bc                 H    | j                   D ]  }|j                  |k(  s y y)zF
        Check whether a particular content type is contained
        TNr#   r   r   content_typerG   s      r   __contains__zManifest.__contains__z   s&      	A}},	r   c                 V    	 t        | j                  |            S # t        $ r Y yw xY w)z,
        Find specific content-type
        N)nextfindallStopIteration)r   rO   s     r   findzManifest.find   s-    	\233 		s    	((c              #   V   K   | j                   D ]  }|j                  |k(  s|  yw)z>
        Find all elements of a specific content-type
        NrM   rN   s      r   rS   zManifest.findall   s,       	A}},	s   ))c                 |    t        |j                  |j                        }| j                   j                  |       y)zZ
        Add content object to the package manifest
        # needs a contract...
        r%   N)r#   r9   	mime_typerC   )r   objcts      r   rC   zManifest.append   s*    
 sxxS]]CR r   c                     | j                  |       | j                  |       | j                  |j                                |j	                  | j
                  t        | j                                      y)z/
        Write manifest to the archive
        )r4   N)rC   
_write_vba_register_mimetypesnamelistwritestrr9   r   rE   )r   archiveworkbooks      r   _writezManifest._write   sU     	H!  7+;+;+= >HT\\^$<=r   c                     |D ]g  }t         j                  j                  |      d   }|s(t        j                  d   |   }t        |dd |      }| j                  j                  |       i y)zT
        Make sure that the mime type for all file extensions is registered
        r6   Tr7   N)r8   r9   r:   r<   r=   r   r   rC   )r   r4   fnr?   rI   fes         r   r]   zManifest._register_mimetypes   sk      	$B''""2&r*C&&t,S1Ds12w-BLL#	$r   c                 b   |j                   rt        |j                   j                  t                    }t        j                  |      }| j                  }|j                  D ]J  }|j                  t        t        t        fvr!|j                  |vs0| j                  j                  |       L yy)zI
        Add content types from cached workbook when keeping VBA
        N)vba_archiver   readr   r+   	from_treer4   r#   r&   r   r   r   rC   )r   ra   nodemfr4   overrides         r   r\   zManifest._write_vba   s     h22778IJKD##D)BIKK 3$$WdC,@@$$I5MM((2	3	  r   )r!   r!   )r   r   r   r    r   r   r   r#   r9   __elements__r   propertyr4   r@   rE   rP   rU   rS   rC   rb   r]   r\   __classcell__)rK   s   @r   r+   r+   G   s    G]4@Ght<H D*L 	! 9 9 Z Z!>
$3r   r+   )__doc__r<   r   os.pathr8   !openpyxl.descriptors.serialisabler   openpyxl.descriptorsr   r   openpyxl.xml.functionsr   openpyxl.xml.constantsr   r	   r
   r   r   r   r   r   r   r   add_typer   r#   r0   r1   r+   r!   r   r   <module>rw      s      : 1 -
 
 
 , K	 	  $f - 	  Mw W 	  96 B 	  Mv V 	  =& )	'L 	'	'| 	' &TU%*+ S9_k*S9_j)!#_` "ij	 {3| {3r   