a
    ¢…¢f²G  ã                	   @   s¼  d Z ddlZddlZddl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 ddlmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZmZ dZdZdZ dZ!dZ"dZ#e $dej%¡Z&edƒZ'e'e'dœdd„Z(e)ejdœdd„Z*e)e)edge
e	e)  f dœdd„Z+e(fe)e)eegef edge
e	e  f dœdd„Z,e)e)edge
eeef  f dœd d!„Z-e(fe)e)ee)gef edge
e f dœd"d#„Z.G d$d„ deƒZ/dS )%zc
Anything related to XMP metadata.

See https://en.wikipedia.org/wiki/Extensible_Metadata_Platform
é    N)	ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚTypeVarÚUnionÚcast)ÚDocument)ÚElement)ÚparseString)Ú
ExpatErroré   )Ú
StreamTypeÚdeprecate_with_replacementÚdeprecation_with_replacement)ÚPdfReadError)ÚContentStreamÚ	PdfObjectz+http://www.w3.org/1999/02/22-rdf-syntax-ns#z http://purl.org/dc/elements/1.1/zhttp://ns.adobe.com/xap/1.0/zhttp://ns.adobe.com/pdf/1.3/zhttp://ns.adobe.com/xap/1.0/mm/zhttp://ns.adobe.com/pdfx/1.3/a{  
        (?P<year>[0-9]{4})
        (-
            (?P<month>[0-9]{2})
            (-
                (?P<day>[0-9]+)
                (T
                    (?P<hour>[0-9]{2}):
                    (?P<minute>[0-9]{2})
                    (:(?P<second>[0-9]{2}(.[0-9]+)?))?
                    (?P<tzd>Z|[-+][0-9]{2}:[0-9]{2})
                )?
            )?
        )?
        ÚK©ÚvalueÚreturnc                 C   s   | S ©N© )r   r   r   úC/var/www/sistema_ama/venv/lib/python3.9/site-packages/PyPDF2/xmp.pyÚ	_identityU   s    r   c              	   C   s(  t  | ¡}|d u r td| › �ƒ‚t| d¡ƒ}t| d¡p<dƒ}t| d¡pNdƒ}t| d¡p`dƒ}t| d¡prdƒ}t | d	¡p†d¡}| tj¡}|| d
 }	t|ƒ}
t|	ƒ}| d¡p¾d}t	 	||||||
|¡}|dk�r$dd„ | 
d¡D ƒ\}}|d9 }|dk �r|d9 }|t	j||d� }|S )NzInvalid date format: ÚyearÚmonthÚ1ÚdayÚhourÚ0ÚminuteÚsecondi@B ÚtzdÚZc                 s   s   | ]}t |ƒV  qd S r   )Úint)Ú.0Úxr   r   r   Ú	<genexpr>l   ó    z"_converter_date.<locals>.<genexpr>ú:éÿÿÿÿr   )ÚhoursÚminutes)Úiso8601ÚmatchÚ
ValueErrorr(   ÚgroupÚdecimalÚDecimalÚto_integralÚROUND_FLOORÚdatetimeÚsplitÚ	timedelta)r   Úmatchesr   r   r!   r"   r$   r%   Zseconds_decZmilliseconds_decÚsecondsZmillisecondsr&   ÚdtZ	tzd_hoursZtzd_minutesr   r   r   Ú_converter_dateY   s,    


r?   ÚXmpInformation)Ú	namespaceÚnamer   c                    s"   dt tt  dœ‡ ‡fdd„}|S )Nr@   ©Úselfr   c           	         s’   | j  ˆi ¡ ˆ ¡}|r|S g }|  dˆˆ ¡D ]H}| td¡}t|ƒr.|D ]*}| td¡D ]}|  |¡}| |¡ qZqJq.| j  ˆi ¡}||ˆ < |S )NÚ ZBagÚli©	ÚcacheÚgetÚget_elementÚgetElementsByTagNameNSÚRDF_NAMESPACEÚlenÚ	_get_textÚappendÚ
setdefault)	rD   ÚcachedÚretvalÚelementZbagsZbagÚitemr   Úns_cache©rB   rA   r   r   rI   w   s    
z_getter_bag.<locals>.get)r   r   Ústr©rA   rB   rI   r   rV   r   Ú_getter_bagt   s    rY   )rA   rB   Ú	converterr   c                    s$   dt tt  dœ‡ ‡‡fdd„}|S )Nr@   rC   c           	         s´   | j  ˆi ¡ ˆ¡}|r|S g }|  dˆˆ¡D ]j}| td¡}t|ƒr€|D ]2}| td¡D ] }|  |¡}ˆ |ƒ}| |¡ qZqJq.ˆ |  |¡ƒ}| |¡ q.| j  ˆi ¡}||ˆ< |S )NrE   ZSeqrF   rG   )	rD   rQ   rR   rS   ZseqsÚseqrT   r   rU   ©rZ   rB   rA   r   r   rI   �   s"    
z_getter_seq.<locals>.get)r   r   r   ©rA   rB   rZ   rI   r   r\   r   Ú_getter_seqŠ   s     r^   c                    s&   dt tttf  dœ‡ ‡fdd„}|S )Nr@   rC   c           	         s¦   | j  ˆi ¡ ˆ ¡}|r|S i }|  dˆˆ ¡D ]\}| td¡}t|ƒr||D ].}| td¡D ]}|  |¡}||| d¡< qZqJq.|  |¡|d< q.| j  ˆi ¡}||ˆ < |S )NrE   ZAltrF   zxml:langz	x-default)	rH   rI   rJ   rK   rL   rM   rN   ÚgetAttributerP   )	rD   rQ   rR   rS   ZaltsZaltrT   r   rU   rV   r   r   rI   §   s    
z_getter_langalt.<locals>.get)r   r   r   rX   r   rV   r   Ú_getter_langalt¤   s    "r`   c                    s    dt t dœ‡ ‡‡fdd„}|S )Nr@   rC   c                    s€   | j  ˆi ¡ ˆ¡}|r|S d }|  dˆˆ¡D ]&}|j|jkrF|j}n
|  |¡} qVq.|d urfˆ |ƒ}| j  ˆi ¡}||ˆ< |S ©NrE   )rH   rI   rJ   ÚnodeTypeÚATTRIBUTE_NODEÚ	nodeValuerN   rP   )rD   rQ   r   rS   rU   r\   r   r   rI   ¿   s    
z_getter_single.<locals>.get)r   r   r]   r   r\   r   Ú_getter_single¼   s    re   c                   @   sD  e Zd ZdZeddœdd„Zeedœdd„ƒZe	e
deef dd	œd
d„Ze	e
deef dd	œdd„Zeeeee dœdd„Zeeeee dœdd„Zeeee dœdd„Zeeee dœdd„Zeedœdd„ZeeedƒƒZeeedƒƒZeeedƒƒZeeed eƒƒZeeed!ƒƒZ eeed"ƒƒZ!eeed#ƒƒZ"eeed$ƒƒZ#eeed%ƒƒZ$eeed&ƒƒZ%eeed'ƒƒZ&eeed(ƒƒZ'eeed)ƒƒZ(eeed*ƒƒZ)eeed+ƒƒZ*eee+d,ƒƒZ,eee+d-ƒƒZ-eee+d.ƒƒZ.eee/d/eƒƒZ0ee1j1dœd0d1„ƒZ2e2j3e1j1dd2œd3d1„ƒZ2eee/d4eƒƒZ4ee1j1dœd5d6„ƒZ5e5j3e1j1dd2œd7d6„ƒZ5eee/d8eƒƒZ6ee1j1dœd9d:„ƒZ7e7j3e1j1dd2œd;d:„ƒZ7eee/d<ƒƒZ8eedœd=d>„ƒZ9e9j3edd2œd?d>„ƒZ9eee:d@ƒƒZ;eedœdAdB„ƒZ<e<j3edd2œdCdB„ƒZ<eee:dDƒƒZ=eedœdEdF„ƒZ>e>j3edd2œdGdF„ƒZ>ee?eef dœdHdI„ƒZ@dS )Jr@   zµ
    An object that represents Adobe XMP metadata.
    Usually accessed by :py:attr:`xmp_metadata()<PyPDF2.PdfReader.xmp_metadata>`

    :raises PdfReadError: if XML is invalid
    N)Ústreamr   c              
   C   sl   || _ z| j  ¡ }t|ƒ}W n2 tyN } ztd|› �ƒ‚W Y d }~n
d }~0 0 | td¡d | _i | _d S )Nz#XML in XmpInformation was invalid: ZRDFr   )	rf   Úget_datar   r   r   rK   rL   Úrdf_rootrH   )rD   rf   ÚdataZdoc_rootÚer   r   r   Ú__init__Û   s    
$ÿþzXmpInformation.__init__)r   c                 C   s   t dddƒ | jS )NÚrdfRootrh   ú4.0.0)r   rh   ©rD   r   r   r   rl   ç   s    zXmpInformation.rdfRoot)rf   Úencryption_keyr   c                 C   s   | j  ||¡ d S r   )rf   Úwrite_to_stream©rD   rf   ro   r   r   r   rp   ì   s    zXmpInformation.write_to_streamc                 C   s   t dddƒ |  ||¡ dS )zZ
        .. deprecated:: 1.28.0

            Use :meth:`write_to_stream` instead.
        ÚwriteToStreamrp   ú3.0.0N)r   rp   rq   r   r   r   rr   ñ   s    zXmpInformation.writeToStream)Ú	about_urirA   rB   r   c                 c   sT   | j  td¡D ]@}| td¡|kr| ||¡}|d ur<|V  | ||¡E d H  qd S ©NÚDescriptionZabout)rh   rK   rL   ÚgetAttributeNSZgetAttributeNodeNS)rD   rt   rA   rB   ÚdescÚattrr   r   r   rJ   ü   s    zXmpInformation.get_element)ÚaboutUrirA   rB   r   c                 C   s   t dddƒ |  |||¡S )zV
        .. deprecated:: 1.28.0

            Use :meth:`get_element` instead.
        Ú
getElementrJ   rs   )r   rJ   )rD   rz   rA   rB   r   r   r   r{     s    zXmpInformation.getElement)rt   rA   r   c                 c   sr   | j  td¡D ]^}| td¡|krt|jjƒD ] }|j |¡}|j|kr.|V  q.|j	D ]}|j|krV|V  qVqd S ru   )
rh   rK   rL   rw   ÚrangeÚ
attributesÚlengthrT   ZnamespaceURIÚ
childNodes)rD   rt   rA   rx   Úiry   Úchildr   r   r   Úget_nodes_in_namespace  s    


z%XmpInformation.get_nodes_in_namespace)rz   rA   r   c                 C   s   t dddƒ |  ||¡S )za
        .. deprecated:: 1.28.0

            Use :meth:`get_nodes_in_namespace` instead.
        ÚgetNodesInNamespacer‚   rs   )r   r‚   )rD   rz   rA   r   r   r   rƒ     s    ÿz"XmpInformation.getNodesInNamespace)rS   r   c                 C   s*   d}|j D ]}|j|jkr
||j7 }q
|S ra   )r   rb   Z	TEXT_NODEri   )rD   rS   Útextr�   r   r   r   rN   '  s
    
zXmpInformation._get_textZcontributorZcoverageZcreatorÚdateÚdescriptionÚformatÚ
identifierÚlanguageZ	publisherZrelationZrightsÚsourceÚsubjectÚtitleÚtypeZKeywordsZ
PDFVersionZProducerZ
CreateDatec                 C   s   t dddƒ | jS ©NÚxmp_createDateÚxmp_create_daterm   ©r   r�   rn   r   r   r   r�   —  s    zXmpInformation.xmp_createDater   c                 C   s   t dddƒ || _d S rŽ   r‘   ©rD   r   r   r   r   r�   œ  s    Z
ModifyDatec                 C   s   t dddƒ | jS ©NÚxmp_modifyDateÚxmp_modify_daterm   ©r   r•   rn   r   r   r   r”   ©  s    zXmpInformation.xmp_modifyDatec                 C   s   t dddƒ || _d S r“   r–   r’   r   r   r   r”   ®  s    ZMetadataDatec                 C   s   t dddƒ | jS ©NÚxmp_metadataDateÚxmp_metadata_daterm   ©r   r™   rn   r   r   r   r˜   ¼  s    zXmpInformation.xmp_metadataDatec                 C   s   t dddƒ || _d S r—   rš   r’   r   r   r   r˜   Á  s    ZCreatorToolc                 C   s   t dddƒ | jS ©NÚxmp_creatorToolÚxmp_creator_toolrs   ©r   r�   rn   r   r   r   rœ   É  s    zXmpInformation.xmp_creatorToolc                 C   s   t dddƒ || _d S r›   rž   r’   r   r   r   rœ   Î  s    Z
DocumentIDc                 C   s   t dddƒ | jS ©NÚxmpmm_documentIdÚxmpmm_document_idrs   ©r   r¡   rn   r   r   r   r    Ø  s    zXmpInformation.xmpmm_documentIdc                 C   s   t dddƒ || _d S rŸ   r¢   r’   r   r   r   r    Ý  s    Z
InstanceIDc                 C   s   t dddƒ tt| jƒS ©NÚxmpmm_instanceIdÚxmpmm_instance_idrs   )r   r
   rW   r¥   rn   r   r   r   r¤   è  s    zXmpInformation.xmpmm_instanceIdc                 C   s   t dddƒ || _d S r£   )r   r¥   r’   r   r   r   r¤   í  s    c                 C   s¨   t | dƒs¢i | _|  dt¡D ]„}|j}| d¡}|dkr:qx|d|… tt||d |d … dd	�ƒ ||d d…  }q&|j|j	krŒ|j
}n
|  |¡}|| j|< q| jS )
zÁ
        Retrieve custom metadata properties defined in the undocumented pdfx
        metadata schema.

        :return: a dictionary of key/value items for custom metadata properties.
        Ú_custom_propertiesrE   u   â†‚r.   Nr   é   é   )Úbase)Úhasattrr¦   r‚   ÚPDFX_NAMESPACEZ	localNameÚfindÚchrr(   rb   rc   rd   rN   )rD   ÚnodeÚkeyÚidxr   r   r   r   Úcustom_propertiesò  s$    


ÿþÿ
z XmpInformation.custom_properties)AÚ__name__Ú
__module__Ú__qualname__Ú__doc__r   rk   ÚpropertyÚ
XmlElementrl   r   r	   rW   Úbytesrp   rr   r   r   rJ   r{   r‚   rƒ   rN   rY   ÚDC_NAMESPACEZdc_contributorre   Zdc_coverager^   Z
dc_creatorr?   Zdc_dater`   Zdc_descriptionZ	dc_formatZdc_identifierZdc_languageZdc_publisherZdc_relationZ	dc_rightsZ	dc_sourceZ
dc_subjectZdc_titleZdc_typeÚPDF_NAMESPACEZpdf_keywordsZpdf_pdfversionZpdf_producerÚXMP_NAMESPACEr�   r9   r�   Úsetterr•   r”   r™   r˜   r�   rœ   ÚXMPMM_NAMESPACEr¡   r    r¥   r¤   r   r±   r   r   r   r   r@   Ó   s–   þþ	þþ
ÿ
ÿ
ÿ	)0rµ   r9   r5   ÚreÚtypingr   r   r   r   r   r   r   r	   r
   Zxml.dom.minidomr   r   r·   r   Úxml.parsers.expatr   Ú_utilsr   r   r   Úerrorsr   Zgenericr   r   rL   r¹   r»   rº   r½   r«   ÚcompileÚVERBOSEr1   r   r   rW   r?   rY   r^   r`   re   r@   r   r   r   r   Ú<module>   sR   ,ðþÿþþÿþ