a
    8XhG                  	   @   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   O/var/www/viveiro_mudafortebrasil/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	pd}|tj}|| d
 }	t|}
t|	}|dpd}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si | _| 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   ,