
    Mwg                         d dl m Z  d dlmZ  ee      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 d d	lmZmZ eefZ G d
 de      Zy)    )copy)kwlist   )
Descriptor)MetaSerialisable)SequenceNestedSequenceMultiSequencePart)
namespaced)safe_string)Element	localnamec                   z    e Zd ZdZdZdZdZdZdZe	d        Z
dZed        ZddZd Zd Zd	 Zd
 Zd Zd Zd Zy)Serialisablea  
    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                     t         N)NotImplementedError)selfs    X/var/www/horilla/myenv/lib/python3.12/site-packages/openpyxl/descriptors/serialisable.pytagnamezSerialisable.tagname(   s    !"    c                    t        |j                        }| j                  D ]  \  }}||v s||   ||<   ||=  t        |      D ]P  }|j	                  d      r||= |t
        v r||   |d|z   <   ||= /d|v s4|j                  dd      }||   ||<   ||= R |j                  rd| j                  v r|j                  |d<   |D ]5  }t        |      }|t
        v rd|z   }t        | |d      }|t        |t              r<t        |d      r|j                  |      }	n>t        |j                  d      r|j                  j                  |      }	n|j                  }	t        |t               r|	||<   t        |t"              r'|j%                  |g        ||   j'                  |	       t        |t(              r<|j%                  |j*                  g        ||j*                     j'                  |	       1|	||<   8  | di |S )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   zSerialisable.from_tree.   s    dkk")) 	GCV|$Rjs2J	 < 		 C~~c"3K$*3KsSy!3KKKS)"3Kq	3K		  995"&))F; 	"BB-ChCi3T*D|z$9t[)nnR(4--{;,,66r:C ''C$/!sD(+!!#r*s""3'D"34!!$**b1tzz"))#.!s9	"< }V}r   c                    || j                   }|j                  d      r|dd  }t        | |      }t        | d      t	        |       }| j
                  D ]  \  }}||v s||   ||<   ||=  t        ||      }d| j                  v rt        t        | d            |_	        | j                  D ]-  t        | j                  d       }t        |       }	t        |d      rt        |	d      r|j                  |	_        t        |	t              rt        |t               r|	ss|j#                  |	      g}
nAt        |t$              r%| j&                  |_        |j#                  |	      }
nfd|	D        }
|
D ]  }|j)                  |        | j*                  v r|j#                  |	      }n|	|	j#                        }||j)                  |       0 |S )Nr   r   	namespacer   c              3   B   K   | ]  }|j                          y wr   )to_tree).0v	child_tagr:   s     r   	<genexpr>z'Serialisable.to_tree.<locals>.<genexpr>   s     JQYYy)<Js   )r   r#   r   r(   r   r!   r   r'   r   r&   __elements__	__class__r+   r:   r)   	seq_typesr	   r<   r   idx_baser.   
__nested__)r   r   idxr:   attrsr2   r3   r5   r7   r8   nodesr1   r?   s      `        @r   r<   zSerialisable.to_treej   s   ?llG c"abkGT7I6D+y9	T
** 	GCe|!#Jb	#J	
 We$$..(!'$"<=BG** 	$I4>>9d;D$	*Ct[)gc;.G $#y)dN3 !\\)S)DEEh/$(MMDM!\\)S)DEJcJE! $DIIdO$ /<<	3	BD[;;y1D#IIdO9	$: 	r   c              #      K   | j                   D ]{  }t        | |      }|j                  d      r|dd  }n>|dk7  r9d|v r5t        | j                  |      }t        |dd      r|j	                  dd      }|dk7  sj|m|t        |      f } y w)Nr   r   r   
hyphenatedFr   )r'   r(   r#   rB   r%   r   )r   attrvaluer7   s       r   __iter__zSerialisable.__iter__   s     NN 		/DD$'Es#ABx$t~~t44u5<<S1D{"u'8K...		/s   A6B9B<Bc                     | j                   |j                   k(  syt        |       t        |      k(  sy| j                  D ]  }t        | |      t        ||      k7  s y y)NFT)rB   r   rA   r(   )r   otherr5   s      r   __eq__zSerialisable.__eq__   s[    ~~0dtE{*## 	BtR GE2$66	 r   c                     | |k(   S r   r   )r   rO   s     r   __ne__zSerialisable.__ne__   s    5=  r   c           	      z   dj                  | j                  | j                  j                        }g }| j                  | j
                  z   D ]J  }t        | |      }t        |t              rd }|j                  dj                  |t        |                   L dj                  |      }dj                  ||g      S )Nz<{0}.{1} object>
Parameters:z{0}={1}z, 
)format
__module__rB   __name__r'   rA   r(   r)   r   r.   reprjoin)r   sargskr>   s        r   __repr__zSerialisable.__repr__   s    ,33OONN##
 $"3"33 	7Aa A!Z(KK
))!T!W56		7
 zz$zz1d)$$r   c                     g }| j                   | j                  z   D ]:  }t        | |      }t        |t              rt        |      }|j                  |       < t        t        |            S r   )r'   rA   r(   r)   r"   tupler.   hash)r   fieldsrK   vals       r   __hash__zSerialisable.__hash__   sa    NNT%6%66 	D$%C#t$CjMM#		 E&M""r   c                 H   t        |       t        |      k7  rt        d      i }| j                  D ]  }t        | |      xs t        ||      ||<   ! | j                  D ]0  }t        | |      }t        ||      }|r|r	||z   ||<   (|xs |||<   2  | j
                  di |S )Nz+Cannot combine instances of different typesr   )type	TypeErrorr'   r(   rA   rB   )r   rO   valsrK   r5   abs          r   __add__zSerialisable.__add__   s    :e$IJJNN 	ED t,Dt0DDJ	E## 	"Bb!Ar"AQq5R6R	" t~~%%%r   c                     | j                  d      }| j                  j                  |      }| j                  D ]@  }|| j                  | j
                  z   vst        t        | |            }t        |||       B |S )Ndummy)r   )	r<   rB   r   __dict__r'   rA   r   r(   setattr)r   xmlcpr\   r>   s        r   __copy__zSerialisable.__copy__   st    ll7l+^^%%c* 	"A):):::q)*Aq!	" 	r   )NNN)rW   rV   __qualname____doc__r'   rE   rA   r!   rD   r*   r   r:   classmethodr   r<   rM   rP   rR   r]   rc   rj   rq   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"   r_   rC   r   r   r   r   <module>r|      sN     V   
 " '
 5M	X- Xr   