
    hi*                        d Z ddlmZ ddlZddlZddl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mZ erddlmZ  G d	 d
e          ZdS )z@Custom element classes for core properties-related XML elements.    )annotationsN)TYPE_CHECKINGAnyCallablecast)nsdeclsqn)	parse_xml)BaseOxmlElement	ZeroOrOne)_Elementc                     e Zd ZU dZded<    edd          Z edd          Z edd          Z ed	d          Z	 ed
d          Z
 edd          Z edd          Z edd          Z edd          Z edd          Z edd          Z edd          Zded<    edd          Z edd          Z edd          Zd eddd          z  ZedQd            ZedRd            Zej        dSd             ZedRd!            Zej        dSd"            ZedRd#            Zej        dSd$            ZedRd%            Zej        dSd&            ZedTd(            Zej        dUd*            ZedRd+            Z e j        dSd,            Z edRd-            Z!e!j        dSd.            Z!edRd/            Z"e"j        dSd0            Z"edRd1            Z#e#j        dSd2            Z#edTd3            Z$e$j        dUd4            Z$edTd5            Z%e%j        dUd6            Z%edVd8            Z&e&j        dWd9            Z&edRd:            Z'e'j        dSd;            Z'edRd<            Z(e(j        dSd=            Z(edRd>            Z)e)j        dSd?            Z)dXdAZ*dYdDZ+edZdG            Z, e-j.        dH          Z/ed[dJ            Z0d\dLZ1d]dNZ2d^dOZ3dPS )_CT_CorePropertiesaX  `<cp:coreProperties>` element, the root element of the Core Properties part.

    Stored as `/docProps/core.xml`. Implements many of the Dublin Core document metadata
    elements. String elements resolve to an empty string ("") if the element is not
    present in the XML. String elements are limited in length to 255 unicode characters.
    zCallable[[], etree_Element]get_or_add_revisionzcp:category )
successorszcp:contentStatuszdcterms:createdz
dc:creatorzdc:descriptionzdc:identifierzcp:keywordszdc:languagezcp:lastModifiedByzcp:lastPrintedzdcterms:modifiedzcp:revisionzetree_Element | Nonerevisionz
dc:subjectzdc:titlez
cp:versionz<cp:coreProperties %s/>
cpdcdctermsreturnc                X    | j         }t          t          t          |                    }|S )z+Return a new `<cp:coreProperties>` element.)_coreProperties_tmplr   r   r
   )clsxmlcorePropertiess      k/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/docx/oxml/coreprops.pynewzCT_CoreProperties.new/   s(     &/3@@    strc                ,    |                      d          S )z+The text in the `dc:creator` child element.creator_text_of_elementselfs    r   author_textzCT_CoreProperties.author_text6   s     $$Y///r   valuec                2    |                      d|           d S )Nr"   _set_element_textr&   r(   s     r   r'   zCT_CoreProperties.author_text;       y%00000r   c                ,    |                      d          S Ncategoryr#   r%   s    r   category_textzCT_CoreProperties.category_text?       $$Z000r   c                2    |                      d|           d S r/   r*   r,   s     r   r1   zCT_CoreProperties.category_textC       z511111r   c                ,    |                      d          S Ndescriptionr#   r%   s    r   comments_textzCT_CoreProperties.comments_textG   s    $$]333r   c                2    |                      d|           d S r6   r*   r,   s     r   r8   zCT_CoreProperties.comments_textK   s    }e44444r   c                ,    |                      d          S NcontentStatusr#   r%   s    r   contentStatus_textz$CT_CoreProperties.contentStatus_textO   s    $$_555r   c                2    |                      d|           d S r;   r*   r,   s     r   r=   z$CT_CoreProperties.contentStatus_textS   s    66666r   dt.datetime | Nonec                ,    |                      d          S Ncreated_datetime_of_elementr%   s    r   created_datetimez"CT_CoreProperties.created_datetimeW   s    ((333r   dt.datetimec                2    |                      d|           d S rA   _set_element_datetimer,   s     r   rE   z"CT_CoreProperties.created_datetime[   s    ""9e44444r   c                ,    |                      d          S N
identifierr#   r%   s    r   identifier_textz!CT_CoreProperties.identifier_text_   s    $$\222r   c                2    |                      d|           d S rK   r*   r,   s     r   rM   z!CT_CoreProperties.identifier_textc   s    |U33333r   c                ,    |                      d          S Nkeywordsr#   r%   s    r   keywords_textzCT_CoreProperties.keywords_textg   r2   r   c                2    |                      d|           d S rP   r*   r,   s     r   rR   zCT_CoreProperties.keywords_textk   r4   r   c                ,    |                      d          S Nlanguager#   r%   s    r   language_textzCT_CoreProperties.language_texto   r2   r   c                2    |                      d|           d S rU   r*   r,   s     r   rW   zCT_CoreProperties.language_texts   r4   r   c                ,    |                      d          S NlastModifiedByr#   r%   s    r   lastModifiedBy_textz%CT_CoreProperties.lastModifiedBy_textw   s    $$%5666r   c                2    |                      d|           d S rZ   r*   r,   s     r   r\   z%CT_CoreProperties.lastModifiedBy_text{   s    /77777r   c                ,    |                      d          S NlastPrintedrC   r%   s    r   lastPrinted_datetimez&CT_CoreProperties.lastPrinted_datetime   s    ((777r   c                2    |                      d|           d S r_   rH   r,   s     r   ra   z&CT_CoreProperties.lastPrinted_datetime   s    ""=%88888r   c                ,    |                      d          S NmodifiedrC   r%   s    r   modified_datetimez#CT_CoreProperties.modified_datetime   s    ((444r   c                2    |                      d|           d S rd   rH   r,   s     r   rf   z#CT_CoreProperties.modified_datetime   s    "":u55555r   intc                    | j         }|dS t          |j                  }	 t          |          }n# t          $ r d}Y nw xY w|dk     rd}|S )z#Integer value of revision property.Nr   )r   r    textrh   
ValueError)r&   r   revision_strs      r   revision_numberz!CT_CoreProperties.revision_number   sr     =18=))	<((HH 	 	 	HHH	 a<<Hs   1 A A c                    t          |t                    r|dk     rd}t          ||z            |                                 }t	          |          |_        dS )z9Set revision property to string value of integer `value`.   z1revision property requires positive int, got '%s'N)
isinstancerh   rk   r   r    rj   )r&   r(   tmplr   s       r   rm   z!CT_CoreProperties.revision_number   sW     %%% 	+FDTE\***++--E

r   c                ,    |                      d          S Nsubjectr#   r%   s    r   subject_textzCT_CoreProperties.subject_text       $$Y///r   c                2    |                      d|           d S rs   r*   r,   s     r   ru   zCT_CoreProperties.subject_text   r-   r   c                ,    |                      d          S Ntitler#   r%   s    r   
title_textzCT_CoreProperties.title_text   s    $$W---r   c                2    |                      d|           d S ry   r*   r,   s     r   r{   zCT_CoreProperties.title_text   s    w.....r   c                ,    |                      d          S Nversionr#   r%   s    r   version_textzCT_CoreProperties.version_text   rv   r   c                2    |                      d|           d S r~   r*   r,   s     r   r   zCT_CoreProperties.version_text   r-   r   property_namec                    t          | |          }|d S |j        }	 |                     |          S # t          $ r Y d S w xY w)N)getattrrj   _parse_W3CDTF_to_datetimerk   )r&   r   elementdatetime_strs       r   rD   z&CT_CoreProperties._datetime_of_element   s]    $..?4|	11,??? 	 	 	44	s   2 
A A 	prop_namer   c                D    d|z  }t          | |          } |            }|S )z@Return element returned by "get_or_add_" method for `prop_name`.zget_or_add_%s)r   )r&   r   get_or_add_method_nameget_or_add_methodr   s        r   _get_or_addzCT_CoreProperties._get_or_add   s1    !09!<#D*@AA##%%r   dt_
offset_strc                    | j                             |          }|t          d|z            |                                \  }}}|dk    rdnd}t	          |          |z  }t	          |          |z  }	t          j        ||	          }
||
z   S )z~A |datetime| instance offset from `dt_` by timezone offset in `offset_str`.

        `offset_str` is like `"-07:00"`.
        Nz!'%s' is not a valid offset string+ro   )hoursminutes)_offset_patternmatchrk   groupsrh   dt	timedelta)r   r   r   r   sign	hours_strminutes_strsign_factorr   r   tds              r   
_offset_dtzCT_CoreProperties._offset_dt   s     #))*55=@:MNNN',||~~$i CKKbbQI,k""[0\w777Rxr   z([+-])(\d\d):(\d\d)
w3cdtf_strc                f   d}|d d         }|dd          }d }|D ]3}	 t           j                            ||          }$# t          $ r Y 0w xY w|d}t          ||z            t	          |          dk    r|                     ||          }|                    t           j        j                  S )N)z%Y-%m-%dT%H:%M:%Sz%Y-%m-%dz%Y-%mz%Y   z+could not parse W3CDTF datetime string '%s'   )tzinfo)	r   datetimestrptimerk   lenr   replacetimezoneutc)r   r   	templatesparseable_partr   r   rq   s          r   r   z+CT_CoreProperties._parse_W3CDTF_to_datetime   s    
	 $CRC_
 	 	Dk**>4@@   ;@DTJ.///z??a..j11C{{"+/{222s    ?
AANonec                   t          |t          j                  s!d}t          |t	          |          z            |                     |          }|                    d          }||_        |dv r]|                     t          d          d           |                    t          d          d           | j
        t          d          = dS dS )	zCSet date/time value of child element having `prop_name` to `value`.z;property requires <type 'datetime.datetime'> object, got %sz%Y-%m-%dT%H:%M:%SZ)rB   re   zxsi:foobarzxsi:typezdcterms:W3CDTFN)rp   r   r   rk   typer   strftimerj   setr	   attrib)r&   r   r(   rq   r   dt_strs         r   rI   z'CT_CoreProperties._set_element_datetime  s    %-- 	1PDTDKK/000""9-- 455///
 HHR	]]E***KK:(8999ByMM*** 0/r   r   c                    t          |t                    st          |          }t          |          dk    rd}t          ||z            |                     |          }||_        dS )z/Set string value of `name` property to `value`.   z0exceeded 255 char limit for property, got:

'%s'N)rp   r    r   rk   r   rj   )r&   r   r(   rq   r   s        r   r+   z#CT_CoreProperties._set_element_text  se    %%% 	JJEu::GDTE\***""9--r   c                J    t          | |          }|dS |j        dS |j        S )zThe text in the element matching `property_name`.

        The empty string if the element is not present or contains no text.
        N )r   rj   )r&   r   r   s      r   r$   z"CT_CoreProperties._text_of_element   s2    
 $..?2<2|r   N)r   r   )r   r    )r(   r    )r   r?   )r(   rF   )r   rh   )r(   rh   )r   r    r   r?   )r   r    r   r   )r   rF   r   r    r   rF   )r   r    r   rF   )r   r    r(   rF   r   r   )r   r    r(   r   r   r   )r   r    r   r    )4__name__
__module____qualname____doc____annotations__r   r0   r<   rB   r"   r7   rL   rQ   rV   r[   r`   re   r   rt   rz   r   r   r   classmethodr   propertyr'   setterr1   r8   r=   rE   rM   rR   rW   r\   ra   rf   rm   ru   r{   r   rD   r   r   recompiler   r   rI   r+   r$   r   r   r   r   r      sf          5444y2666HI0R@@@Mi)b999Gi444G),<<<K?r:::Jy2666Hy2666HY2rBBBN),<<<Ky+;;;H%.Y"& & &H     i444GIjR000Ei444G6tY9W9WW   [ 0 0 0 X0 1 1 1 1 1 1 1 X1 2 2 2 2 4 4 4 X4 5 5 5 5 6 6 6 X6 7 7 7 7 4 4 4 X4 5 5 5 5 3 3 3 X3 4 4 4 4 1 1 1 X1 2 2 2 2 1 1 1 X1 2 2 2 2 7 7 7 X7 8 8 8  8 8 8 8 X8  9 9 9 ! 9 5 5 5 X5 6 6 6 6    X  # # # # 0 0 0 X0 1 1 1 1 . . . X. / / / / 0 0 0 X0 1 1 1 1	 	 	 	       [ !bj!788O3 3 3 [3<+ + + +"	 	 	 	
 
 
 
 
 
r   r   )r   
__future__r   r   r   r   typingr   r   r   r   docx.oxml.nsr   r	   docx.oxml.parserr
   docx.oxml.xmlchemyr   r   
lxml.etreer   etree_Elementr   r   r   r   <module>r      s    F F " " " " " "     				 5 5 5 5 5 5 5 5 5 5 5 5 $ $ $ $ $ $ $ $ & & & & & & 9 9 9 9 9 9 9 9 5444444Y Y Y Y Y Y Y Y Y Yr   