U
    ~d-"                  
   @   s   d dl mZmZmZmZmZmZmZ ddlm	Z	 e	  d dl
Zd dlmZ d dlZddlmZ ddlmZ zd dlZW n& ek
r Z zdZW 5 dZ[X Y nX G dd	 d	eZG d
d deZG dd deZG dd deZdd Zdd Zdd ZdS )    )nested_scopes
generatorsdivisionabsolute_importwith_statementprint_functionunicode_literals   )backportNdeepcopy)qualified_name)Modelc                
   @   s0   e Zd Zd
ddZdd ZdddZdd	 ZdS )HooksNc                 C   s@   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	d S N)
before_marshalafter_marshalbefore_unmarshalafter_unmarshalbefore_serializeafter_serializebefore_deserializeafter_deserializebefore_validateafter_validate)selfr   r   r   r   r   r   r   r   r   r    r   I/var/www/html/myproject/myenv/lib/python3.8/site-packages/serial/hooks.py__init__   s    zHooks.__init__c                 C   s   | j f t| S r   )	__class__varsr   r   r   r   __copy__/   s    zHooks.__copy__c                    s"   | j f  fddt|  D S )Nc                    s   i | ]\}}|t | d qS )memor   ).0kvr#   r   r   
<dictcomp>4   s    z&Hooks.__deepcopy__.<locals>.<dictcomp>)r   r    items)r   r$   r   r#   r   __deepcopy__2   s    
zHooks.__deepcopy__c                 C   s   dS )NTr   r!   r   r   r   __bool__9   s    zHooks.__bool__)
NNNNNNNNNN)N)__name__
__module____qualname__r   r"   r*   r+   r   r   r   r   r      s             

r   c                   @   s   e Zd ZdddZdS )ObjectNc                 C   sX   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _d S r   )r   r   r   r   r   r   r   r   r   r   before_setattrafter_setattrbefore_setitemafter_setitem)r   r   r   r   r   r   r   r   r   r   r   r0   r1   r2   r3   r   r   r   r   ?   s    zObject.__init__)NNNNNNNNNNNNNNr,   r-   r.   r   r   r   r   r   r/   =   s                 r/   c                   @   s   e Zd ZdddZdS )ArrayNc                 C   sX   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _d S r   )r   r   r   r   r   r   r   r   r   r   r2   r3   before_appendafter_append)r   r   r   r   r   r   r   r   r   r   r   r2   r3   r6   r7   r   r   r   r   b   s    zArray.__init__)NNNNNNNNNNNNNNr4   r   r   r   r   r5   `   s                 r5   c                   @   s   e Zd ZdddZdS )
DictionaryNc                 C   sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S r   )r   r   r   r   r   r   r   r   r   r   r2   r3   )r   r   r   r   r   r   r   r   r   r   r   r2   r3   r   r   r   r      s    zDictionary.__init__)NNNNNNNNNNNNr4   r   r   r   r   r8      s               r8   c                 C   s0   t | tr| jS t | tr,| jp*tt| S dS )z~
    Read metadata from a model instance (the returned metadata may be inherited, and therefore should not be written to)
    N)
isinstancetype_hooksr   read)model_instancer   r   r   r<      s    

r<   c                 C   s   t | tr| jdkrXt| tjjr(t n*t| tjjr<t nt| tjjrPt nd| _q| j	D ]*}t
|dr^| j|jkr^t| j| _ qq^n&t | tr| jdkrttt| | _| jS )z
    Retrieve a metadata instance. If the instance currently inherits its metadata from a class or superclass,
    this funtion will copy that metadata and assign it directly to the model instance.
    Nr;   )r9   r:   r;   
issubclassserialmodelr/   r5   r8   	__bases__hasattrr   r   writable)r=   br   r   r   rC      s$    	




rC   c                 C   s   t | trJ| }t| tjjr tn&t| tjjr2tnt| tjjrDtnd}nLt | trt| }t | tjjrntn&t | tjjrtnt | tjjrtnd}t ||st	dt
|t
|f || _dS )z/
    Write metadata to a class or instance
    Nz+Hooks assigned to `%s` must be of type `%s`)r9   r:   r>   r?   r@   r/   r5   r8   r   
ValueErrorr   r;   )r=   metatmtr   r   r   write   s8    	




rI   )
__future__r   r   r   r   r   r   r   Zutilities.compatibilityr
   Z
serial.abcr?   copyr   Z	utilitiesr   Z	abc.modelr   typingImportErroreobjectr   r/   r5   r8   r<   rC   rI   r   r   r   r   <module>   s$   $(##'