o
    h>xd9$                  
   @   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ye Z zdZW Y dZ[ndZ[ww 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 ]2}zt| |}W n ty0   d }Y nw zt||}W n tyC   d }Y nw ||krN||f||< q|S N)setserialmetaread
propertieskeysgetattrAttributeError)abZdiscrepanciesZa_propertiesZb_propertiesZ	property_Za_valueZb_value r   3D:\rfid_django\env\Lib\site-packages\serial/test.py_object_discrepancies   s$   r   Tc                 C      t | d|d d S )Njsonmodel_instanceformat_raise_validation_errorsmodelr"   r$   r   r   r   r    /   
   
r    c                 C   r   )Nyamlr!   r%   r'   r   r   r   r)   ;   r(   r)   c                 C   s   t  r   )NotImplementedErrorr'   r   r   r   xmlG   s   r+   c                 C   s  t | tst| }tdt ttd|v rdnd| f tj| | t | tj	j
rtjj| |d}|r?tdd|  t| }t| }|dksMJ ||}tt| }z| |ks^J W n tyM }	 ztj| }
tj|}ddd t| dD }dd	d t|dD }d
| d g}|
|kr|d|
|f  ||kr|d||f  t| | D ]d\}}|\}}||ksJ 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  qtt|	jr1|	jd d d| nd|f|	jrA|	jdd nt |	_|	d}	~	ww t|}z	||ksZJ W n4 ty }	 z'd||f }|	jrtt|	jd d | f|	jdd |	_|	|f|	_|	d}	~	ww |dkrtj|tjtjd}n&|dkrt|}n|dkrt  t|}t!dd|v rdnd|  t" }tj#| j$ D ]/\}}|%|j&p| t'| |}t |tst(|dr t |tt)t*fs t	|||d q|+ D ]}||vrt,d ||f qdS t | tj	j-rKtj|  | D ]}t |ts@t(|drGt |tt)t*fsGt	|||d q)dS t | tj	j.rtj|  |  D ]#\}}t |tsvt(|dr}t |tt)t*fs}t	|||d q]dS d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       | ]}|  V  qd S r   strip.0lr   r   r   	<genexpr>       zmodel.<locals>.<genexpr>c                 s   r/   r   r0   r2   r   r   r   r5      r6   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   r/   r   r0   r2   r   r   r   r5      r6   c                 s   r/   r   r0   r2   r   r   r   r5      r6   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   KeyError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<  


*J





r&   )T)!
__future__r   r   r   r   r   r   r   Zutilities.compatibilityr
   Zfuture.utilsr   Zserial.utilitiesr   r   Zserial.abc.modelr   warningsr   rK   r    rI   	itertoolsr   r)   rM   r   typingImportErrorrX   r   r+   r&   r   r   r   r   <module>   s6   $ 


