U
    ¶ÜŸj®  ã                   @   s<  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; d dl<m=Z=m>Z> d dl?m@Z@mAZAmBZB d dlCmDZDmEZE d dlFmGZGmHZH d dlImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` e�r8d dlambZb d dl"mcZc d dlFmdZd d dlImeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZm eddd�ZndZoedƒZpeeqe7f ddœdd „Zreseeegetf  d!œd"d#„ZuevewexeyfZzeed$f e{d%< efez Z|eed$f e{d&< d'Z}e!d(e6fd)�G d*d+„ d+eƒƒZ~ej€Z�G d,d„ deWe~d-�Z‚d(Z}eddeƒddd.œeqeee(  deqeeqd/f eeqef eed d0œd1d2„ƒZ„edeƒddd3œeqeee(  eed eed d$f f eqeeqd/f eeqef eed d0œd4d2„ƒZ„ddeƒdddd5œeqeee(  eded eed d$f f eqeeqd/f eeqef eeeqd$f  eed d6œ	d7d2„Z„eƒ Z…d>ee‚ d8d9ed8d:ee. f d;œd<d=„Z†d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Ú
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 )Né   z" cannot be mixed with other fields)ÚlenÚ
ValueErrorrB   )ra   © rf   ú4/tmp/pip-unpacked-wheel-3sxb4rlg/pydantic/v1/main.pyÚvalidate_custom_root_typea   s    rh   )Úfrozenrb   c                 C   s   t tdœdd„}| r|S d S )N)Úself_rb   c                 S   s   t | jƒt t| j ¡ ƒƒ S ©N)ÚhashÚ	__class__ÚtupleÚ__dict__Úvalues)rj   rf   rf   rg   Úhash_functiong   s    z-generate_hash_function.<locals>.hash_function)r   Úint)ri   rq   rf   rf   rg   Úgenerate_hash_functionf   s    rs   .ÚANNOTATED_FIELD_UNTOUCHED_TYPESÚUNTOUCHED_TYPESFT)Úkw_only_defaultÚfield_specifiersc                       s4   e Zd Ze‡ fdd„ƒZeedœ‡ fdd„Z‡  ZS )ÚModelMetaclassc           (         sh  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|Ž}tt|ƒ|ƒ}t|ƒ}| ¡ D ]6}| |¡ | |j¡}|�rL|j 	|¡ |  ¡  �qLt!||ƒ t"‰t#t$dœ‡fdd„}| d¡| d¡fdk�rðt%| di ¡| dd ¡ƒ}| &¡ D ]ä\}}t'|ƒ�r | (|¡ nÄt)|| |t*¡ƒ�r | (|¡ n¤t+|ƒ�r¨t,||ƒ | |t*¡}t-t.|ƒƒ�rVt/|ƒn|f}||ƒ�rˆ|t0k�rˆt1dd„ |D ƒƒ�sˆ�qât2j3|||| |¡|d�||< n||k�râ|j4�rât5ƒ |
|< �qât6|j7 ‰| &¡ D �]\}}||k�oö||ƒ }t|t8ƒ�r4t9|ƒ�s*t:d|› d|› d|› d�ƒ‚||
|< n¸|j4�r\t9|ƒ�r\|�r\t5|d�|
|< n�t+|ƒ�rÚ||k�rÚ|�rÚt,||ƒ t2j3||| |t*¡| |¡|d�}||k�rät;|j<|| j<ƒ�rÎ|| j<|_<ntd|› d|› d�ƒ‚|||< �qÚt=|k} | �rt>|ƒ | ?¡  |j@�r$tAtB|j@ƒ}!ntC}!tD|ƒ\}"}#|d k�rHtE|jFƒ}||
 ¡ B dhB ‰ ||dd„ | &¡ D ƒ�ptd dd„ | &¡ D ƒ�pŠd |jGtH||" dd „ d!�tH|	|# d"d „ d!�i tI|!ƒ| ||
–||
 ¡ B ||d#œ‡ fd$d„| &¡ D ƒ–}$tJƒ jK| |||$fˆŽ}%tLd%tM|%jN||ƒƒ|%_O|�r&|% P¡  | &¡ D ]4\}}&||$k�r.tQ|&d&d ƒ}'tR|'ƒ�r.|'|%|ƒ �q.|%S )'NÚ	__slots__rf   Z__resolve_forward_refs__Tc                 S   s$   h | ]}|  d ¡r| d ¡s|’qS )Ú__)Ú
startswithÚendswith©Ú.0Úkeyrf   rf   rg   Ú	<setcomp>”   s   
 
þz)ModelMetaclass.__new__.<locals>.<setcomp>c                    s   i | ]}|ˆ   |¡“qS rf   )Úpopr}   )Úkwargsrf   rg   Ú
<dictcomp>™   s      z*ModelMetaclass.__new__.<locals>.<dictcomp>ÚConfigzYSpecifying config in two places is ambiguous, use either Config attribute or class kwargs)Úvrb   c                    s   t | ˆ ƒp| jjdkS )NZcython_function_or_method)Ú
isinstancerm   Ú__name__©r…   )Úuntouched_typesrf   rg   Ú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 rk   )rJ   r;   r   )r~   Zallowed_typerf   rf   rg   Ú	<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 k	r||j j“qS rk   )Ú
field_infoÚexclude©r~   r�   Úfieldrf   rf   rg   rƒ   ÿ   s      c                 S   s&   i | ]\}}|j jd k	r||j j“qS rk   )r–   Úincluder˜   rf   rf   rg   rƒ     s      c                 S   s   | j S rk   ©r‡   rˆ   rf   rf   rg   Ú<lambda>
  ó    z(ModelMetaclass.__new__.<locals>.<lambda>)Zname_factoryc                 S   s
   | d j S )Nrc   r›   )Zskip_on_failure_and_vrf   rf   rg   rœ     r�   )Ú
__config__Ú
__fields__Ú__exclude_fields__Ú__include_fields__Ú__validators__Ú__pre_root_validators__Ú__post_root_validators__Ú__schema_cache__Ú__json_encoder__Ú__custom_root_type__Ú__private_attributes__ry   Ú__hash__Ú__class_vars__c                    s   i | ]\}}|ˆ kr||“qS rf   rf   )r~   Únr…   )Úexclude_from_namespacerf   rg   rƒ     s       Ú__signature__Ú__set_name__)Sr   Úgetr†   ÚstrÚsetÚreversedÚ_is_base_model_class_definedÚ
issubclassr\   ÚupdaterL   rŸ   r!   rž   r   r¢   r£   r¤   r¨   rª   r©   r�   ÚdirÚkeysÚ	TypeErrorr   r   rp   Z
set_configZget_validatorsr�   r’   Zpopulate_validatorsr"   rt   r   Úboolr?   Úitemsr<   Úaddr/   r.   rH   rN   r>   r;   r:   r7   Úanyr+   ZinferZunderscore_attrs_are_privater-   ru   Zkeep_untouchedr,   rI   Ú	NameErrorrJ   Útype_rB   rh   Zcheck_for_unusedÚjson_encodersr   r0   r1   r   rs   ri   Ú
validatorsrM   ÚstaticmethodÚsuperÚ__new__rC   rG   Ú__init__r­   Ú__try_update_forward_refs__ÚgetattrÚcallable)(Zmcsr�   ÚbasesÚ	namespacer‚   ra   r“   rÀ   Zpre_root_validatorsZpost_root_validatorsZprivate_attributesZbase_private_attributesÚslotsZ
class_varsZ	hash_funcÚbaseZresolve_forward_refsZallowed_config_kwargsZconfig_kwargsZconfig_from_namespaceZvgÚfZextra_validatorsrŠ   ÚannotationsZann_nameÚ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©rm   )r¬   r‚   r‰   rg   rÃ   z   s$   


þ





ÿþÿýû

ÿ


û
ÿ

ÿÿþþ
æå

zModelMetaclass.__new__)Úinstancerb   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Ô   rf   rg   r×   *  s    z ModelMetaclass.__instancecheck__)	r‡   r‹   rŒ   r   rÃ   r   r¹   r×   Ú__classcell__rf   rf   rÔ   rg   rx   x   s    0rx   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 rk   rf   )Úxrf   rf   rg   rœ   @  r�   zBaseModel.<lambda>r¦   rU   r¥   Fr§   rO   r­   r¨   rª   Ú__fields_set__)ro   rÛ   Ú )Údatarb   c              
   K   sp   t | j|ƒ\}}}|r|‚zt| d|ƒ W n, tk
rV } ztdƒ|‚W 5 d}~X Y nX 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.
        ro   zYModel values must be a dict; you may not have returned a dictionary from a root validatorNrÛ   )r_   rm   Úobject_setattrr¸   Ú_init_private_attributes)Z__pydantic_self__rÝ   rp   Ú
fields_setÚvalidation_errorÚerf   rf   rg   rÄ   L  s    ÿþzBaseModel.__init__c                    sR  ˆ | j ksˆ tkrt| ˆ |ƒS | jjtjk	rTˆ | jkrTtd| j	j
› dˆ › d�ƒ‚�nî| jjrd| jjr|td| j	j
› d�ƒ‚�nÆˆ | jkr°| jˆ  jr°td| j	j
› dˆ › d�ƒ‚�n’| jj�r8| jˆ |i–}| jD ]V}z|| j	|ƒ}W qÎ tttfk
�r" } ztt|td�g| j	ƒ‚W 5 d }~X Y qÎX qÎ| j ˆ d ¡}|�r¤|jj�sVtd|j› d�ƒ‚‡ fdd	„| j ¡ D ƒ}|j||ˆ | j	d
�\}}|�rœt|g| j	ƒ‚n||ˆ < g }	| jD ]h\}
}|
�rÆ|	�rÆ�q®z|| j	|ƒ}W n< tttfk
�r } z|	 t|td�¡ W 5 d }~X Y nX �q®|	�r*t|	| 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 rf   rf   ©r~   Úkr…   ©r�   rf   rg   rƒ   }  s       z)BaseModel.__setattr__.<locals>.<dictcomp>©rå   rÑ   ro   )r¨   rA   rÞ   rž   Úextrar    ÚallowrŸ   re   rm   r‡   Zallow_mutationri   r¸   ÚfinalZvalidate_assignmentro   r£   ÚAssertionErrorr$   r#   rB   r¯   r–   r�   rº   Úvalidater¤   ÚappendrÛ   r»   )rØ   r�   r�   Z
new_valuesÚ	validatorÚexcZknown_fieldZdict_without_original_valueZerror_ÚerrorsÚskip_on_failurerf   rè   rg   Ú__setattr___  sN    ÿ

*
(
zBaseModel.__setattr__)rb   c                    s.   ‡ fdd„ˆ j D ƒ}ˆ jˆ jdd„ |D ƒdœS )Nc                 3   s   | ]}|t ˆ |tƒfV  qd S rk   )rÆ   r.   )r~   rç   ©rØ   rf   rg   rŽ   ˜  s     z)BaseModel.__getstate__.<locals>.<genexpr>c                 S   s   i | ]\}}|t k	r||“qS rf   )r.   ræ   rf   rf   rg   rƒ   œ  s       z*BaseModel.__getstate__.<locals>.<dictcomp>)ro   rÛ   Ú__private_attribute_values__)r¨   ro   rÛ   )rØ   Zprivate_attrsrf   rõ   rg   Ú__getstate__—  s
    ýzBaseModel.__getstate__)Ústaterb   c                 C   sJ   t | d|d ƒ t | d|d ƒ | di ¡ ¡ D ]\}}t | ||ƒ q0d S )Nro   rÛ   rö   )rÞ   r¯   rº   )rØ   rø   r�   r�   rf   rf   rg   Ú__setstate__Ÿ  s    zBaseModel.__setstate__c                 C   s4   | j  ¡ D ]$\}}| ¡ }|tk	r
t| ||ƒ q
d S rk   )r¨   rº   Úget_defaultr.   rÞ   )rØ   r�   Zprivate_attrr”   rf   rf   rg   rß   ¥  s    z"BaseModel._init_private_attributes)rš   r—   Úby_aliasÚskip_defaultsÚexclude_unsetÚexclude_defaultsÚexclude_none)rR   rW   rV   )rš   r—   rû   rü   rý   rþ   rÿ   rb   c             
   C   s>   |dk	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Úwarnrm   r‡   ÚDeprecationWarningÚdictÚ_iter)rØ   rš   r—   rû   rü   rý   rþ   rÿ   rf   rf   rg   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_kwargsrb   c       	      
   K   s~   |dk	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  rm   r‡   r  r   r   r   r¦   r  r  r§   rB   rž   Ú
json_dumps)rØ   rš   r—   rû   rü   rý   rþ   rÿ   r  r  r	  rÝ   rf   rf   rg   ÚjsonÍ  s*    þùÿzBaseModel.json)rÒ   rb   c                 C   sX   | j rPt|tƒr| ¡ thks8t|tƒrH|j ¡ thkrH| jt jtkrPt|iS |S d S rk   )	r§   r†   r  r·   rB   r\   rŸ   Úshaper)   ©rÑ   rÒ   rf   rf   rg   Ú_enforce_dict_if_rootú  s    ÿÿþþýzBaseModel._enforce_dict_if_rootr[   )rÑ   rÒ   rb   c              
   C   s€   |   |¡}t|tƒsvzt|ƒ}W nT ttfk
rt } z2t| j› d|jj› �ƒ}tt|t	d�g| ƒ|‚W 5 d }~X Y nX | f |ŽS )Nz expected dict not rä   )
r  r†   r  r¸   re   r‡   rm   r$   r#   rB   )rÑ   rÒ   râ   rñ   rf   rf   rg   Ú	parse_obj  s    

(zBaseModel.parse_objÚutf8)Úcontent_typeÚencodingÚprotoÚallow_pickle)rÑ   Úbr  r  r  r  rb   c             
   C   sd   zt |||||| jjd�}W n< tttfk
rX } ztt|td�g| ƒ‚W 5 d }~X Y nX |  	|¡S )N©r  r  r  r  Ú
json_loadsrä   )
r4   rž   r  re   r¸   ÚUnicodeDecodeErrorr$   r#   rB   r  )rÑ   r  r  r  r  r  rÒ   râ   rf   rf   rg   Ú	parse_raw  s    
ú
&zBaseModel.parse_raw)rÑ   Úpathr  r  r  r  rb   c                C   s"   t |||||| jjd�}|  |¡S )Nr  )r3   rž   r  r  )rÑ   r  r  r  r  r  rÒ   rf   rf   rg   Ú
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_ormro   rÛ   )
rž   Úorm_moder%   r§   rB   Ú_decompose_classrÃ   r_   rÞ   rß   )rÑ   rÒ   Úmrp   rà   rá   rf   rf   rg   Úfrom_orm;  s    
zBaseModel.from_ormrY   )rÑ   Ú_fields_setrp   rb   c                 K   s¬   |   | ¡}i }| j ¡ D ]P\}}|jr@|j|kr@||j ||< q||krV|| ||< q|js| ¡ ||< q| |¡ t|d|ƒ |dkr”t	| 
¡ ƒ}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
        ro   NrÛ   )rÃ   rŸ   rº   Ú	alt_aliasÚaliasÚrequiredrú   rµ   rÞ   r±   r·   rß   )rÑ   r   rp   r  Zfields_valuesr�   r™   rf   rf   rg   Ú	constructI  s     

zBaseModel.construct)rØ   rp   rà   Údeeprb   c                C   sp   |rt |ƒ}| j}| |¡}t|d|ƒ t|d|ƒ | jD ]0}t| |tƒ}|tk	r:|r^t |ƒ}t|||ƒ q:|S )Nro   rÛ   )r   rm   rÃ   rÞ   r¨   rÆ   r.   )rØ   rp   rà   r%  rÑ   r  r�   r�   rf   rf   rg   Ú_copy_and_set_valuesa  s    

zBaseModel._copy_and_set_values)rš   r—   rµ   r%  )rØ   rš   r—   rµ   r%  rb   c                C   sN   t | jdd||dd�f|pi Ž}|r4| 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%  rp   rà   rf   rf   rg   Úcopys  s    ÿþ
zBaseModel.copy)rû   Úref_templaterb   c                 C   s<   | j  ||f¡}|d k	r|S t| ||d�}|| j ||f< |S )N©rû   r)  )r¥   r¯   r6   )rÑ   rû   r)  ÚcachedÚsrf   rf   rg   Úschema“  s    zBaseModel.schemar*  )rû   r)  r	  rb   c                K   s.   ddl m} | jj| j||d�fd|i|—ŽS )Nr   )r1   r*  r”   )Úpydantic.v1.jsonr1   rž   r
  r-  )rÑ   rû   r)  r	  r1   rf   rf   rg   Úschema_jsonœ  s    ÿÿÿzBaseModel.schema_jsonrT   c                 c   s   | j V  d S rk   )rî   )rÑ   rf   rf   rg   Ú__get_validators__¦  s    zBaseModel.__get_validators__)rÑ   r�   rb   c              
   C   sæ   t || ƒrl| jj}d }|dkr2t dt¡ |r2d}|dkr@d}n|dkrLd}|d krX|S |j|j|j|d�S |  	|¡}t |t
ƒrŠ| f |ŽS | jjrœ|  |¡S zt
|ƒ}W n. ttfk
rÖ } ztƒ |‚W 5 d }~X Y nX | f |ŽS d S )N>   ÚnoneÚshallowr%  zJ`copy_on_model_validation` should be a string: 'deep', 'shallow' or 'none'Fr2  r%  Tr'  )r†   rž   Úcopy_on_model_validationr  r  r  r&  ro   rÛ   r  r  r  r  r¸   re   r&   )rÑ   r�   r3  Z	deep_copyZvalue_as_dictrâ   rf   rf   rg   rî   ª  s6    
 ÿ



zBaseModel.validatec                 C   s   t |tƒr|S | j |¡S rk   )r†   rD   rž   Zgetter_dictr  rf   rf   rg   r  Ñ  s    
zBaseModel._decompose_class)	r…   r  rû   rš   r—   rý   rþ   rÿ   rb   c	                    s  t |tƒrFˆr8|jˆ ˆˆ||ˆd�}	t|	k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_includerf   rg   rƒ   ø  s     
 
ô øz(BaseModel._get_value.<locals>.<dictcomp>c                 3   s\   | ]T\}}ˆrˆ  |¡sˆr&ˆ |¡rˆj|ˆˆ ˆˆˆo@ˆ |¡ˆoLˆ |¡ˆd �V  qdS )r4  Nr5  )r~   Úir8  r9  rf   rg   rŽ   	  s    
 
ôøz'BaseModel._get_value.<locals>.<genexpr>Zuse_enum_valuesF)r†   r\   r  rB   r(  rF   rº   rK   Ú	enumerater=   rm   r   rÆ   r„   r�   )rÑ   r…   r  rû   rš   r—   rý   rþ   rÿ   Zv_dictZseq_argsrf   r9  rg   r6  ×  s8    
ú
õõzBaseModel._get_value)Úlocalnsrb   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)r@   rŸ   rp   rž   r¿   r½   ©rÑ   r>  rf   rf   rg   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)r@   rŸ   rp   rž   r¿   r?  rf   rf   rg   Úupdate_forward_refs)  s    zBaseModel.update_forward_refsrZ   c                 c   s   | j  ¡ E dH  dS )z(
        so `dict(model)` works
        N©ro   rº   rõ   rf   rf   rg   Ú__iter__0  s    zBaseModel.__iter__)r  rû   rš   r—   rý   rþ   rÿ   rb   c                 c   sŒ  |d k	s| j d k	r t | j |¡}|d k	s2| jd k	rDtj| j|dd�}| j|||d�}|d kr„|s„|s„|s„|s„|s„| j ¡ E d H  d S |d k	r–t| |ƒnd }	|d k	r¬t| |ƒnd }
| j ¡ D ]Ì\}}|d k	rÒ||ksº|rà|d kràqº|�r| j |¡}t	|ddƒ�st	|dt
ƒ|k�rqº|�r4|| jk�r4| j| j}n|}|�sJ|
�sJ|	�r|| j||||
�ob|
 |¡|	�op|	 |¡|||d�}||fV  qºd S )NT)Z	intersect)rš   r—   rý   r#  r”   r   )r    rF   Úmerger¡   Ú_calculate_keysro   rº   rŸ   r¯   rÆ   Ú_missingr"  r6  r7  )rØ   r  rû   rš   r—   rý   rþ   rÿ   Zallowed_keysr:  r;  Z	field_keyr…   Zmodel_fieldZdict_keyrf   rf   rg   r  6  sH      ÿ ø
zBaseModel._iterrW   )rš   r—   rý   rµ   rb   c                 C   sx   |d kr|d kr|dkrd S |r,| j  ¡ }n
| j ¡ }|d k	rJ|| ¡ M }|rZ|| ¡ 8 }|rt|dd„ | ¡ D ƒ8 }|S )NFc                 S   s   h | ]\}}t  |¡r|’qS rf   )rF   Zis_trueræ   rf   rf   rg   r€   …  s     
 z,BaseModel._calculate_keys.<locals>.<setcomp>)rÛ   r(  ro   r·   rº   )rØ   rš   r—   rý   rµ   r·   rf   rf   rg   rD  n  s    
zBaseModel._calculate_keys)Úotherrb   c                 C   s*   t |tƒr|  ¡ | ¡ kS |  ¡ |kS d S rk   )r†   r\   r  )rØ   rF  rf   rf   rg   Ú__eq__‰  s    
zBaseModel.__eq__rX   c                    s   ‡ fdd„ˆ j  ¡ D ƒS )Nc                    s8   g | ]0\}}|t kr|ˆ jks,ˆ j| jjr||f‘qS rf   )rA   rŸ   r–   Úreprræ   rõ   rf   rg   Ú
<listcomp>�  s
    
 þz+BaseModel.__repr_args__.<locals>.<listcomp>rA  rõ   rf   rõ   rg   Ú__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¢   r9   r   r   r¹   r   rž   r   r¦   r   r¥   r§   r,   rY   r±   rÛ   r„   ry   Ú__doc__rÄ   r   rô   r÷   rù   rß   r   r  r  Úclassmethodr  r  r8   r2   r  r   r  r  r$  r&  r(  r5   r-  r/  r0  rî   rD   r  r6  rÅ   r@  rB  r  r   rD  rG  rJ  rf   rf   rf   rg   r\   6  sZ  

7	÷

ö%õ

ó-

ùøù
ø ú

ù  ÿ  þ	&

öH       ø

÷= û
ú)Ú	metaclass)rž   Ú__base__r‹   r¢   Ú__cls_kwargs__rS   )Ú__model_namerž   rN  r‹   r¢   rO  Úfield_definitionsrb   c                K   s   d S rk   rf   ©rP  rž   rN  r‹   r¢   rO  rQ  rf   rf   rg   r^   š  s    r^   )rž   r‹   r¢   rO  c                K   s   d S rk   rf   rR  rf   rf   rg   r^   ¨  s    )rž   rN  r‹   r¢   rO  ry   )	rP  rž   rN  r‹   r¢   rO  ry   rQ  rb   c                K   sp  |dk	rt  dt¡ |dk	r>|dk	r,tdƒ‚t|tƒsN|f}nttd tƒf}|pTi }i }i }	| 	¡ D ]ˆ\}
}t
|
ƒsŠt  d|
› d�t¡ t|tƒrÐz|\}}W qÚ tk
rÌ } ztdƒ|‚W 5 d}~X Y qÚX n
d| }}|ræ||	|
< |||
< qf|	|dœ}|�r
| |¡ | |¡ |�r(t|tƒ|d	< t|ƒ}t| ||d
�\}}}||k	�rV||d< | |¡ || ||f|Ž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ã   zœfield 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†   rn   r   r   r\   rº   rH   re   rµ   r!   r   r	   r   )rP  rž   rN  r‹   r¢   rO  ry   rQ  ra   rÍ   Úf_nameZf_defZf_annotationZf_valuerâ   rÉ   Úresolved_basesÚmetaÚnsrS  rf   rf   rg   r^   ¶  sN    

ÿü






rV   rQ   rY   )ÚmodelÚ
input_datarÑ   rb   c                 C   sÂ  i }g }t ƒ }t ƒ }| j}|jtjk	}|p,| }	| jD ]`}
z|
|	|ƒ}W q4 tttfk
r’ } z(i t ƒ t	t
|td�g|	ƒf W Y ¢  S d}~X Y q4X q4| j ¡ D �]\}}| |jt¡}d}|tkrâ|jrâ|jrâ| |jt¡}d}|tk�r0|j�r| t
tƒ |jd�¡ q | ¡ }|j�sX|j�sX|||< q n(| |¡ |�rX| |�rP|jn|j¡ |j|||j|	d�\}}t|t
ƒ�rˆ| |¡ q t|tƒ�r | |¡ q |||< q |�r0t|tƒ�rÊ|  ¡ | }n| !¡ | }|�r0||O }|jtj"k�r|D ]}|| ||< �qön$t#|ƒD ]}| t
t$ƒ |d�¡ �q| j%D ]f\}}
|�rN|�rN�q6z|
|	|ƒ}W n< tttfk
�r˜ } z| t
|td�¡ W 5 d}~X Y nX �q6|�r´||t	||	ƒfS ||dfS dS )z(
    validate data against a model.
    rä   NFTré   )&r±   rž   rê   r    Úignorer£   re   r¸   rí   r$   r#   rB   rŸ   rº   r¯   r"  rE  Zallow_population_by_field_namer!  r�   r#  rï   r(   rú   Zvalidate_allZvalidate_alwaysr»   rî   r†   ÚlistÚextendrD   Z
extra_keysr·   rë   Úsortedr'   r¤   )rZ  r[  rÑ   rp   rò   Z
names_usedrà   r“   Zcheck_extraZcls_rð   rñ   r�   r™   r�   Z
using_namer8  Zerrors_rê   rÌ   ró   rf   rf   rg   r_     sp    
8


(r_   )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   Útyping_extensionsr   Zpydantic.v1.class_validatorsr   r   r   r   Zpydantic.v1.configr   r    r!   r"   Zpydantic.v1.error_wrappersr#   r$   Zpydantic.v1.errorsr%   r&   r'   r(   Zpydantic.v1.fieldsr)   r*   r+   r,   r-   r.   r/   r.  r0   r1   Zpydantic.v1.parser2   r3   r4   Zpydantic.v1.schemar5   r6   Zpydantic.v1.typesr7   r8   Zpydantic.v1.typingr9   r:   r;   r<   r=   r>   r?   r@   Zpydantic.v1.utilsrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   ÚinspectrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   Ú__all__r`   r°   rh   r¹   rr   rs   ÚpropertyÚtyperL  rÁ   rt   r�   ru   r³   rx   Úobjectrô   rÞ   r\   r‡   r^   rE  r_   rf   rf   rf   rg   Ú<module>   sÆ    H$	(
@, ;    eù


÷ù


÷ø


öM ÿ  þ