U
    ~d9$                  
   @   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
mZ d dlmZmZ d dlmZ d dlmZ d dlZd dlZd d	lmZ d dlZd dlZzd dlZW n& ek
r Z zdZW 5 dZ[X Y nX d
d ZdddZdddZdddZdddZ dS )    )nested_scopes
generatorsdivisionabsolute_importwith_statementprint_functionunicode_literals   )backport)
native_str)qualified_namecalling_function_qualified_name)Model)warnN)chainc              	   C   s   i }t tj| j }t tj|j }||B D ]h}zt| |}W n tk
rb   d }Y nX zt||}W n tk
r   d }Y nX ||kr8||f||< q8|S N)setserialmetaread
propertieskeysgetattrAttributeError)abZdiscrepanciesZa_propertiesZb_propertiesZ	property_Za_valueZb_value r   H/var/www/html/myproject/myenv/lib/python3.8/site-packages/serial/test.py_object_discrepancies   s    

r   Tc                 C   s   t | d|d d S )Njsonmodel_instanceformat_raise_validation_errorsmodelr!   r#   r   r   r   r   /   s
    r   c                 C   s   t | d|d d S )Nyamlr    r$   r&   r   r   r   r'   ;   s
    r'   c                 C   s
   t  d S r   )NotImplementedErrorr&   r   r   r   xmlG   s    r)   c                 C   s"  t | ts:t| }tdt ttd|kr,dnd| f tj| | t | tj	j
rTtjj| |d}|r~tdd|  t| }t| }|dkst||}tt| }z| |kstW n tk
r }	 ztj| }
tj|}ddd t| dD }dd	d t|dD }d
| d g}|
|krT|d|
|f  ||krp|d||f  t| | D ]\}}|\}}||ksttj|}
tj|}|
|kr|d|||
|
|krdnd|f  ddd t|dD }ddd t|dD }||kr~|d|||kr@dnd|f  q~tt|	jrt|	jd d d| nd|f|	jr|	jdd nt |	_|	W 5 d}	~	X Y nX t|}z||kstW np tk
r@ }	 zPd||f }|	jr$tt|	jd d | f|	jdd |	_n|f|	_|	W 5 d}	~	X Y nX |dkrbtj|tjtjd}nN|dkrxt|}n8|dkrt  n&t|}t!dd|krdnd|  t" }tj#| j$ D ]^\}}|%|j&p| t'| |}t |tst(|drt |tt)t*fst	|||d q|+ D ] }||kr0t,d ||f q0nt | tj	j-rtj|  | D ]>}t |tst(|drtt |tt)t*fstt	|||d qtnht | tj	j.rtj|  |  D ]B\}}t |tst(|drt |tt)t*fst	|||d qdS )!a  
    Tests an instance of a `serial.model.Model` sub-class.

    Parameters:

        - model_instance (serial.model.Model):

            An instance of a `serial.model.Model` sub-class.

        - format_ (str):

            The serialization format being tested: 'json', 'yaml' or 'xml'.

        - raise_validation_errors (bool):

            The function `serial.model.validate` verifies that all required attributes are present, as well as any
            additional validations implemented using the model's validation hooks `after_validate` and/or
            `before_validate`.

                - If `True`, errors resulting from `serial.model.validate` are raised.

                - If `False`, errors resulting from `serial.model.validate` are expressed only as warnings.
    zK`%s` requires an instance of `%s` for the parameter `model_instance`, not%s
z:
%sz `%s`)raise_errors c                 s   s   | ]}|  V  qd S r   strip.0lr   r   r   	<genexpr>   s     zmodel.<locals>.<genexpr>c                 s   s   | ]}|  V  qd S r   r-   r/   r   r   r   r2      s     zCDiscrepancies were found between the instance of `%s` provided and z a serialized/deserialized clone:z(
    :

        %s
        !=
        %sz"
        %s
        !=
        %s
z/
    %s().%s:

        %s
        %s
        %sz==z!=c                 s   s   | ]}|  V  qd S r   r-   r/   r   r   r   r2      s     c                 s   s   | ]}|  V  qd S r   r-   r/   r   r   r   r2      s     z!
        %s
        %s
        %sr   r	   Nz	
%s
!=
%sr   )object_hookobject_pairs_hookr'   r)   zRValid serialization types for parameter `format_` are "json", "yaml", or "xml, notz %s.__iter__)r"   r#   z5"%s" not found in serialized/re-deserialized data: %s)/
isinstancer   repr	TypeErrorr   r   r   r   r"   r%   ZObjectmarshalvalidater   jointypestrAssertionError	serializesplitappendr   itemstupler   args_jsonloadscollectionsOrderedDict_yamlloadr(   
ValueErrorr   r   r   addnamer   hasattrr   bytesr   KeyErrorZArrayZ
Dictionary)r!   r"   r#   Zvalue_representationerrorsZ
model_typestringZreloaded_model_instanceZqualified_model_nameesasbrarbmessagekZa_br   r   Zreloaded_stringmZreloaded_marshalled_dataZformat_representationr   Zproperty_namepropertyZproperty_valueitemkeyvaluer   r   r   r%   T   s    





*






r%   )T)T)T)T)!
__future__r   r   r   r   r   r   r   Zutilities.compatibilityr
   Zfuture.utilsr   Zserial.utilitiesr   r   Zserial.abc.modelr   warningsr   rG   r   rE   	itertoolsr   r'   rI   r   typingImportErrorrS   r   r)   r%   r   r   r   r   <module>   s0   $ 
 
 
 