
     hG                     r   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j$        dej%                  Z& ed          Z'de'de'fdZ(de)dej        fdZ*de)de)dedge
e	e)                  f         fdZ+e(fde)de)deegef         dedge
e	e                  f         fdZ,de)de)dedge
eeef                  f         fdZ-e(fde)de)dee)gef         dedge
e         f         fdZ. G 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                     | S N )r   s    O/var/www/flask_pdf_extract_app/myenv/lib/python3.11/site-packages/PyPDF2/xmp.py	_identityr   U   s    L    c           	         t                               |           }|t          d|            t          |                    d                    }t          |                    d          pd          }t          |                    d          pd          }t          |                    d          pd          }t          |                    d          pd          }t          j        |                    d	          pd          }|                    t
          j                  }||z
  d
z  }	t          |          }
t          |	          }|                    d          pd}t          j	        ||||||
|          }|dk    rKd |
                    d          D             \  }}|dz  }|dk     r|dz  }|t          j        ||          z   }|S )NzInvalid date format: yearmonth1dayhour0minutesecondi@B tzdZc              3   4   K   | ]}t          |          V  d S r   )int).0xs     r   	<genexpr>z"_converter_date.<locals>.<genexpr>l   s(      !A!AQ#a&&!A!A!A!A!A!Ar   :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_minutess                   r   _converter_daterG   Y   s   mmE""G888999w}}V$$%%Dg&&-#..E
gmmE"")c
*
*Cw}}V$$+,,Dx((/C00F_W]]844;<<F$$W%899K,7+G'((L
--


%#C		4T67L	Q	QB
czz!A!A#))C..!A!A!A	;R	q==2K($9kJJJJIr   	namespacenameXmpInformationc                 V     dddt           t          t                            f fd}|S )NselfrJ   r   c                    | j                             
i                               	          }|r|S g }|                     d
	          D ]y}|                    t          d          }t          |          rM|D ]J}|                    t          d          D ],}|                     |          }|                    |           -Kz| j                             
i           }||	<   |S )N Bagli	cachegetget_elementgetElementsByTagNameNSRDF_NAMESPACElen	_get_textappend
setdefault)rL   cachedretvalelementbagsbagitemr   ns_cacherI   rH   s            r   rS   z_getter_bag.<locals>.getw   s    	2..22488 	M''It<< 	- 	-G11-GGD4yy - - -C # : :=$ O O - - $t 4 4e,,,,- :((B77r   )r   r   strrH   rI   rS   s   `` r   _getter_bagrd   t   sF    " xS	':         Jr   	converterc                 Z     dddt           t          t                            f fd}|S )NrL   rJ   r   c                 P   | j                             i                               
          }|r|S g }|                     d
          D ]}|                    t          d          }t          |          rY|D ]U}|                    t          d          D ]7}|                     |          } 	|          }|                    |           8V 	|                     |                    }|                    |           | j                             i           }||
<   |S )NrN   SeqrP   rQ   )rL   r[   r\   r]   seqsseqr`   r   ra   re   rI   rH   s            r   rS   z_getter_seq.<locals>.get   s@   	2..22488 	M''It<< 
	% 
	%G11-GGD4yy % - -C # : :=$ O O - - $t 4 4 )	% 0 0e,,,,-- "	$.."9"9::e$$$$:((B77r   )r   r   r   rH   rI   re   rS   s   ``` r   _getter_seqrl      sL    " xS	':        ( Jr   c                 d     dddt           t          t          t          f                  f fd}|S )NrL   rJ   r   c                 
   | j                             
i                               	          }|r|S i }|                     d
	          D ]}|                    t          d          }t          |          rQ|D ]M}|                    t          d          D ]/}|                     |          }|||                    d          <   0N}|                     |          |d<   | j                             
i           }||	<   |S )NrN   AltrP   zxml:langz	x-default)	rR   rS   rT   rU   rV   rW   rX   getAttributerZ   )rL   r[   r\   r]   altsaltr`   r   ra   rI   rH   s            r   rS   z_getter_langalt.<locals>.get   s&   	2..22488 	M''It<< 	> 	>G11-GGD4yy > F FC # : :=$ O O F F $t 4 4@Et00<<==FF
 '+nnW&=&={##:((B77r   )r   r   r   rc   s   `` r   _getter_langaltrs      sJ    " xS#X'?       $ Jr   c                 D     dddt           t                   f fd}|S )NrL   rJ   r   c                 X   | j                             i                                         }|r|S d }|                     d          D ]/}|j        |j        k    r|j        }n|                     |          } | |          }| j                             i           }||<   |S NrN   )rR   rS   rT   nodeTypeATTRIBUTE_NODE	nodeValuerX   rZ   )rL   r[   r   r]   ra   re   rI   rH   s        r   rS   z_getter_single.<locals>.get   s    	2..22488 	M''It<< 	 	G7#999)w//Ie$$E:((B77r   )r   r   rk   s   ``` r   _getter_singlerz      sG    " x}        " Jr   c            	       V   e Zd ZdZdeddfdZedefd            Zde	de
deef         ddfdZde	de
deef         ddfd	Zd
edededee         fdZdedededee         fdZd
ededee         fdZdededee         fdZdedef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                    Z0	 ede1j1        fd'            Z2e2j3        d(e1j1        ddfd)            Z2 e ee/d*e                    Z4	 ede1j1        fd+            Z5e5j3        d(e1j1        ddfd,            Z5 e ee/d-e                    Z6	 ede1j1        fd.            Z7e7j3        d(e1j1        ddfd/            Z7 e ee/d0                    Z8	 edefd1            Z9e9j3        d(eddfd2            Z9 e ee:d3                    Z;	 edefd4            Z<e<j3        d(eddfd5            Z< e ee:d6                    Z=	 edefd7            Z>e>j3        d(eddfd8            Z>ede?eef         fd9            Z@dS ):rJ   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
    streamr   Nc                 
   || _         	 | j                                         }t          |          }n$# t          $ r}t	          d|           d }~ww xY w|                    t          d          d         | _        i | _        d S )Nz#XML in XmpInformation was invalid: RDFr   )	r|   get_datar   r   r   rU   rV   rdf_rootrR   )rL   r|   datadoc_rootes        r   __init__zXmpInformation.__init__   s    	J;''))D!,T!2!2HH 	J 	J 	JHQHHIII	J$,$C$C5%
 %

% &(


s   (2 
AAAc                 2    t          ddd           | j        S )NrdfRootr   4.0.0)r   r   rL   s    r   r   zXmpInformation.rdfRoot   s    "9j'BBB}r   encryption_keyc                 <    | j                             ||           d S r   )r|   write_to_streamrL   r|   r   s      r   r   zXmpInformation.write_to_stream   s"     	##FN;;;;;r   c                 T    t          ddd           |                     ||           dS )zZ
        .. deprecated:: 1.28.0

            Use :meth:`write_to_stream` instead.
        writeToStreamr   3.0.0N)r   r   r   s      r   r   zXmpInformation.writeToStream   s3     	%_6GQQQV^44444r   	about_urirH   rI   c              #      K   | j                             t          d          D ]Y}|                    t          d          |k    r8|                    ||          }||V  |                    ||          E d {V  Zd S NDescriptionabout)r   rU   rV   getAttributeNSgetAttributeNodeNS)rL   r   rH   rI   descattrs         r   rT   zXmpInformation.get_element   s      M88VV 	H 	HD""='::iGG..y$??#JJJ66y$GGGGGGGGG	H 	Hr   aboutUric                 R    t          ddd           |                     |||          S )zV
        .. deprecated:: 1.28.0

            Use :meth:`get_element` instead.
        
getElementrT   r   )r   rT   )rL   r   rH   rI   s       r   r   zXmpInformation.getElement  s.     	%\='JJJ)T:::r   c              #   J  K   | j                             t          d          D ]}|                    t          d          |k    r^t	          |j        j                  D ]+}|j                            |          }|j        |k    r|V  ,|j	        D ]}|j        |k    r|V  d S r   )
r   rU   rV   r   range
attributeslengthr`   namespaceURI
childNodes)rL   r   rH   r   ir   childs          r   get_nodes_in_namespacez%XmpInformation.get_nodes_in_namespace  s      M88VV 	$ 	$D""='::iGGt566 # #A?//22D(I55"


!_ $ $E)Y66#	$ 	$r   c                 P    t          ddd           |                     ||          S )za
        .. deprecated:: 1.28.0

            Use :meth:`get_nodes_in_namespace` instead.
        getNodesInNamespacer   r   )r   r   )rL   r   rH   s      r   r   z"XmpInformation.getNodesInNamespace  s6     	%!#;W	
 	
 	
 **8Y???r   r]   c                 R    d}|j         D ]}|j        |j        k    r
||j        z  }|S rv   )r   rw   	TEXT_NODEr   )rL   r]   textr   s       r   rX   zXmpInformation._get_text'  s:    ' 	# 	#E~00
"r   contributorcoveragecreatordatedescriptionformat
identifierlanguage	publisherrelationrightssourcesubjecttitletypeKeywords
PDFVersionProducer
CreateDatec                 2    t          ddd           | j        S Nxmp_createDatexmp_create_dater   r   r   r   s    r   r   zXmpInformation.xmp_createDate      "#35FPPP##r   r   c                 6    t          ddd           || _        d S r   r   rL   r   s     r   r   zXmpInformation.xmp_createDate  $    "#35FPPP$r   
ModifyDatec                 2    t          ddd           | j        S Nxmp_modifyDatexmp_modify_dater   r   r   r   s    r   r   zXmpInformation.xmp_modifyDate  r   r   c                 6    t          ddd           || _        d S r   r   r   s     r   r   zXmpInformation.xmp_modifyDate  r   r   MetadataDatec                 2    t          ddd           | j        S Nxmp_metadataDatexmp_metadata_dater   r   r   r   s    r   r   zXmpInformation.xmp_metadataDate  s    "#57JGTTT%%r   c                 6    t          ddd           || _        d S r   r   r   s     r   r   zXmpInformation.xmp_metadataDate  s$    "#57JGTTT!&r   CreatorToolc                 2    t          ddd           | j        S Nxmp_creatorToolxmp_creator_toolr   r   r   r   s    r   r   zXmpInformation.xmp_creatorTool  s    $%68JGTTT$$r   c                 6    t          ddd           || _        d S r   r   r   s     r   r   zXmpInformation.xmp_creatorTool  s$    $%68JGTTT %r   
DocumentIDc                 2    t          ddd           | j        S Nxmpmm_documentIdxmpmm_document_idr   r   r   r   s    r   r   zXmpInformation.xmpmm_documentId  s    $%79LgVVV%%r   c                 6    t          ddd           || _        d S r   r   r   s     r   r   zXmpInformation.xmpmm_documentId  $    $%79LgVVV!&r   
InstanceIDc                 X    t          ddd           t          t          | j                  S Nxmpmm_instanceIdxmpmm_instance_idr   )r   r   rb   r   r   s    r   r   zXmpInformation.xmpmm_instanceId  s)    $%79LgVVVC/000r   c                 6    t          ddd           || _        d S r   )r   r   r   s     r   r   zXmpInformation.xmpmm_instanceId  r   r   c           
         t          | d          si | _        |                     dt                    D ]}|j        }	 |                    d          }|dk    rnF|d|         t          t          ||dz   |dz            d	
                    z   ||dz   d         z   }b|j        |j	        k    r|j
        }n|                     |          }|| j        |<   | 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_propertiesrN   Tu   ↂr1   Nr         )base)hasattrr   r   PDFX_NAMESPACE	localNamefindchrr,   rw   rx   ry   rX   )rL   nodekeyidxr   s        r   custom_propertiesz XmpInformation.custom_properties  s    t122 	5&(D#33BGG 5 5n	((8,,CbyyDSD	c#cAga&7"8rBBBCCDcAgii.) 	 =D$777 NEE NN400E/4',,&&r   )A__name__
__module____qualname____doc__r   r   property
XmlElementr   r   r
   rb   bytesr   r   r   r   rT   r   r   r   rX   rd   DC_NAMESPACEdc_contributorrz   dc_coveragerl   
dc_creatorrG   dc_daters   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_NAMESPACEr   r<   r   setterr   r   r   r   r   r   XMPMM_NAMESPACEr   r   r   r   r   r   r   r   r   rJ   rJ      sq        
(} 
( 
( 
( 
( 
(     X< <27c58H2I<	< < < <
	5 	527c58H2I	5		5 	5 	5 	5HS HS H HQT H H H H	;	;(+	;36	;	#	; 	; 	; 	;	$ 	$ 	$QT 	$ 	$ 	$ 	$@@(+@	#@ @ @ @      Xkk,FFGGN
 (>>,
CCDDK ++lI>>??J
 h{{<IIJJG
 XoolMJJKKN
 h??@@I H^^L,GGHHM (;;|Z@@AAK 8KKkBBCCL (;;|Z@@AAK
 x@@AAI
 h??@@I ++lI>>??J
 xg>>??H h{{<8899G 8NN=*EEFFL Xnn]LIIJJN 8NN=*EEFFL h}lODD O
 $ 1 $ $ $ X$ %H$5 %$ % % % % h}lODD O
 $ 1 $ $ $ X$ %H$5 %$ % % % % !}noFF  &("3 & & & X& 'h&7 'D ' ' ' '  x}m L LMMG% % % % X% &S &T & & & & !!N!NOO &# & & & X& 'c 'd ' ' ' ' !!N!NOO
 1# 1 1 1 X1 'c 'd ' ' ' ' '4S> ' ' ' X' ' 'r   )0r   r<   r8   retypingr   r   r   r   r   r   r	   r
   r   xml.dom.minidomr   r   r   r   xml.parsers.expatr   _utilsr   r   r   errorsr   genericr   r   rV   r   r  r  r  r   compileVERBOSEr4   r   r   rb   rG   rd   rl   rs   rz   rJ   r   r   r   <module>r     s^      				
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 % $ $ $ $ $ 1 1 1 1 1 1 ' ' ' ' ' ' ( ( ( ( ( (         
 !           - - - - - - - -=1..3, 1
"* J! ( GCLLQ 1    3 8#4    6 (49"556   . BK *2C5#:*> (49"556   4 (4S>"::;   2 BK *2C5#:*> (3-/0   .z' z' z' z' z'Y z' z' z' z' z'r   