o
    ðäjö  ã                   @   s.  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 d	d
¡ e dd¡ e dd¡ e dd¡ e dd¡ G dd„ deƒZG dd„ deƒZeddƒedd	ƒgZede eƒede eƒeddƒeddƒgZG dd„ deƒZdS ) 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                   @   s$   e Zd ZdZeƒ Zeƒ Zdd„ ZdS )ÚFileExtensionÚDefaultc                 C   ó   || _ || _d S ©N)Ú	ExtensionÚContentType)Úselfr   r   © r   ú_/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/openpyxl/packaging/manifest.pyÚ__init__)   ó   
zFileExtension.__init__N)Ú__name__Ú
__module__Ú__qualname__Útagnamer   r   r   r   r   r   r   r   r   "   ó
    r   c                   @   s$   e Zd Zd Zeƒ Zeƒ Zdd„ ZdS )ÚOverridec                 C   r   r   ©ÚPartNamer   )r   r#   r   r   r   r   r   5   r   zOverride.__init__N)r   r   r   r   r   r#   r   r   r   r   r   r   r!   .   r    r!   ÚrelsÚxmlú/z/docProps/core.xmlz:application/vnd.openxmlformats-package.core-properties+xmlz/docProps/app.xmlzEapplication/vnd.openxmlformats-officedocument.extended-properties+xmlc                       sž   e Zd ZdZeedd�Zeedd�ZdZdZ			ddd„Z
ed	d
„ ƒZedd„ ƒZ‡ fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚManifestÚTypesT)Úexpected_typeÚuniquez[Content_Types].xml)r   r!   r   c                 C   s    |st }|| _|st}|| _d S r   )ÚDEFAULT_TYPESr   ÚDEFAULT_OVERRIDEr!   )r   r   r!   r   r   r   r   Q   s   
zManifest.__init__c                 C   s   dd„ | j D ƒS )Nc                 S   ó   g | ]}|j ‘qS r   )r#   ©Ú.0Úpartr   r   r   Ú
<listcomp>_   ó    z&Manifest.filenames.<locals>.<listcomp>)r!   )r   r   r   r   Ú	filenames]   s   zManifest.filenamesc                 C   s"   dd„ | j D ƒ}dd„ t|ƒD ƒS )z\
        Map content types to file extensions
        Skip parts without extensions
        c                 S   s   h | ]}t j |j¡d  ’qS )éÿÿÿÿ)ÚosÚpathÚsplitextr#   r.   r   r   r   Ú	<setcomp>h   s    z&Manifest.extensions.<locals>.<setcomp>c                 S   s*   g | ]}|r|d d… t jd | f‘qS )é   NT)Ú	mimetypesÚ	types_map)r/   Úextr   r   r   r1   i   s   * z'Manifest.extensions.<locals>.<listcomp>)r!   Úsorted)r   Úextsr   r   r   Ú
extensionsb   s   zManifest.extensionsc                    sX   dd„ | j D ƒ}| jD ]\}}||vrt||ƒ}| j  |¡ qtƒ  ¡ }| dt¡ |S )zR
        Custom serialisation method to allow setting a default namespace
        c                 S   r-   r   )r   )r/   Útr   r   r   r1   p   r2   z$Manifest.to_tree.<locals>.<listcomp>Úxmlns)r   r?   r   ÚappendÚsuperÚto_treeÚsetr   )r   Údefaultsr<   ÚmimeÚtree©Ú	__class__r   r   rD   l   s   
€
zManifest.to_treec                 C   s    | j D ]
}|j|kr dS qdS )zF
        Check whether a particular content type is contained
        TN©r!   r   ©r   Úcontent_typer@   r   r   r   Ú__contains__z   s
   

ÿÿzManifest.__contains__c                 C   s&   zt |  |¡ƒW S  ty   Y dS w )z,
        Find specific content-type
        N)ÚnextÚfindallÚStopIteration)r   rM   r   r   r   Úfindƒ   s
   ÿzManifest.findc                 c   s"   � | j D ]
}|j|kr|V  qdS )z>
        Find all elements of a specific content-type
        NrK   rL   r   r   r   rP   �   s   €

€þzManifest.findallc                 C   s    t |j|jd�}| j  |¡ dS )zZ
        Add content object to the package manifest
        # needs a contract...
        r"   N)r!   r6   Ú	mime_typerB   )r   ÚobjÚctr   r   r   rB   –   s   zManifest.appendc                 C   s>   |   |¡ |  |¡ | j| ¡ d� | | jt|  ¡ ƒ¡ dS )z/
        Write manifest to the archive
        )r3   N)rB   Ú
_write_vbaÚ_register_mimetypesÚnamelistÚwritestrr6   r   rD   )r   ÚarchiveÚworkbookr   r   r   Ú_writeŸ   s   

zManifest._writec                 C   sP   |D ]#}t j |¡d }|sqtjd | }t|dd… |ƒ}| j |¡ qdS )zT
        Make sure that the mime type for all file extensions is registered
        r4   Tr9   N)r5   r6   r7   r:   r;   r   r   rB   )r   r3   Úfnr<   rG   Úfer   r   r   rW   ©   s   úzManifest._register_mimetypesc                 C   sb   |j r-t|j  t¡ƒ}t |¡}| j}|jD ]}|jt	t
tfvr!q|j|vr,| j |¡ qdS dS )zI
        Add content types from cached workbook when keeping VBA
        N)Úvba_archiver   Úreadr   r'   Ú	from_treer3   r!   r#   r   r   r   rB   )r   r[   ÚnodeÚmfr3   Úoverrider   r   r   rV   ¶   s   


€øzManifest._write_vba)r   r   )r   r   r   r   r   r   r   r!   r6   Ú__elements__r   Úpropertyr3   r?   rD   rN   rR   rP   rB   r\   rW   rV   Ú__classcell__r   r   rI   r   r'   G   s*    
þ

		
		
r'   )Ú__doc__r:   r   Úos.pathr5   Ú!openpyxl.descriptors.serialisabler   Úopenpyxl.descriptorsr   r   Úopenpyxl.xml.functionsr   Úopenpyxl.xml.constantsr   r   r	   r
   r   r   r   r   r   r   Úadd_typer   r!   r+   r,   r'   r   r   r   r   Ú<module>   s2   ,þü