U
    Y»{j²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   úI/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PyPDF2/xmp.pyÚ	_identityU   s    r   c              	   C   s(  t  | ¡}|d k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   s     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)	rC   ÚcachedÚretvalÚelementZbagsZbagÚitemr   Úns_cache©rA   r@   r   r   rH   w   s    
z_getter_bag.<locals>.get)r   r   Ústr©r@   rA   rH   r   rU   r   Ú_getter_bagt   s    rX   )r@   rA   Ú	converterr   c                    s$   dt tt  dœ‡ ‡‡fdd„}|S )Nr?   rB   c           	         s´   | j  ˆi ¡ ˆ¡}|r|S g }|  dˆˆ¡D ]j}| td¡}t|ƒr€|D ]2}| td¡D ] }|  |¡}ˆ |ƒ}| |¡ qZqJq.ˆ |  |¡ƒ}| |¡ q.| j  ˆi ¡}||ˆ< |S )NrD   ZSeqrE   rF   )	rC   rP   rQ   rR   ZseqsÚseqrS   r   rT   ©rY   rA   r@   r   r   rH   �   s"    
z_getter_seq.<locals>.get)r   r   r   ©r@   rA   rY   rH   r   r[   r   Ú_getter_seqŠ   s     r]   c                    s&   dt tttf  dœ‡ ‡fdd„}|S )Nr?   rB   c           	         s¦   | j  ˆi ¡ ˆ ¡}|r|S i }|  dˆˆ ¡D ]\}| td¡}t|ƒr||D ].}| td¡D ]}|  |¡}||| d¡< qZqJq.|  |¡|d< q.| j  ˆi ¡}||ˆ < |S )NrD   ZAltrE   zxml:langz	x-default)	rG   rH   rI   rJ   rK   rL   rM   ZgetAttributerO   )	rC   rP   rQ   rR   ZaltsZaltrS   r   rT   rU   r   r   rH   §   s    
z_getter_langalt.<locals>.get)r   r   r   rW   r   rU   r   Ú_getter_langalt¤   s    "r^   c                    s    dt t dœ‡ ‡‡fdd„}|S )Nr?   rB   c                    s€   | j  ˆi ¡ ˆ¡}|r|S d }|  dˆˆ¡D ]&}|j|jkrF|j}n
|  |¡} qVq.|d k	rfˆ |ƒ}| j  ˆi ¡}||ˆ< |S ©NrD   )rG   rH   rI   ÚnodeTypeÚATTRIBUTE_NODEÚ	nodeValuerM   rO   )rC   rP   r   rR   rT   r[   r   r   rH   ¿   s    
z_getter_single.<locals>.get)r   r   r\   r   r[   r   Ú_getter_single¼   s    rc   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   sj   || _ z| j  ¡ }t|ƒ}W n0 tk
rL } ztd|› �ƒ‚W 5 d }~X Y nX | td¡d | _i | _d S )Nz#XML in XmpInformation was invalid: ZRDFr   )	rd   Úget_datar   r   r   rJ   rK   Úrdf_rootrG   )rC   rd   ÚdataZdoc_rootÚer   r   r   Ú__init__Û   s    
  ÿþzXmpInformation.__init__)r   c                 C   s   t dddƒ | jS )NÚrdfRootrf   ú4.0.0)r   rf   ©rC   r   r   r   rj   ç   s    zXmpInformation.rdfRoot)rd   Úencryption_keyr   c                 C   s   | j  ||¡ d S r   )rd   Úwrite_to_stream©rC   rd   rm   r   r   r   rn   ì   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.
        ÚwriteToStreamrn   ú3.0.0N)r   rn   ro   r   r   r   rp   ñ   s    zXmpInformation.writeToStream)Ú	about_urir@   rA   r   c                 c   sT   | j  td¡D ]@}| td¡|kr| ||¡}|d k	r<|V  | ||¡E d H  qd S ©NÚDescriptionZabout)rf   rJ   rK   ÚgetAttributeNSZgetAttributeNodeNS)rC   rr   r@   rA   ÚdescÚattrr   r   r   rI   ü   s    zXmpInformation.get_element)ÚaboutUrir@   rA   r   c                 C   s   t dddƒ |  |||¡S )zV
        .. deprecated:: 1.28.0

            Use :meth:`get_element` instead.
        Ú
getElementrI   rq   )r   rI   )rC   rx   r@   rA   r   r   r   ry     s    zXmpInformation.getElement)rr   r@   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 rs   )
rf   rJ   rK   ru   ÚrangeÚ
attributesÚlengthrS   ZnamespaceURIÚ
childNodes)rC   rr   r@   rv   Úirw   Úchildr   r   r   Úget_nodes_in_namespace  s    


z%XmpInformation.get_nodes_in_namespace)rx   r@   r   c                 C   s   t dddƒ |  ||¡S )za
        .. deprecated:: 1.28.0

            Use :meth:`get_nodes_in_namespace` instead.
        ÚgetNodesInNamespacer€   rq   )r   r€   )rC   rx   r@   r   r   r   r�     s      ÿz"XmpInformation.getNodesInNamespace)rR   r   c                 C   s*   d}|j D ]}|j|jkr
||j7 }q
|S r_   )r}   r`   Z	TEXT_NODErg   )rC   rR   Útextr   r   r   r   rM   '  s
    
zXmpInformation._get_textZcontributorZcoverageZcreatorÚdateÚdescriptionÚformatÚ
identifierÚlanguageZ	publisherZrelationZrightsÚsourceÚsubjectÚtitleÚtypeÚKeywordsZ
PDFVersionZProducerZ
CreateDatec                 C   s   t dddƒ | jS ©NÚxmp_createDateÚxmp_create_daterk   ©r   r�   rl   r   r   r   rŽ   —  s    zXmpInformation.xmp_createDater   c                 C   s   t dddƒ || _d S r�   r�   ©rC   r   r   r   r   rŽ   œ  s    Z
ModifyDatec                 C   s   t dddƒ | jS ©NÚxmp_modifyDateÚxmp_modify_daterk   ©r   r”   rl   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_daterk   ©r   r˜   rl   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_toolrq   ©r   rœ   rl   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_idrq   ©r   r    rl   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_idrq   )r   r
   rV   r¤   rl   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_propertiesrD   u   â†‚r-   Nr   é   é   )Úbase)Úhasattrr¥   r€   ÚPDFX_NAMESPACEZ	localNameÚfindÚchrr(   r`   ra   rb   rM   )rC   ÚnodeÚkeyÚidxr   r   r   r   Úcustom_propertiesò  s$    


ÿþÿ
z XmpInformation.custom_properties)AÚ__name__Ú
__module__Ú__qualname__Ú__doc__r   ri   ÚpropertyÚ
XmlElementrj   r   r	   rV   Úbytesrn   rp   r   r   rI   ry   r€   r�   rM   rX   ÚDC_NAMESPACEZdc_contributorrc   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�   r8   rŽ   Úsetterr”   r“   r˜   r—   rœ   r›   ÚXMPMM_NAMESPACEr    rŸ   r¤   r£   r   r°   r   r   r   r   r?   Ó   s     þ þ	  þ þ
ÿ
ÿ
ÿ	)0r´   r8   r4   ÚreÚtypingr   r   r   r   r   r   r   r	   r
   Zxml.dom.minidomr   r   r¶   r   Zxml.parsers.expatr   Z_utilsr   r   r   Úerrorsr   Zgenericr   r   rK   r¸   rº   r¹   r¼   rª   ÚcompileÚVERBOSEr0   r   r   rV   r>   rX   r]   r^   rc   r?   r   r   r   r   Ú<module>   s^   ,ð þÿ  þ þÿ  þ