o
    ›jZû  ã                   @   sœ   d dl mZ 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„ de	ƒZdS )é    )Úabsolute_import)Úcopy)Úkwlisté   )Ú
Descriptor)Ú_Serialiasable)ÚSequenceÚNestedSequenceÚMultiSequencePart)Ú
namespaced)Úsafe_string)ÚElementÚ	localnamec                   @   s‚   e Zd ZdZdZdZdZdZdZe	dd„ ƒZ
dZedd„ ƒZddd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú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                 C   s   t ‚©N)ÚNotImplementedError)Úself© r   úS/var/www/html/env/lib/python3.10/site-packages/openpyxl/descriptors/serialisable.pyÚtagname)   s   zSerialisable.tagnamec           	      C   s~  t |jƒ}| jD ]\}}||v r|| ||< ||= qt|ƒD ]}| d¡r)||= q|tv r8|| |d| < ||= q|jrFd| jv rF|j|d< |D ]o}t|ƒ}|tv rVd| }t	| |dƒ}|du set
|tƒrfqHt|dƒrq| |¡}nt|jdƒr~|j |¡}n|j}t
|tƒr‹|||< qHt
|tƒrž| |g ¡ ||  |¡ qHt
|tƒr³| |jg ¡ ||j  |¡ qH|||< qH| di |¤ŽS )z(
        Create object from XML
        Ú{Ú_Ú	attr_textNÚ	from_treer   )ÚdictÚattribÚ__namespaced__ÚlistÚ
startswithÚKEYWORDSÚtextÚ	__attrs__r   ÚgetattrÚ
isinstanceÚpropertyÚhasattrr   Úexpected_typer	   r   Ú
setdefaultÚappendr
   Ústore)	ÚclsÚnoder   ÚkeyÚnsÚelÚtagÚdescÚobjr   r   r   r   /   sJ   
€
€






zSerialisable.from_treec                    sr  |d u r| j }| d¡r|dd … }t| |ˆƒ}t| dˆƒ‰t| ƒ}| jD ]\}}||v r6|| ||< ||= q%t||ƒ}d| jv rItt| dƒƒ|_	| j
D ]j‰ t| jˆ d ƒ}t| ˆ ƒ}	t|	tƒr–t|tƒrp|	sgqL| ˆ |	ˆ¡g}
nt|tƒr�| j|_| ˆ |	ˆ¡}
n
‡ ‡fdd„|	D ƒ}
|
D ]}| |¡ q�qLˆ | jv r£| ˆ |	ˆ¡}n
|	d u r¨qL|	 ˆ ¡}|d ur¶| |¡ qL|S )Nr   r   Ú	namespacer   c                 3   s   � | ]	}|  ˆ ˆ¡V  qd S r   )Úto_tree)Ú.0Úv©Ú	child_tagr2   r   r   Ú	<genexpr>Œ   s   € z'Serialisable.to_tree.<locals>.<genexpr>)r   r   r   r"   r   r   r   r!   r   r    Ú__elements__Ú	__class__r#   Ú	seq_typesr	   r3   r   Úidx_baser(   Ú
__nested__)r   r   Úidxr2   Úattrsr,   r-   r.   r0   r1   Únodesr+   r   r6   r   r3   g   sN   
€






ÿ


€zSerialisable.to_treec                 c   sP   � | j D ]!}t| |ƒ}| d¡r|dd … }|dkr%|d ur%|t|ƒfV  qd S )Nr   r   r   )r!   r"   r   r   )r   ÚattrÚvaluer   r   r   Ú__iter__›   s   €


€ûzSerialisable.__iter__c                 C   sN   | j |j ksdS t| ƒt|ƒksdS | jD ]}t| |ƒt||ƒkr$ dS qdS )NFT)r:   r   r9   r"   )r   Úotherr.   r   r   r   Ú__eq__¤   s   
ÿzSerialisable.__eq__c                 C   s
   | |k S r   r   )r   rD   r   r   r   Ú__ne__¯   s   
zSerialisable.__ne__c                 C   sn   d  | j| jj¡}g }| j| j D ]}t| |ƒ}t|tƒrd }| 	d  |t
|ƒ¡¡ qd |¡}d ||g¡S )Nz<{0}.{1} object>
Parameters:z{0}={1}z, Ú
)ÚformatÚ
__module__r:   Ú__name__r!   r9   r"   r#   r   r(   ÚreprÚjoin)r   ÚsÚargsÚkr5   r   r   r   Ú__repr__³   s   þ


zSerialisable.__repr__c                 C   sH   g }| j | j D ]}t| |ƒ}t|tƒrt|ƒ}| |¡ qtt|ƒƒS r   )r!   r9   r"   r#   r   Útupler(   Úhash)r   ÚfieldsrA   Úvalr   r   r   Ú__hash__Ã   s   

zSerialisable.__hash__c                 C   s’   t | ƒt |ƒkrtdƒ‚i }| jD ]}t| |ƒpt||ƒ||< q| jD ]}t| |ƒ}t||ƒ}|r:|r:|| ||< q#|p=|||< q#| jdi |¤ŽS )Nz+Cannot combine instances of different typesr   )ÚtypeÚ	TypeErrorr!   r"   r9   r:   )r   rD   ÚvalsrA   r.   ÚaÚbr   r   r   Ú__add__Î   s   



zSerialisable.__add__c                 C   sR   | j dd�}| j |¡}| jD ]}|| j| j vr&tt| |ƒƒ}t|||ƒ q|S )NÚdummy)r   )	r3   r:   r   Ú__dict__r!   r9   r   r"   Úsetattr)r   ÚxmlÚcprO   r5   r   r   r   Ú__copy__Þ   s   
€zSerialisable.__copy__)NNN)rJ   rI   Ú__qualname__Ú__doc__r!   r=   r9   r   r<   r$   r   r2   Úclassmethodr   r3   rC   rE   rF   rP   rU   r[   ra   r   r   r   r   r      s(    


74	r   N)Ú
__future__r   r   Úkeywordr   Ú	frozensetr   Ú r   r   Úsequencer   r	   r
   r2   r   Úopenpyxl.compatr   Úopenpyxl.xml.functionsr   r   r   rQ   r;   r   r   r   r   r   Ú<module>   s    