
     h2                     j   d Z ddlZddlmZmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ g dZd	ez   Z	 eeedf         Z	 e G d
 d                      Z ed           G d d                      ZddddddddddddZ	  eed         d          Z	  eed         d           Z	  eed         d!          Z	  eed         d"          Z	  eed         d#          Z	  eed         d$          Z	  eed         d%          Z	  eed         d&          Z 	  eed         d'          Z!	  eed         d(          Z"	  eed         d)          Z#	  eed*         d+          Z$	  eed*         d,          Z%	  eed-         d.          Z&	  eed-         d/          Z'	  eed-         d0          Z(	  eed1         d2          Z)	  eed1         d3          Z*	  eed4         d5          Z+	  eed4         d6          Z,	  eed4         d7          Z-	  G d8 d9          Z. ed           G d: d;                      Z/e G d< d=                      Z0 G d> d?          Z1ej2         G d@ dAej3                              Z4e G dB dC                      Z5dS )Dz
.. versionadded:: 0.14.0

This module contains the XMP data model classes and namespace registry,
in addition to a simplified document metadata model used for automated
metadata management.
    N)	dataclassfield)datetime)DictIterableIteratorListOptionalTupleUnion)__version__)StringWithLanguage)DocumentMetadataVENDOR
MetaStringExpandedName
QualifiersXmpValueXmpStructureXmpArrayTypeXmpArrayNSXML_LANGRDF_RDFRDF_SEQRDF_BAGRDF_ALTRDF_LI	RDF_VALUERDF_RESOURCERDF_PARSE_TYPE	RDF_ABOUTRDF_DESCRIPTIONDC_TITLE
DC_CREATORDC_DESCRIPTIONPDF_PRODUCERPDF_KEYWORDS	X_XMPMETAX_XMPTKXMP_CREATORTOOLXMP_CREATEDATEXMP_MODDATEzpyHanko c                      e Zd ZU dZdZeed<   	 dZeed<   	 dZeed<   	  e	e
          Zee         ed<   	 dZeed<   	 dZeeedf         ed	<   	 d
Zeeedf         ed<   	  e	e
          Zed         ed<   	 dZeed<   	 ddZdS )r   zO
    Simple representation of document metadata. All entries are optional.
    Ntitleauthorsubjectdefault_factorykeywordscreatorcreatednowlast_modifiedr   	xmp_extraFxmp_unmanagedbasec           	          t          | j        p|j        | j        p|j        | j        p|j        t	          | j        p|j                  | j        p|j        | j        p|j        | j                  S )N)r/   r0   r1   r4   r5   r6   r8   )	r   r/   r0   r1   listr4   r5   r6   r8   )selfr;   s     \/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pyhanko/pdf_utils/metadata/model.py	view_overzDocumentMetadata.view_over   so    **
;-$+L0DL$-84=99L0DLL0DL,
 
 
 	
    )r;   r   )__name__
__module____qualname____doc__r/   r   __annotations__r0   r1   r   r=   r4   r	   strr5   r6   r   r   r8   r9   r:   boolr@    rA   r?   r   r   =   s>          E: FJ GZ  %555Hd3i555 GZ +/GU3$&'...
 16M5h,-555
 ',eD&A&A&AItN#AAA  M4	
 	
 	
 	
 	
 	
rA   r   T)frozenc                   8    e Zd ZU dZeed<   	 eed<   	 d Zd ZdS )r   z
    An expanded XML name.
    ns
local_namec                     | j         }|                    d          s|                    d          rdnd}| | | j         S )N/# )rL   endswithrM   )r>   rL   seps      r?   __str__zExpandedName.__str__   sL    WKK$$AC(8(8Abbc,c,4?,,,rA   c                      t          |           S N)rG   r>   s    r?   __repr__zExpandedName.__repr__   s    4yyrA   N)rB   rC   rD   rE   rG   rF   rT   rX   rI   rA   r?   r   r      s^           	GGG OOO- - -
    rA   r   z$http://www.w3.org/XML/1998/namespacez+http://www.w3.org/1999/02/22-rdf-syntax-ns#zhttp://ns.adobe.com/xap/1.0/z http://purl.org/dc/elements/1.1/zhttp://ns.adobe.com/pdf/1.3/zhttp://www.aiim.org/pdfa/ns/id/z http://www.aiim.org/pdfua/ns/id/z#http://www.aiim.org/pdfa/ns/schema#z&http://www.aiim.org/pdfa/ns/extension/z%http://www.aiim.org/pdfa/ns/property#zadobe:ns:meta/)xmlrdfxmpdcpdfpdfaidpdfuaid
pdfaSchemapdfaExtensionpdfaPropertyxrY   langrL   rM   rZ   RDFSeqBagAltlivalueresourceabout	parseTypeDescriptionrc   xmpmetaxmptkr\   r/   r5   descriptionr]   r4   Producerr[   CreatorTool
CreateDate
ModifyDatec                   H   e Zd ZU dZeedf         ed<   ee         ed<   deedf         fdZ	e
deedf         dd fd	            Ze
d
ee         dd fd            Zd Z	 ddedeeedf                  fdZedee         fd            Zedefd            Zd Zd Zd ZdS )r   z
    XMP value qualifiers wrapper. Implements ``__getitem__``.
    Note that ``xml:lang`` gets special treatment.

    :param quals:
        The qualifiers to model.
    r   _quals_langqualsc                     || _         	 |t                   }|t          = t          |j        t                    st
          |j        | _        d S # t          $ r d | _        Y d S w xY wrV   )rx   r   
isinstancerk   rG   	TypeErrorry   KeyError)r>   rz   rd   s      r?   __init__zQualifiers.__init__/  sl    	?Dhdj#..  DJJJ 	 	 	DJJJJ	s   AA A"!A"lstreturnc                 4    t          d |D                       S )z
        Construct a :class:`.Qualifiers` object from a list of name-value pairs.

        :param lst:
            A list of name-value pairs.
        :return:
            A :class:`.Qualifiers` object.
        c                     i | ]\  }}||	S rI   rI   .0kvs      r?   
<dictcomp>z!Qualifiers.of.<locals>.<dictcomp>D  s    000DAq1a000rA   )r   clsr   s     r?   ofzQualifiers.of:  s!     00C000111rA   rd   c                 6    t          i           }|r||_        |S )z
        Construct a :class:`.Qualifiers` object that only wraps a language
        qualifier.

        :param lang:
            A language code.
        :return:
            A :class:`.Qualifiers` object.
        )r   ry   )r   rd   rz   s      r?   lang_as_qualzQualifiers.lang_as_qualF  s#     2 	EKrA   c                     | j         |         S rV   )rx   r>   items     r?   __getitem__zQualifiers.__getitem__V  s    {4  rA   T	with_langc              #      K   | j                                         E d{V  |r&| j        !t          t	          | j                  fV  dS dS dS )z
        Iterate over all qualifiers.

        :param with_lang:
            Include the language qualifier.
        :return:
        N)rx   itemsry   r   r   )r>   r   s     r?   
iter_qualszQualifiers.iter_qualsY  sn       ;$$&&&&&&&&& 	1/HTZ00000000	1 	1//rA   c                     | j         S )z:
        Retrieve the language qualifier, if any.
        )ry   rW   s    r?   rd   zQualifiers.langg  s    
 zrA   c                 *    t          | j                  S )zA
        Check if there are any non-language qualifiers.
        )rH   rx   rW   s    r?   has_non_lang_qualszQualifiers.has_non_lang_qualsn  s    
 DK   rA   c                 8    t          | j        p| j                  S rV   )rH   rx   ry   rW   s    r?   __bool__zQualifiers.__bool__u  s    DK-4:...rA   c                 X    t          | j                  }| j        r
| j        |d<   d|dS )Nrd   zQualifiers())dictrx   ry   )r>   qs     r?   rX   zQualifiers.__repr__x  s7    : 	#
AfI#Q####rA   c                 l    t          |t                    o| j        |j        k    o| j        |j        k    S rV   )r|   r   ry   rx   r>   others     r?   __eq__zQualifiers.__eq__~  s6    uj)) ,
ek),u|+	
rA   N)T)rB   rC   rD   rE   r   r   rF   r
   rG   r   classmethodr   r   r   r   rH   r   r   propertyrd   r   r   rX   r   rI   rA   r?   r   r   #  s          z)****C=	d<#;< 	 	 	 	 	2eL*45 	2, 	2 	2 	2 [	2  ,    [! ! ! !%1 11	%j01	21 1 1 1 hsm    X !D ! ! ! X!/ / /$ $ $
 
 
 
 
rA   r   c                   $    e Zd ZU dZeed<   d ZdS )XmpUriz
    An XMP URI value.
    rk   c                     | j         S rV   )rk   rW   s    r?   rT   zXmpUri.__str__  s
    zrA   N)rB   rC   rD   rE   rG   rF   rT   rI   rA   r?   r   r     s:           JJJ    rA   r   c                   `    e Zd ZU dZeddeef         ed<   	  ee	j
                  Ze	ed<   dS )r   z;
    A general XMP value, potentially with qualifiers.
    r   r   rk   r2   
qualifiersN)rB   rC   rD   rE   r   r   rG   rF   r   r   r   r   rI   rA   r?   r   r     sb           VS89999 #U:=AAAJ
AAA rA   r   c                       e Zd ZdZdeedf         fdZedeedf         dd fd            Z	d Z
deeedf                  fd	Zd
 Zd ZdS )r   z
    A generic XMP structure value. Implements ``__getitem__`` for field access.

    :param fields:
        The structure's fields.
    fieldsr   c                     || _         d S rV   _fields)r>   r   s     r?   r   zXmpStructure.__init__  s    5;rA   r   r   c                 ,     | d |D                       S )z
        Construct an :class:`.XmpStructure` from a list of name-value pairs.

        :param lst:
            A list of name-value pairs.
        :return:
            An an :class:`.XmpStructure`.
        c                     i | ]\  }}||	S rI   rI   r   s      r?   r   z#XmpStructure.of.<locals>.<dictcomp>  s    )))TQAq)))rA   rI   r   s     r?   r   zXmpStructure.of  s#     s))S)))***rA   c                     | j         |         S rV   r   r   s     r?   r   zXmpStructure.__getitem__  s    |D!!rA   c              #   H   K   | j                                         E d {V  d S rV   )r   r   rW   s    r?   __iter__zXmpStructure.__iter__  s2      <%%'''''''''''rA   c                     d| j         dS )NzXmpStructure(r   r   rW   s    r?   rX   zXmpStructure.__repr__  s    0t|0000rA   c                 L    t          |t                    o| j        |j        k    S rV   )r|   r   r   r   s     r?   r   zXmpStructure.__eq__  s     %..P4<5=3PPrA   N)rB   rC   rD   rE   r   r   r   r   r   r   r   r   r   rX   r   rI   rA   r?   r   r     s         <tL*$<= < < < < 	+eL*45 	+. 	+ 	+ 	+ [	+" " "((5z)A#BC ( ( ( (1 1 1Q Q Q Q QrA   r   c                   0    e Zd ZdZdZ	 dZ	 dZ	 defdZdS )r   z
    XMP array types.
    rg   rh   ri   r   c                 ^    t          t          d         t          | j                            S )z1
        Render the type as an XML name.
        rZ   re   )r   r   rG   rk   rW   s    r?   as_rdfzXmpArrayType.as_rdf  s#     r%yS__EEEErA   N)	rB   rC   rD   rE   ORDERED	UNORDEREDALTERNATIVEr   r   rI   rA   r?   r   r     sd          G I KF F F F F F FrA   r   c                       e Zd ZU dZeed<   	 ee         ed<   	 ede	e         dd fd            Z
ede	e         dd fd            Zede	e         dd fd            Zd	 Zd
S )r   z
    An XMP array.
    
array_typeentriesr   r   c                 H     | t           j        t          |                    S )z
        Convert a list to an ordered XMP array.

        :param lst:
            An iterable of XMP values.
        :return:
            An ordered :class:`.XmpArray`.
        )r   r   r=   r   s     r?   orderedzXmpArray.ordered  s     s<'c333rA   c                 H     | t           j        t          |                    S )z
        Convert a list to an unordered XMP array.

        :param lst:
            An iterable of XMP values.
        :return:
            An unordered :class:`.XmpArray`.
        )r   r   r=   r   s     r?   	unorderedzXmpArray.unordered  s     s<)499555rA   c                 H     | t           j        t          |                    S )z
        Convert a list to an alternative XMP array.

        :param lst:
            An iterable of XMP values.
        :return:
            An alternative :class:`.XmpArray`.
        )r   r   r=   r   s     r?   alternativezXmpArray.alternative  s     s<+T#YY777rA   c                     t          t                    r j        j        k    rdS  j        t          j        k    r@t           fdj        D                       ot          fd j        D                       S  j        j        k    S )NFc              3   *   K   | ]}|j         v V  d S rV   r   )r   er>   s     r?   	<genexpr>z"XmpArray.__eq__.<locals>.<genexpr>!  s*      @@QqDL(@@@@@@rA   c              3   *   K   | ]}|j         v V  d S rV   r   )r   r   r   s     r?   r   z"XmpArray.__eq__.<locals>.<genexpr>!  sC       I I'(U]"I I I I I IrA   )r|   r   r   r   r   allr   r   s   ``r?   r   zXmpArray.__eq__  s    5(++	%"2225?l444@@@@%-@@@@@ S I I I I,0LI I I F F  <5=00rA   N)rB   rC   rD   rE   r   rF   r	   r   r   r   r   r   r   r   rI   rA   r?   r   r     s            (^ 	4(8, 	4 	4 	4 	4 [	4 	6HX. 	6: 	6 	6 	6 [	6 	8hx0 	8Z 	8 	8 	8 [	81 1 1 1 1rA   r   )6rE   enumdataclassesr   r   r   typingr   r   r   r	   r
   r   r   pyhankor   pyhanko.pdf_utils.miscr   __all__r   rG   r   r   r   r   r   r   r   r   r   r   r   r    r"   r!   r#   r)   r*   r$   r%   r&   r(   r'   r+   r,   r-   r   r   r   r   uniqueEnumr   r   rI   rA   r?   <module>r      sp     ( ( ( ( ( ( ( (       I I I I I I I I I I I I I I I I I I       5 5 5 5 5 5     D 
k	! %sD01

 L
 L
 L
 L
 L
 L
 L
 L
^ $       2 28)
,)/17=;	 
 <2e9888 ,"U)
6
6
6 ,"U)
6
6
6 ,"U)
6
6
6 ,"U)
6
6
6 
Et	4	4	4 LBuI':::	 |r%yZ@@@ LBuI':::	 E{CCC ,"U)FFF LBsG	:::	 ,"S'g
6
6
6
 <2d8888 \RX)<<<
 DmDDD |r%yZ@@@ |r%yZ@@@ ,"U)FFF E|DDD lbiLAAA
`
 `
 `
 `
 `
 `
 `
 `
F $                $Q $Q $Q $Q $Q $Q $Q $QN F F F F F49 F F F6 >1 >1 >1 >1 >1 >1 >1 >1 >1 >1rA   