"VfiddlmZddlmZeeZddlmZddlmZddlm Z m Z m Z ddl m Z ddlmZdd lmZmZeefZGd d e Zd S))copy)kwlist) Descriptor)MetaSerialisable)SequenceNestedSequenceMultiSequencePart) namespaced) safe_string)Element localnameceZdZdZdZdZdZdZdZe dZ dZ e dZ ddZdZdZd Zd Zd Zd Zd ZdS) 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 NrctN)NotImplementedError)selfs Pc:\PYTHON\DbComparer\venv\Lib\site-packages\openpyxl/descriptors/serialisable.pytagnamezSerialisable.tagname(s!"cPt|j}|jD]\}}||vr||||<||=t|D]^}|dr||=|t vr|||d|z<||=6d|vr$|dd}||||<||=_|jrd|jvr |j|d<|D]`}t|}|t vrd|z}t||d}|t|trIt|dr||} n7t|jdr|j|} n|j} t|t r| ||<t|t"r3||g|||  t|t(r=||jg||j| [| ||<b|di|S)z( Create object from XML {_- attr_textN from_tree)dictattrib__namespaced__list startswithKEYWORDSreplacetext __attrs__rgetattr isinstancepropertyhasattrr expected_typer r setdefaultappendr store) clsnoder keynsneltagdescobjs rrzSerialisable.from_tree.sf dk"")  GCV||$Rjs 2J<< C~~c"" 3KK$*3KsSy!3KKKKS))"3Kq 3K 9 , 55"&)F;  " "BB--ChCi3T**D|z$99|t[)) "nnR((4-{;;",66r::CC'C$// "!s D(++ "!!#r***s ""3''''D"344 "!!$*b111tz"))#....!s s}}V}}rc  ||j}|dr |dd}t||}t|dt |}|jD]\}}||vr||||<||=t ||}d|jvr"tt|d|_ |j D]O t|j d}t| } t|drt| dr |j | _ t| trt|t r| s| | g} nHt|t$r$|j|_| | } n fd| D} | D]} ||  |jvr| | } n| #|  } | || Q|S)Nrr namespacerc3DK|]}|VdSr)to_tree).0v child_tagr:s r z'Serialisable.to_tree..s1JJQYYy)<<JJJJJJr)rr#r r(rr!r r'r r& __elements__ __class__r+r:r) seq_typesr r<ridx_baser. __nested__) rridxr:attrsr2r3r5r7r8nodesr1r?s ` @rr<zSerialisable.to_treejsC ?lG   c " " "abbkGT7I66D+y99 T *  GCe||!#Jb #J We $ $ $. ( (!'$ "<"<==BG* $ $I4>9d;;D$ **Ct[)) /gc;.G.G / $ #y)) $dN33 K! !\\)S)DDEEEh//K$(MDM!\\)S)DDEEJJJJJcJJJE!$$DIIdOOOO$//<< 3 BBDD[;;y11D#IIdOOO rc#@K|jD]}t||}|dr |dd}nF|dkr@d|vr Parameters:z{0}={1}z,  ) format __module__rB__name__r'rAr(r)rr.reprjoin)rsargskr>s r__repr__zSerialisable.__repr__s , 3 3 O N #  $"33 7 7Aa  A!Z((  KK ))!T!WW55 6 6 6 6zz$zz1d)$$$rcg}|j|jzD]K}t||}t|trt |}||Ltt |Sr)r'rAr(r)r"tupler.hash)rfieldsrKvals r__hash__zSerialisable.__hash__suNT%66  D$%%C#t$$ !Cjj MM#    E&MM"""rcTt|t|krtdi}|jD]%}t||pt||||<&|jD]6}t||}t||}|r |r ||z||</|p|||<7|jdi|S)Nz+Cannot combine instances of different typesr)type TypeErrorr'r(rArB)rrOvalsrKr5abs r__add__zSerialisable.__add__s ::e $ $IJJ JN E ED t,,Dt0D0DDJJ# " "Bb!!Ar""A "Q "q5R6Rt~%%%%%rc|d}|j|}|jD]A}||j|jzvr.t t||}t|||B|S)Ndummy)r) r<rBr__dict__r'rArr(setattr)rxmlcpr\r>s r__copy__zSerialisable.__copy__sll7l++ ^ % %c * * " "A)::::q))**Aq!!! r)NNN)rWrV __qualname____doc__r'rErAr!rDr*rr: classmethodrr<rMrPrRr]rcrjrqrrrrrsIJLNH ##X#I88[8v3333l / / /!!! % % % ### & & &     rr) metaclassN)rkeywordr frozensetr$rrsequencerr r r:r openpyxl.compatr openpyxl.xml.functionsr rr"r_rCrrrrr|s. 9V   "!!!!!'''''' 5M XXXXX-XXXXXXr