a
    g=ic                     @   sB  U d dl Z d dlmZ d dlmZ d dlm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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d d	l m!Z! d
dl"m#Z#m$Z$m%Z%m&Z& d
dl'm(Z(m)Z)m*Z*m+Z+ d
dl,m-Z-m.Z. d
dl/m0Z0m1Z1m2Z2m3Z3 d
dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d
dl=m>Z>m?Z? d
dl@mAZAmBZBmCZC d
dlDmEZEmFZF d
dlmGZGmHZH d
dlmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d
dlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ er<d dl`maZa d
dl"mbZb d
dlmcZc d
dlmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZl edddZmdZnedZoeepe8f ddd d!Zqereeegesf  d"d#d$ZteuevewexfZyeed%f ezd&< efey Z{eed%f ezd'< d(Z|e!d)e6e7fd*G d+d, d,eZ}e~jZG d-d deVe}d.Zd)Z|eddeddd/epeee(  depeepd0f eepef eed d1d2d3Zededdd4epeee(  eed eed d%f f epeepd0f eepef eed d1d5d3Zddedddd6epeee(  eded eed d%f f epeepd0f eepef eeepd%f  eed d7	d8d3Ze~ Zd?ee d9d:ed9d;ee. f d<d=d>ZdS )@    N)ABCMeta)deepcopy)Enum)partial)Path)FunctionTypeprepare_classresolve_bases)TYPE_CHECKINGAbstractSetAnyCallableClassVarDictListMappingOptionalTupleTypeTypeVarUnioncastno_type_checkoverload)dataclass_transform   )ValidatorGroupextract_root_validatorsextract_validatorsinherit_validators)
BaseConfigExtrainherit_configprepare_config)ErrorWrapperValidationError)ConfigError	DictError
ExtraErrorMissingError)MAPPING_LIKE_SHAPESField	FieldInfo
ModelFieldModelPrivateAttrPrivateAttr	Undefinedis_finalvar_with_default_val)custom_pydantic_encoderpydantic_encoder)Protocol	load_fileload_str_bytes)default_ref_templatemodel_schema)PyObjectStrBytes)AnyCallableget_args
get_originis_classvaris_namedtupleis_unionresolve_annotationsupdate_model_forward_refs)DUNDER_ATTRIBUTESROOT_KEYClassAttribute
GetterDictRepresentation
ValueItemsgenerate_model_signatureis_valid_fieldis_valid_private_namelenient_issubclasssequence_likesmart_deepcopyunique_listvalidate_field_name)	Signature)ValidatorListDict)	ModelOrDc)	AbstractSetIntStrAnyClassMethodCallableGeneratorDictAny
DictStrAnyMappingIntStrAnyReprArgsSetStrTupleGeneratorModel	BaseModel)bound)r^   create_modelvalidate_model_T)fieldsreturnc                 C   s   t | dkrtt dd S )Nr   z" cannot be mixed with other fields)len
ValueErrorrD   )rc    rg   ^/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pydantic/main.pyvalidate_custom_root_typeb   s    ri   )frozenrd   c                 C   s   t tddd}| r|S d S )N)self_rd   c                 S   s   t | jt t| j  S N)hash	__class__tuple__dict__values)rk   rg   rg   rh   hash_functionh   s    z-generate_hash_function.<locals>.hash_function)r   int)rj   rr   rg   rg   rh   generate_hash_functiong   s    rt   .ANNOTATED_FIELD_UNTOUCHED_TYPESUNTOUCHED_TYPESFT)Zkw_only_defaultZfield_descriptorsc                       s4   e Zd Ze fddZeed fddZ  ZS )ModelMetaclassc           (         st  i }t }i }g g  }}	i }
i }|dd}t|tr:|hnt|}t }d }t|D ]t}trTt|trT|tkrT|	t
|j t|j|}t|j|}||j7 }|	|j7 }	|	|j |	|j |j}qTdd}dd t|D }fdd |@ D }|d	}|r |r td
t||fi |}tt||}t|}| D ]6}|| ||j}|rP|j	| |   qPt!|| t"t#t$dfdd}|d|dfdkrt%|di |dd }|& D ]\}}t'|r|(| nt)|||t*r$|(| nt+|rt,|| ||t*}t-t.|rZt/|n|f}||r|t0krt1dd |D sqt2j3||||||d||< n||vr|j4rt5 |
|< qt6|j7 |& D ]\}}||vo|| }t|t8r8t9|s.t:d| d| d| d||
|< n|j4r`t9|r`|r`t5|d|
|< nt+|r||vr|rt,|| t2j3||||t*|||d}||v rt;|j<|| j<r|| j<|_<ntd| d| d|||< qt=|v } | r
t>| |?  |j@r(tAtB|j@}!ntC}!tD|\}"}#|d u rLtE|jF}||
 B dhB  ||dd |& D pxd dd |& D pd |jGtH||" dd  d!tH|	|# d"d  d!i tI|!| i ||
||
 B ||d# fd$d|& D }$tJ jK| |||$fi }%tLd%tM|%jN|||%_O|r2|%P  |& D ]4\}}&||$vr:tQ|&d&d }'tR|'r:|'|%| q:|%S )'N	__slots__rg   Z__resolve_forward_refs__Tc                 S   s$   h | ]}| d r|d s|qS )__)
startswithendswith.0keyrg   rg   rh   	<setcomp>   s   z)ModelMetaclass.__new__.<locals>.<setcomp>c                    s   i | ]}|  |qS rg   )popr|   )kwargsrg   rh   
<dictcomp>       z*ModelMetaclass.__new__.<locals>.<dictcomp>ConfigzYSpecifying config in two places is ambiguous, use either Config attribute or class kwargs)vrd   c                    s   t |  p| jjdkS )NZcython_function_or_method)
isinstancern   __name__r   )untouched_typesrg   rh   is_untouched   s    z,ModelMetaclass.__new__.<locals>.is_untouched
__module____qualname__)zpydantic.mainr^   __annotations__c                 s   s   | ]}t t|tV  qd S rl   )rL   r=   r   )r}   Zallowed_typerg   rg   rh   	<genexpr>   s   z)ModelMetaclass.__new__.<locals>.<genexpr>)namevalue
annotationclass_validatorsconfigzPrivate attributes "zF" must not be a valid field name; Use sunder or dunder names, e. g. "_z" or "__z__")defaultzThe type of .zo differs from the new default value; if you wish to change the type of this field, please use a type annotationc                 S   s&   i | ]\}}|j jd ur||j jqS rl   )
field_infoexcluder}   r   fieldrg   rg   rh   r      s   c                 S   s&   i | ]\}}|j jd ur||j jqS rl   )r   includer   rg   rg   rh   r     s   c                 S   s   | j S rl   r   r   rg   rg   rh   <lambda>  r   z(ModelMetaclass.__new__.<locals>.<lambda>)Zname_factoryc                 S   s
   | d j S )Nr   r   )Zskip_on_failure_and_vrg   rg   rh   r     r   )
__config__
__fields____exclude_fields____include_fields____validators____pre_root_validators____post_root_validators____schema_cache____json_encoder____custom_root_type____private_attributes__rx   __hash____class_vars__c                    s   i | ]\}}| vr||qS rg   rg   )r}   nr   )exclude_from_namespacerg   rh   r     r   __signature____set_name__)Sr    getr   strsetreversed_is_base_model_class_defined
issubclassr^   updaterN   r   r"   r   r   r   r   r   r   r   r   r   dirkeys	TypeErrorr   r   rq   Z
set_configZget_validatorsr   r   Zpopulate_validatorsr#   ru   r   boolrA   itemsr>   addr1   r0   rJ   rP   r@   r=   r<   r9   anyr-   ZinferZunderscore_attrs_are_privater/   rv   Zkeep_untouchedr.   rK   	NameErrorrL   type_rD   ri   Zcheck_for_unusedjson_encodersr   r2   r3   r   rt   rj   
validatorsrO   staticmethodsuper__new__rE   rI   __init__r   __try_update_forward_refs__getattrcallable)(mcsr   bases	namespacer   rc   r   r   Zpre_root_validatorsZpost_root_validatorsZprivate_attributesZbase_private_attributesslotsZ
class_vars	hash_funcbaseZresolve_forward_refsZallowed_config_kwargsZconfig_kwargsZconfig_from_namespacevgfZextra_validatorsr   annotationsZann_nameZann_typer   Zallowed_typesvar_nameZcan_be_changedinferredZ_custom_root_typeZjson_encoderZ
pre_rv_newZpost_rv_newZnew_namespaceclsobjset_namern   )r   r   r   rh   r   {   s,   




















zModelMetaclass.__new__)instancerd   c                    s   t |dot |S )z|
        Avoid calling ABC _abc_subclasscheck unless we're pretty sure.

        See #3829 and python/cpython#92810
        r   )hasattrr   __instancecheck__)selfr   r   rg   rh   r   +  s    z ModelMetaclass.__instancecheck__)	r   r   r   r   r   r   r   r   __classcell__rg   rg   r   rh   rw   y   s    0rw   c                   @   s  e Zd ZU er0i Zeeeef  e	d< dZ
eeeeef   e	d< dZeeeeef   e	d< i Zeeeef  e	d< eee  e	d< eeeeef   e	d< eZeee  e	d< d	d
 Zeeegef  e	d< i Zed e	d< dZee e	d< ed e	d< eeeef  e	d< ee e	d< e Zee e	d< eZdZ dZ!eddddZ"e#dd Z$ddddZ%dddd d!Z&ddd"d#Z'dddddddd$ee(d%  ee(d%  eee eeed&d'd(d)Z)ddddddddd*d+	ee(d%  ee(d%  eee eeeeeegef  eeed,d-d.Z*e+eed/d0d1Z,e+ed2 ed2d3d4d5Z-e+dd6ddd7ed2 e.eee/ed2d8d9d:Z0e+dd6ddd7ed2 e(ee1f eee/ed2d;d<d=Z2e+ed2 ed2d3d>d?Z3e+dred2 ed@ ed2dAdBdCZ4d2d&d@ed2dDdEdFZ5dddddGd2ee(d%  ee(d%  ed& ed2dHdIdJZ6e+d*e7feed&dKdLdMZ8e+d*e7dNeeeedOdPdQZ9e+dRddSdTZ:e+ed2 ed2dUdVdWZ;e+ed2 ee<d3dXdYZ=e+e#eeeee(d%  ee(d%  eeeedZ	d[d\Z>e+edd]d^d_Z?e+edd]d`daZ@dbddcddZAdseeee(d%  ee(d%  eeedbdedfdgZBdtedh edh eed& eeCe  didjdkZDeedldmdnZEdoddpdqZFdS )ur^   r   Nr   r   r   r   r   r   c                 C   s   | S rl   rg   )xrg   rg   rh   r   A  r   zBaseModel.<lambda>r   rW   r   Fr   rQ   r   r   r   __fields_set__)rp   r    )datard   c              
   K   sr   t | j|\}}}|r|zt| d| W n. tyX } ztd|W Y d}~n
d}~0 0 t| d| |   dS )z
        Create a new model by parsing and validating input data from keyword arguments.

        Raises ValidationError if the input data cannot be parsed to form a valid model.
        rp   zYModel values must be a dict; you may not have returned a dictionary from a root validatorNr   )ra   rn   object_setattrr   _init_private_attributes)Z__pydantic_self__r   rq   
fields_setvalidation_errorerg   rg   rh   r   M  s    zBaseModel.__init__c                    sZ   | j v s tv rt|  |S | jjtjurT | jvrTtd| j	j
 d  dn| jjrd| jjr|td| j	j
 dnΈ | jv r| j  jrtd| j	j
 d  dn| jjr@i | j |i}| jD ]X}z|| j	|}W q tttfy( } z"tt|tdg| j	W Y d }~qd }~0 0 q| j d }|r|jjs\td|j d fdd	| j D }|j|| | j	d
\}}|rt|g| j	n|| < g }	| jD ]j\}
}|
r|	r̐qz|| j	|}W n> tttfy } z|	t|td W Y d }~n
d }~0 0 q|	r2t|	| j	t| d| n
|| j < | j  d S )N"z" object has no field "z3" is immutable and does not support item assignmentz
" object "z2" field is final and does not support reassignmentlocz8" has allow_mutation set to False and cannot be assignedc                    s   i | ]\}}| kr||qS rg   rg   r}   kr   r   rg   rh   r   ~  r   z)BaseModel.__setattr__.<locals>.<dictcomp>r   r   rp   )r   rC   r   r   extrar!   allowr   rf   rn   r   Zallow_mutationrj   r   finalZvalidate_assignmentrp   r   AssertionErrorr%   r$   rD   r   r   r   r   validater   appendr   r   )r   r   r   
new_values	validatorexcZknown_fieldZdict_without_original_valueZerror_errorsskip_on_failurerg   r   rh   __setattr__`  sN    

.
,
zBaseModel.__setattr__)rd   c                    s.    fdd j D } j jdd |D dS )Nc                 3   s   | ]}|t  |tfV  qd S rl   )r   r0   )r}   r   r   rg   rh   r     r   z)BaseModel.__getstate__.<locals>.<genexpr>c                 S   s   i | ]\}}|t ur||qS rg   )r0   r   rg   rg   rh   r     r   z*BaseModel.__getstate__.<locals>.<dictcomp>)rp   r   __private_attribute_values__)r   rp   r   )r   Zprivate_attrsrg   r   rh   __getstate__  s
    zBaseModel.__getstate__)staterd   c                 C   sJ   t | d|d  t | d|d  |di  D ]\}}t | || q0d S )Nrp   r   r   )r   r   r   )r   r   r   r   rg   rg   rh   __setstate__  s    zBaseModel.__setstate__c                 C   s4   | j  D ]$\}}| }|tur
t| || q
d S rl   )r   r   get_defaultr0   r   )r   r   Zprivate_attrr   rg   rg   rh   r     s    z"BaseModel._init_private_attributes)r   r   by_aliasskip_defaultsexclude_unsetexclude_defaultsexclude_none)rT   rY   rX   )r   r   r   r   r   r   r  rd   c             
   C   s>   |dur"t | jj dt |}t| jd||||||dS )z
        Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

        NzF.dict(): "skip_defaults" is deprecated and replaced by "exclude_unset"Tto_dictr   r   r   r   r   r  )warningswarnrn   r   DeprecationWarningdict_iter)r   r   r   r   r   r   r   r  rg   rg   rh   r    s"    zBaseModel.dictT)	r   r   r   r   r   r   r  encodermodels_as_dict)r   r   r   r   r   r   r  r	  r
  dumps_kwargsrd   c       	      
   K   s~   |dur"t | jj dt |}tttgtf |p8| j}t	| j
|	||||||d}| jrf|t }| jj|fd|i|
S )z
        Generate a JSON representation of the model, `include` and `exclude` arguments as per `dict()`.

        `encoder` is an optional function to supply as `default` to json.dumps(), other arguments as per `json.dumps()`.
        NzF.json(): "skip_defaults" is deprecated and replaced by "exclude_unset"r  r   )r  r  rn   r   r  r   r   r   r   r  r  r   rD   r   
json_dumps)r   r   r   r   r   r   r   r  r	  r
  r  r   rg   rg   rh   json  s*    zBaseModel.json)r   rd   c                 C   s>   | j r6t|tr.| thkr.| jt jtv r6t|iS |S d S rl   )r   r   r  r   rD   r   shaper*   r   r   rg   rg   rh   _enforce_dict_if_root  s    zBaseModel._enforce_dict_if_rootr]   )r   r   rd   c              
   C   s   |  |}t|tsxzt|}W nV ttfyv } z:t| j d|jj }tt|t	dg| |W Y d }~n
d }~0 0 | f i |S )Nz expected dict not r   )
r  r   r  r   rf   r   rn   r%   r$   rD   )r   r   r   r   rg   rg   rh   	parse_obj  s    

,zBaseModel.parse_objutf8)content_typeencodingprotoallow_pickle)r   br  r  r  r  rd   c             
   C   sf   zt |||||| jjd}W n> tttfyZ } z tt|tdg| W Y d }~n
d }~0 0 | 	|S )Nr  r  r  r  
json_loadsr   )
r6   r   r  rf   r   UnicodeDecodeErrorr%   r$   rD   r  )r   r  r  r  r  r  r   r   rg   rg   rh   	parse_raw  s    

*zBaseModel.parse_raw)r   pathr  r  r  r  rd   c                C   s"   t |||||| jjd}| |S )Nr  )r5   r   r  r  )r   r  r  r  r  r  r   rg   rg   rh   
parse_file'  s    
zBaseModel.parse_filec                 C   sn   | j jstd| jrt|in| |}| | }t| |\}}}|rJ|t|d| t|d| |	  |S )Nz@You must have the config attribute orm_mode=True to use from_ormrp   r   )
r   orm_moder&   r   rD   _decompose_classr   ra   r   r   )r   r   mrq   r   r   rg   rg   rh   from_orm;  s    
zBaseModel.from_ormr[   )r   _fields_setrq   rd   c                 K   s   |  | }i }| j D ]P\}}|jr@|j|v r@||j ||< q||v rV|| ||< q|js| ||< q|| t|d| |du rt	|
 }t|d| |  |S )a  
        Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data.
        Default values are respected, but no other validation is performed.
        Behaves as if `Config.extra = 'allow'` was set since it adds all passed values
        rp   Nr   )r   r   r   	alt_aliasaliasrequiredr   r   r   r   r   r   )r   r"  rq   r   Zfields_valuesr   r   rg   rg   rh   	constructI  s     

zBaseModel.construct)r   rq   r   deeprd   c                C   sp   |rt |}| j}||}t|d| t|d| | jD ]0}t| |t}|tur:|r^t |}t||| q:|S )Nrp   r   )r   rn   r   r   r   r   r0   )r   rq   r   r'  r   r   r   r   rg   rg   rh   _copy_and_set_valuesa  s    

zBaseModel._copy_and_set_values)r   r   r   r'  )r   r   r   r   r'  rd   c                C   sR   t | jdd||ddfi |pi }|r8| j| B }n
t| j}| j|||dS )a  
        Duplicate a model, optionally choose which fields to include, exclude and change.

        :param include: fields to include in new model
        :param exclude: fields to exclude from new model, as with values this takes precedence over include
        :param update: values to change/add in the new model. Note: the data is not validated before creating
            the new model: you should trust this data
        :param deep: set to `True` to make a deep copy of the model
        :return: new model instance
        F)r  r   r   r   r   r'  )r  r  r   r   r   r(  )r   r   r   r   r'  rq   r   rg   rg   rh   copys  s    
zBaseModel.copy)r   ref_templaterd   c                 C   s<   | j ||f}|d ur|S t| ||d}|| j ||f< |S )Nr   r+  )r   r   r8   )r   r   r+  cachedsrg   rg   rh   schema  s    zBaseModel.schemar,  )r   r+  r  rd   c                K   s.   ddl m} | jj| j||dfd|i|S )Nr   )r3   r,  r   )r  r3   r   r  r/  )r   r   r+  r  r3   rg   rg   rh   schema_json  s    zBaseModel.schema_jsonrV   c                 c   s   | j V  d S rl   )r   )r   rg   rg   rh   __get_validators__  s    zBaseModel.__get_validators__)r   r   rd   c              
   C   s   t || rl| jj}d }|dvr2tdt |r2d}|dkr@d}n|dkrLd}|d u rX|S |j|j|j|dS | 	|}t |t
r| f i |S | jjr| |S zt
|}W n0 ttfy } zt |W Y d }~n
d }~0 0 | f i |S d S )N>   noner'  shallowzJ`copy_on_model_validation` should be a string: 'deep', 'shallow' or 'none'Fr3  r'  Tr)  )r   r   copy_on_model_validationr  r  r  r(  rp   r   r  r  r  r!  r   rf   r'   )r   r   r4  Z	deep_copyZvalue_as_dictr   rg   rg   rh   r     s4    



zBaseModel.validatec                 C   s   t |tr|S | j|S rl   )r   rF   r   Zgetter_dictr  rg   rg   rh   r    s    
zBaseModel._decompose_class)	r   r  r   r   r   r   r   r  rd   c	                    s  t |trFr8|j ||d}	t|	v r4|	t S |	S |j||dS |rTt||nd |rft||nd t |tr fdd| D S t|r fddt|D }
t	|j
r|j
|
 S |
|
S t |trtjddr|jS |S d S )	N)r   r   r   r   r   r  )r   r   c                    s\   i | ]T\}}r |sr(|r|j| oD|oP|d qS )r  r   r   r   r   r   r  Zis_excludedZis_included
_get_valuefor_element)r}   Zk_v_r   r   r   r  r   r  value_excludevalue_includerg   rh   r     s   z(BaseModel._get_value.<locals>.<dictcomp>c                 3   s\   | ]T\}}r |sr&|rj| o@|oL|d V  qdS )r5  Nr6  )r}   ir9  r:  rg   rh   r   
  s   z'BaseModel._get_value.<locals>.<genexpr>Zuse_enum_valuesF)r   r^   r  rD   r*  rH   r   rM   	enumerater?   rn   r   r   r   r   )r   r   r  r   r   r   r   r   r  Zv_dictZseq_argsrg   r:  rh   r7    s8    

zBaseModel._get_value)localnsrd   c                 K   s    t | | j | jj|tf dS )z{
        Same as update_forward_refs but will not raise exception
        when forward references are not defined.
        N)rB   r   rq   r   r   r   r   r?  rg   rg   rh   r   "  s    z%BaseModel.__try_update_forward_refs__c                 K   s   t | | j | jj| dS )z`
        Try to update ForwardRefs on fields based on this Model, globalns and localns.
        N)rB   r   rq   r   r   r@  rg   rg   rh   update_forward_refs*  s    zBaseModel.update_forward_refsr\   c                 c   s   | j  E dH  dS )z(
        so `dict(model)` works
        Nrp   r   r   rg   rg   rh   __iter__1  s    zBaseModel.__iter__)r  r   r   r   r   r   r  rd   c                 c   s  |d us| j d ur t| j |}|d us2| jd urDtj| j|dd}| j|||d}|d u r|s|s|s|s|s| j E d H  d S |d urt| |nd }	|d urt| |nd }
| j D ]\}}|d ur||vs|r|d u rq|r| j|}t	|ddst	|dt
|krq|r4|| jv r4| j| j}n|}|sJ|
sJ|	r|| j||||
ob|
||	op|	||||d}||fV  qd S )NT)Z	intersect)r   r   r   r%  r   r  )r   rH   merger   _calculate_keysrp   r   r   r   r   _missingr$  r7  r8  )r   r  r   r   r   r   r   r  Zallowed_keysr;  r<  Z	field_keyr   Zmodel_fielddict_keyrg   rg   rh   r  7  sD     
zBaseModel._iterrY   )r   r   r   r   rd   c                 C   sx   |d u r|d u r|du rd S |r,| j  }n
| j }|d urJ|| M }|rZ|| 8 }|rt|dd | D 8 }|S )NFc                 S   s   h | ]\}}t |r|qS rg   )rH   Zis_truer   rg   rg   rh   r     r   z,BaseModel._calculate_keys.<locals>.<setcomp>)r   r*  rp   r   r   )r   r   r   r   r   r   rg   rg   rh   rE  p  s    
zBaseModel._calculate_keys)otherrd   c                 C   s*   t |tr|  | kS |  |kS d S rl   )r   r^   r  )r   rH  rg   rg   rh   __eq__  s    
zBaseModel.__eq__rZ   c                    s    fdd j  D S )Nc                    s8   g | ]0\}}|t vr| jvs, j| jjr||fqS rg   )rC   r   r   reprr   r   rg   rh   
<listcomp>  s    z+BaseModel.__repr_args__.<locals>.<listcomp>rB  r   rg   r   rh   __repr_args__  s    
zBaseModel.__repr_args__)N)FFNNFFF)N)Gr   r   r   r
   r   r   r   r   r-   r   r   r   r   r   r   r   r;   r   r   r   r    r   r   r   r   r   r   r.   r[   r   r   r   rx   __doc__r   r   r   r   r   r   r   r  r  classmethodr  r  r:   r4   r  r   r  r!  r&  r(  r*  r7   r/  r0  r1  r   rF   r  r7  r   rA  rC  r  r   rE  rI  rL  rg   rg   rg   rh   r^   7  sT  

7	

%

-	

 

 	&

I       

> 
)	metaclass)r   __base__r   r   __cls_kwargs__rU   )__model_namer   rP  r   r   rQ  field_definitionsrd   c                K   s   d S rl   rg   rR  r   rP  r   r   rQ  rS  rg   rg   rh   r`     s    r`   )r   r   r   rQ  c                K   s   d S rl   rg   rT  rg   rg   rh   r`     s    )r   rP  r   r   rQ  rx   )	rR  r   rP  r   r   rQ  rx   rS  rd   c                K   sv  |durt dt |dur>|dur,tdt|tsN|f}nttd tf}|pTi }i }i }	|	 D ]\}
}t
|
st d|
 dt t|trz|\}}W q ty } ztd|W Y d}~qd}~0 0 n
d| }}|r||	|
< |||
< qf|	|d}|r|| || |r*t|t|d	< t|}t| ||d
\}}}||urX||d< || || ||fi |S )a  
    Dynamically create a model.
    :param __model_name: name of the created model
    :param __config__: config class to use for the new model
    :param __base__: base class for the new model to inherit from
    :param __module__: module of the created model
    :param __validators__: a dict of method names and @validator class methods
    :param __cls_kwargs__: a dict for class creation
    :param __slots__: Deprecated, `__slots__` should not be passed to `create_model`
    :param field_definitions: fields of the model (or extra fields if a base is supplied)
        in the format `<name>=(<type>, <default default>)` or `<name>=<default value>, e.g.
        `foobar=(str, ...)` or `foobar=123`, or, for complex use-cases, in the format
        `<name>=<Field>` or `<name>=(<type>, <FieldInfo>)`, e.g.
        `foo=Field(datetime, default_factory=datetime.utcnow, alias='bar')` or
        `foo=(str, FieldInfo(title='Foo'))`
    Nz.__slots__ should not be passed to create_modelzBto avoid confusion __config__ and __base__ cannot be used togetherr]   z3fields may not start with an underscore, ignoring "r   zfield definitions should either be a tuple of (<type>, <default>) or just a default value, unfortunately this means tuples as default values are not allowed)r   r   r   )kwds__orig_bases__)r  r  RuntimeWarningr&   r   ro   r   r   r^   r   rJ   rf   r   r"   r    r	   r   )rR  r   rP  r   r   rQ  rx   rS  rc   r   f_nameZf_defZf_annotationZf_valuer   r   resolved_basesmetansrU  rg   rg   rh   r`     sN    








rX   rS   r[   )model
input_datar   rd   c                 C   s  i }g }t  }t  }| j}|jtju}|p,| }	| jD ]^}
z|
|	|}W q4 tttfy } z,i t  t	t
|tdg|	fW  Y d}~  S d}~0 0 q4| j D ]\}}||jt}d}|tu r|jr|jr||jt}d}|tu r.|jr
|t
t |jd q| }|jsV|jsV|||< qn(|| |rV||rN|jn|j |j|||j|	d\}}t|t
r|| qt|tr|| q|||< q|r.t|tr|  | }n|! | }|r.||O }|jtj"u r
|D ]}|| ||< qn$t#|D ]}|t
t$ |d q| j%D ]h\}}
|rL|rLq4z|
|	|}W n> tttfy } z|t
|td W Y d}~n
d}~0 0 q4|r||t	||	fS ||dfS dS )z(
    validate data against a model.
    r   NFTr   )&r   r   r   r!   ignorer   rf   r   r   r%   r$   rD   r   r   r   r$  rF  Zallow_population_by_field_namer#  r   r%  r   r)   r   Zvalidate_allZvalidate_alwaysr   r   r   listextendrF   Z
extra_keysr   r   sortedr(   r   )r\  r]  r   rq   r   Z
names_usedr   r   Zcheck_extraZcls_r   r   r   r   r   Z
using_namer9  Zerrors_r   r   r   rg   rg   rh   ra     sp    
8


,ra   )N)r  abcr   r*  r   enumr   	functoolsr   pathlibr   typesr   r   r	   typingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ztyping_extensionsr   r   r   r   r   r   r   r    r!   r"   r#   Zerror_wrappersr$   r%   r   r&   r'   r(   r)   rc   r*   r+   r,   r-   r.   r/   r0   r1   r  r2   r3   parser4   r5   r6   r/  r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   utilsrC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   inspectrQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   __all__rb   r   ri   r   rs   rt   propertytyperN  r   ru   r   rv   r   rw   objectr   r   r^   r   r`   rF  ra   rg   rg   rg   rh   <module>   s   
H(
(
@, ;    f








M 
