
    Wwg2                        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jd                   G d@ dAejf                               Z4e G dB dC             Z5y)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y)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_unmanagedc           	      l   t        | j                  xs |j                  | j                  xs |j                  | j                  xs |j                  t	        | j
                  xs |j
                        | j                  xs |j                  | j                  xs |j                  | j                        S )N)r/   r0   r1   r4   r5   r6   r8   )	r   r/   r0   r1   listr4   r5   r6   r8   )selfbases     W/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/pdf_utils/metadata/model.py	view_overzDocumentMetadata.view_over   s}    ***

;;-$++LL0DLL$--84==9LL0DLLLL0DLL,,
 	
    )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  5Hd3i5 GZ +/GU3$&'.
 16M5h,-5
 ',D&AItN#A  M4	
rA   r   T)frozenc                   6    e Zd ZU dZeed<   	 eed<   	 d Zd Zy)r   z
    An expanded XML name.
    ns
local_namec                     | j                   }|j                  d      s|j                  d      rdnd}| | | j                   S )N/# )rL   endswithrM   )r=   rL   seps      r?   __str__zExpandedName.__str__   s@    WWKK$C(8bccU4??+,,rA   c                     t        |       S N)rG   r=   s    r?   __repr__zExpandedName.__repr__   s    4yrA   N)rB   rC   rD   rE   rG   rF   rT   rX   rI   rA   r?   r   r      s)     	G O-
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                       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y)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                  | _        y # t        $ r
 d | _        Y y w xY wrV   )rx   r   
isinstancerk   rG   	TypeErrorry   KeyError)r=   rz   rd   s      r?   __init__zQualifiers.__init__0  sR    	?Dhdjj#.DJ 	DJ	s   AA AAlstreturnc                 L    t        |D ci c]  \  }}||
 c}}      S c c}}w )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.
        )r   clsr   kvs       r?   ofzQualifiers.of;  s%     C0DAq1a40110s    
rd   c                 .    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_qualG  s     2EKrA   c                      | j                   |   S rV   )rx   r=   items     r?   __getitem__zQualifiers.__getitem__W  s    {{4  rA   	with_langc              #      K   | j                   j                         E d{    |r+| j                  t        t	        | j                        f yyy7 2w)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_qualsZ  sJ      ;;$$&&&/HTZZ000 09 	's   AA3Ac                     | j                   S )z:
        Retrieve the language qualifier, if any.
        )ry   rW   s    r?   rd   zQualifiers.langh  s    
 zz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_qualso  s    
 DKK  rA   c                 H    t        | j                  xs | j                        S rV   )rH   rx   ry   rW   s    r?   __bool__zQualifiers.__bool__v  s    DKK-4::..rA   c                 n    t        | j                        }| j                  r| j                  |d<   d|dS )Nrd   zQualifiers())dictrx   ry   )r=   qs     r?   rX   zQualifiers.__repr__y  s3    ::

AfIQE##rA   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rV   )r|   r   ry   rx   r=   others     r?   __eq__zQualifiers.__eq__  s;    uj) ,

ekk),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  ,  ! !%11	%j01	21 hsm   !D ! !/$
rA   r   c                   "    e Zd ZU dZeed<   d Zy)XmpUriz
    An XMP URI value.
    rk   c                     | j                   S rV   )rk   rW   s    r?   rT   zXmpUri.__str__  s    zzrA   N)rB   rC   rD   rE   rG   rF   rT   rI   rA   r?   r   r     s     J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<   y)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     s<     VS899 #:==AJ
ArA   r   c                   x    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y)r   z
    A generic XMP structure value. Implements ``__getitem__`` for field access.

    :param fields:
        The structure's fields.
    fieldsr   c                     || _         y rV   _fields)r=   r   s     r?   r   zXmpStructure.__init__  s	    5;rA   r   r   c                 F     | |D ci c]  \  }}||
 c}}      S c c}}w )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`.
        rI   r   s       r?   r   zXmpStructure.of  s%     S)TQAqD)**)s   
c                      | j                   |   S rV   r   r   s     r?   r   zXmpStructure.__getitem__  s    ||D!!rA   c              #   T   K   | j                   j                         E d {    y 7 wrV   )r   r   rW   s    r?   __iter__zXmpStructure.__iter__  s     <<%%'''s   (&(c                 "    d| j                   dS )NzXmpStructure(r   r   rW   s    r?   rX   zXmpStructure.__repr__  s    t||.a00rA   c                 X    t        |t              xr | 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     st    <tL*$<= < 	+eL*45 	+. 	+ 	+"((5z)A#BC (1QrA   r   c                   .    e Zd ZdZdZ	 dZ	 dZ	 defdZy)r   z
    XMP array types.
    rg   rh   ri   r   c                 P    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ErA   N)	rB   rC   rD   rE   ORDERED	UNORDEREDALTERNATIVEr   r   rI   rA   r?   r   r     s9     G I K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y
)r   z
    An XMP array.
    
array_typeentriesr   r   c                 B     | 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   r   s     r?   orderedzXmpArray.ordered  s     <''c33rA   c                 B     | 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     <))4955rA   c                 B     | 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     <++T#Y77rA   c                 B    t        t              r j                  j                  k7  ry j                  t        j                  k(  r>t         fdj                  D              xr t        fd j                  D              S  j                  j                  k(  S )NFc              3   :   K   | ]  }|j                   v   y wrV   r   ).0er=   s     r?   	<genexpr>z"XmpArray.__eq__.<locals>.<genexpr>"  s     @QqDLL(@   c              3   :   K   | ]  }|j                   v   y wrV   r   )r   r   r   s     r?   r   z"XmpArray.__eq__.<locals>.<genexpr>"  s!      I'(U]]"Ir   )r|   r   r   r   r   allr   r   s   ``r?   r   zXmpArray.__eq__  s    5(+%"2"22??l444@%--@@ S I,0LLI 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 	6HX. 	6: 	6 	6 	8hx0 	8Z 	8 	8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      s3    (  I I I  5 D 
k	! %sD01

 L
 L
 L
^ $  2 28)
,)/17=;	
 2e98 "U)
6 "U)
6 "U)
6 "U)
6 
Et	4 BuI':	 r%yZ@ BuI':	 E{C "U)F BsG	:	 "S'g
6
 2d88 RX)<
 DmD r%yZ@ r%yZ@ "U)F E|D biLA
`
 `
F $      $Q $QN F499 F F6 >1 >1 >1rA   