
    	h                         S SK J r   S SKJr  \" \5      rSSKJr  SSKJr  SSKJ	r	J
r
Jr  SSKJr  S SKJr  S S	KJrJr  \\4r " S
 S\S9rg)    )copy)kwlist   )
Descriptor)MetaSerialisable)SequenceNestedSequenceMultiSequencePart)
namespaced)safe_string)Element	localnamec                       \ rS rSrSrSrSrSrSrSr	\
S 5       rSr\S 5       rSS jrS rS	 rS
 rS rS rS rS rSrg)Serialisable   z
Objects can serialise to XML their attributes and child objects.
The following class attributes are created by the metaclass at runtime:
__attrs__ = attributes
__nested__ = single-valued child treated as an attribute
__elements__ = child elements
Nr   c                     [         eN)NotImplementedError)selfs    S/var/www/html/env/lib/python3.13/site-packages/openpyxl/descriptors/serialisable.pytagnameSerialisable.tagname(   s    !"    c                 l   [        UR                  5      nU R                   H  u  p4XB;   d  M  X$   X#'   X$	 M     [        U5       HW  nUR	                  S5      (       a  X#	 M  U[
        ;   a  X#   USU-   '   X#	 M5  SU;   d  M=  UR                  SS5      nX#   X%'   X#	 MY     UR                  (       a  SU R                  ;   a  UR                  US'   U GHW  n[        U5      nU[
        ;   a  SU-   n[        XS5      nUb  [        U[        5      (       a  MD  [        US5      (       a  UR                  U5      n	OC[        UR                  S5      (       a  UR                  R                  U5      n	OUR                  n	[        U[         5      (       a  XU'   M  [        U["        5      (       a(  UR%                  U/ 5        X'   R'                  U	5        GM  [        U[(        5      (       a<  UR%                  UR*                  / 5        X(R*                     R'                  U	5        GMS  XU'   GMZ     U " S0 UD6$ )z
Create object from XML
{_-	attr_textN	from_tree )dictattrib__namespaced__list
startswithKEYWORDSreplacetext	__attrs__r   getattr
isinstancepropertyhasattrr   expected_typer	   r   
setdefaultappendr
   store)
clsnoder"   keynsneltagdescobjs
             r   r   Serialisable.from_tree.   s    dkk"))GC|$jJ * <C~~c""K$*KsSy!KKKS)"K	K   995"&))F;BB-ChCi3T*D|z$99t[))nnR(4--{;;,,66r:C ''C$//!sD(++!!#r*""3'D"344!!$**b1zz"))#.!s9 < }V}r   c                 *  ^^ Uc  U R                   nUR                  S5      (       a  USS  n[        XT5      n[        U ST5      m[	        U 5      nU R
                   H  u  pVXT;   d  M  XE   XF'   XE	 M     [        X5      nSU R                  ;   a  [        [        U S5      5      Ul	        U R                   GHX  m[        U R                  TS 5      n[        U T5      n	[        US5      (       a"  [        U	S5      (       a  UR                  U	l        [        U	[        5      (       a  [        U[         5      (       a  U	(       d  M  UR#                  TU	T5      /n
OG[        U[$        5      (       a%  U R&                  Ul        UR#                  TU	T5      n
OUU4S jU	 5       n
U
 H  nUR)                  U5        M     GM  TU R*                  ;   a  UR#                  TU	T5      nOU	c  GM0  U	R#                  T5      nUc  GMG  UR)                  U5        GM[     U$ )Nr   r   	namespacer   c              3   F   >#    U  H  oR                  TT5      v   M     g 7fr   )to_tree).0v	child_tagr=   s     r   	<genexpr>'Serialisable.to_tree.<locals>.<genexpr>   s     JcYYy)<<cs   !)r   r%   r   r*   r!   r#   r   r)   r   r(   __elements__	__class__r-   r=   r+   	seq_typesr	   r?   r   idx_baser0   
__nested__)r   r   idxr=   attrsr4   r5   r7   r9   r:   nodesr3   rB   s      `        @r   r?   Serialisable.to_treej   s   ?llG c""abkGTI6D+y9	T
**GC|!J	J +
 W$$..(!'$"<=BG**I4>>9d;D$	*Ct[))gc;.G.G $#y))dN33 !\\)S)DEEh//$(MMDM!\\)S)DEJcJE!DIIdO " /<<	3	BD[;;y1D#IIdO9 +: 	r   c              #   D  #    U R                    H  n[        X5      nUR                  S5      (       a  USS  nOFUS:w  a@  SU;   a:  [        U R                  U5      n[        USS5      (       a  UR	                  SS5      nUS:w  d  Mx  Uc  M}  U[        U5      4v   M     g 7f)Nr   r   r   
hyphenatedFr   )r)   r*   r%   rF   r'   r   )r   attrvaluer9   s       r   __iter__Serialisable.__iter__   s     NNDD'Es##ABx$t~~t44u55<<S1D{"u'8K... #s   BB B B c                     U R                   UR                   :X  d  g[        U 5      [        U5      :X  d  gU R                   H  n[        X5      [        X5      :w  d  M    g   g)NFT)rF   r!   rE   r*   )r   otherr7   s      r   __eq__Serialisable.__eq__   sR    ~~0dtE{*##Bt GE$66 $ r   c                     X:X  + $ r   r    )r   rU   s     r   __ne__Serialisable.__ne__   s      r   c           	         SR                  U R                  U R                  R                  5      n/ nU R                  U R
                  -    HO  n[        X5      n[        U[        5      (       a  S nUR                  SR                  U[        U5      5      5        MQ     SR                  U5      nSR                  X/5      $ )Nz<{0}.{1} object>
Parameters:z{0}={1}z, 
)format
__module__rF   __name__r)   rE   r*   r+   r   r0   reprjoin)r   sargskrA   s        r   __repr__Serialisable.__repr__   s    ,33OONN##
 $"3"33A A!Z((KK
))!T!W56	 4
 zz$zz1)$$r   c                     / nU R                   U R                  -    H?  n[        X5      n[        U[        5      (       a  [        U5      nUR                  U5        MA     [        [        U5      5      $ r   )r)   rE   r*   r+   r$   tupler0   hash)r   fieldsrP   vals       r   __hash__Serialisable.__hash__   s]    NNT%6%66D$%C#t$$CjMM#	 7 E&M""r   c                 l   [        U 5      [        U5      :w  a  [        S5      e0 nU R                   H"  n[        X5      =(       d    [        X5      X#'   M$     U R                   H<  n[        X5      n[        X5      nU(       a  U(       a  XV-   X$'   M/  U=(       d    UX$'   M>     U R
                  " S0 UD6$ )Nz+Cannot combine instances of different typesr    )type	TypeErrorr)   r*   rE   rF   )r   rU   valsrP   r7   abs          r   __add__Serialisable.__add__   s    :e$IJJNND ,D0DDJ ###B!A"AQ56 $ ~~%%%r   c                     U R                  SS9nU R                  R                  U5      nU R                   HA  nX0R                  U R
                  -   ;  d  M!  [        [        X5      5      n[        X#U5        MC     U$ )Ndummy)r   )	r?   rF   r   __dict__r)   rE   r   r*   setattr)r   xmlcprd   rA   s        r   __copy__Serialisable.__copy__   si    ll7l+^^%%c*A):):::)*q!  	r   r    )NNN)r_   r^   __qualname____firstlineno____doc__r)   rI   rE   r#   rH   r,   r   r=   classmethodr   r?   rR   rV   rY   re   rl   rt   r|   __static_attributes__r    r   r   r   r      sw     IJLNH# # I8 8v3l
/!% #& 	r   r   )	metaclassN)r   keywordr   	frozensetr&    r   r   sequencer   r	   r
   r=   r   openpyxl.compatr   openpyxl.xml.functionsr   r   r$   rh   rG   r   r    r   r   <module>r      sN     V   
 " '
 5M	X- Xr   