o
    uhG>                     @   s  d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ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#dZ$e%dej&Z'e
dZ(de(de(fddZ)de*dejfddZ+e)fdeddde*d eegef de	e,e*  f
d!d"Z-d#e*d$e*dedge	e,e*  f fd%d&Z.e)fd#e*d$e*d eegef dedge	e,e  f fd'd(Z/d#e*d$e*dedge	e0eef  f fd)d*Z1e)fd#e*d$e*d ee*gef dedge	e f fd+d,Z2G d-d deeZ3dS ).z~
Anything related to Extensible Metadata Platform (XMP) metadata.

https://en.wikipedia.org/wiki/Extensible_Metadata_Platform
    N)Iterator)AnyCallableOptionalTypeVarUnion)DocumentparseString)Element)
ExpatError   )XmpInformationProtocol)
StreamTypedeprecate_with_replacementdeprecation_no_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/zhttp://www.aiim.org/pdfa/ns/id/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   ?/var/www/html/bot/env/lib/python3.10/site-packages/pypdf/xmp.py	_identityO   s   r   c              	   C   s$  t | }|d u rtd|  t|d}t|dpd}t|dp'd}t|dp0d}t|dp9d}t|d	pCd}|tj}|| d
 }	t|}
t|	}|dp_d}t		||||||
|}|dkrd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>f   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"   seconds_decmilliseconds_decsecondsmillisecondsr#   dt	tzd_hourstzd_minutesr   r   r   _converter_dateS   s,   
r@   elementselfXmpInformation	list_type	converterc           	      C   sX   |  t|}g }t|r*|D ]}| tdD ]}||}||}|| qq|S d S )Nli)getElementsByTagNameNSRDF_NAMESPACElen	_get_textappend)	rA   rB   rD   rE   
containersretval	containeritemr   r   r   r   _generic_getn   s   
rP   	namespacenamec                    s$   dddt tt  f fdd}|S )NrB   rC   r   c                    s   | j i  }|r|S g }| d D ]}t|| dd }d ur*|| q| |}|| q| j i }|| < |S )N BagrD   cachegetget_elementrP   extendrJ   rK   
setdefault)rB   cachedrM   rA   bagsr   ns_cacherR   rQ   r   r   rX      s   
z_getter_bag.<locals>.get)r   liststrrQ   rR   rX   r   r_   r   _getter_bag}   s    rc   c                    s&   dddt tt  f fdd}|S )NrB   rC   r   c                    s   | j i }|r|S g }| dD ]1}t|| d d }d ur+|| qt|| dd }d ur<|| q | |}|| q| j i }||< |S )NrS   Seq)rD   rE   rT   rU   rV   )rB   r\   rM   rA   seqsr]   r   r^   rE   rR   rQ   r   r   rX      s   z_getter_seq.<locals>.get)r   r`   r   rQ   rR   rE   rX   r   rf   r   _getter_seq   s   "rh   c                    s(   dddt tttf  f fdd}|S )NrB   rC   r   c           	         s   | j i  }|r|S i }| d D ].}|td}t|r>|D ]}|tdD ]}| |}|||d< q-q%q| ||d< q| j i }|| < |S )NrS   AltrF   zxml:langz	x-default)	rW   rX   rY   rG   rH   rI   rJ   getAttributer[   )	rB   r\   rM   rA   altsaltrO   r   r^   r_   r   r   rX      s"   
z_getter_langalt.<locals>.get)r   dictr   rb   r   r_   r   _getter_langalt   s   $rn   c                    s"   dddt t f fdd}|S )NrB   rC   r   c                    s|   | j i }|r|S d }| dD ]}|j|jkr#|j}n| |} |d ur1 |}| j i }||< |S NrS   )rW   rX   rY   nodeTypeATTRIBUTE_NODE	nodeValuerJ   r[   )rB   r\   r   rA   r^   rf   r   r   rX      s   
z_getter_single.<locals>.get)r   r   rg   r   rf   r   _getter_single   s   rs   c                	   @   sR  e Zd ZdZdeddfddZ	d0dededee	f ddfdd	Z
d
edededee fddZd
ededee fddZdedef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Z,	 eee+d'eZ-	 eee+d(eZ.	 eee+d)Z/	 eee0d*Z1	 eee0d+Z2	 eee3d,Z4	 eee3d-Z5	 ede6eef fd.d/Z7dS )1rC   z
    An object that represents Extensible Metadata Platform (XMP) metadata.
    Usually accessed by :py:attr:`xmp_metadata()<pypdf.PdfReader.xmp_metadata>`.

    Raises:
      PdfReadError: if XML is invalid

    streamr   Nc              
   C   sd   || _ z| j  }t|}W n ttfy# } ztd| d }~ww |tdd | _i | _	d S )Nz#XML in XmpInformation was invalid: RDFr   )
rt   get_datar	   AttributeErrorr   r   rG   rH   rdf_rootrW   )rB   rt   datadoc_rooter   r   r   __init__   s   

zXmpInformation.__init__encryption_keyc                 C   s.   t ddd |d urtdd | j| d S )NXmpInformation.write_to_streamzPdfWriter.xmp_metadataz6.0.0z/the encryption_key parameter of write_to_streamz5.0.0)r   r   rt   write_to_stream)rB   rt   r}   r   r   r   r      s   r~   	about_urirQ   rR   c                 c   sV    | j tdD ] }|td|kr(|||}|d ur|V  |||E d H  qd S NDescriptionabout)rx   rG   rH   getAttributeNSgetAttributeNodeNS)rB   r   rQ   rR   descattrr   r   r   rY     s   zXmpInformation.get_elementc                 c   sx    | j tdD ]1}|td|kr9t|jjD ]}|j|}|r*|j|kr*|V  q|j	D ]
}|j|kr8|V  q.qd S r   )
rx   rG   rH   r   range
attributeslengthrO   namespaceURI
childNodes)rB   r   rQ   r   ir   childr   r   r   get_nodes_in_namespace  s   

z%XmpInformation.get_nodes_in_namespacerA   c                 C   s*   d}|j D ]}|j|jkr||j7 }q|S ro   )r   rp   	TEXT_NODEry   )rB   rA   textr   r   r   r   rJ     s   

zXmpInformation._get_textcontributorcoveragecreatordatedescriptionformat
identifierlanguage	publisherrelationrightssourcesubjecttitletypeKeywords
PDFVersionProducer
CreateDate
ModifyDateMetadataDateCreatorTool
DocumentID
InstanceIDpartconformancec                 C   s   t | dsRi | _| dtD ]C}|j}	 |d}|dkrn|d| tt||d |d  d	d
 ||d d  }q|j|j	krG|j
}n| |}|| j|< q| jS )z
        Retrieve custom metadata properties defined in the undocumented pdfx
        metadata schema.

        Returns:
            A dictionary of key/value items for custom metadata properties.

        _custom_propertiesrS   Tu   ↂr*   Nr         )base)hasattrr   r   PDFX_NAMESPACE	localNamefindchrr%   rp   rq   rr   rJ   )rB   nodekeyidxr   r   r   r   custom_properties  s(   





z XmpInformation.custom_propertiesr   )8__name__
__module____qualname____doc__r   r|   r   r   ra   bytesr   r   r   rY   r   
XmlElementrJ   propertyrc   DC_NAMESPACEdc_contributorrs   dc_coveragerh   
dc_creatorr@   dc_datern   dc_description	dc_formatdc_identifierdc_languagedc_publisherdc_relation	dc_rights	dc_source
dc_subjectdc_titledc_typePDF_NAMESPACEpdf_keywordspdf_pdfversionpdf_producerXMP_NAMESPACExmp_create_datexmp_modify_datexmp_metadata_datexmp_creator_toolXMPMM_NAMESPACExmpmm_document_idxmpmm_instance_idPDFAID_NAMESPACEpdfaid_partpdfaid_conformancerm   r   r   r   r   r   rC      s    	



)4r   r5   r1   recollections.abcr   typingr   r   r   r   r   xml.dom.minidomr   r	   r
   r   xml.parsers.expatr   
_protocolsr   _utilsr   r   r   errorsr   genericr   r   rH   r   r   r   r   r   r   compileVERBOSEr-   r   r   ra   r@   r`   rP   rc   rh   rm   rn   rs   rC   r   r   r   r   <module>   s    





