U nf @s<UddlZddlmZddlmZddlmZddlmZddl m Z ddl m Z m Z mZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZdd l m!Z!dd l"m#Z#m$Z$m%Z%m&Z&dd l'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-m.Z.dd l/m0Z0m1Z1m2Z2m3Z3ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;ddlZ>ddl?m@Z@mAZAmBZBddlCmDZDmEZEddlFmGZGmHZHddlImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`er8ddlambZbddl"mcZcddlFmdZdddlImeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmedddZndZoedZpeeqe7fdddd Zreseeegetfd!d"d#ZuevewexeyfZzeed$fe{d%<e fezZ|eed$fe{d&<d'Z}e!d(e6fd)Gd*d+d+eZ~ejZGd,ddeWe~d-Zd(Z}eddeddd.eqeee(deqeeqd/feeqefeedd0d1d2Zededdd3eqeee(eedeedd$ffeqeeqd/feeqefeedd0d4d2Zddedddd5eqeee(ededeedd$ffeqeeqd/feeqefeeeqd$feedd6 d7d2ZeZd>eed8d9ed8d:ee.fd;d/opt/hc_python/lib/python3.8/site-packages/pydantic/v1/main.pyvalidate_custom_root_typeas rh)frozenrbcCsttddd}|r|SdS)N)self_rbcSst|jtt|jSN)hash __class__tuple__dict__values)rjrfrfrg hash_functiongsz-generate_hash_function..hash_function)r int)rirqrfrfrggenerate_hash_functionfsrs.ANNOTATED_FIELD_UNTOUCHED_TYPESUNTOUCHED_TYPESFT)kw_only_defaultfield_specifierscs4eZdZefddZeedfdd ZZS)ModelMetaclassc( shi}t}i}gg}} i} i} |dd} t| tr:| hnt| } t} d}t|D]t}trTt|trT|tkrT| t |j t |j |}t|j|}||j7}| |j7} | |j| |j|j}qTdd}ddt|D}fdd|@D}|d }|r |r td t ||f|}tt||}t|}|D]6}||||j}|rL|j || qLt!||t"t#t$d fd d }|d|dfdkrt%|di|dd}|&D]\}}t'|r| (|nt)|||t*r | (|nt+|rt,||||t*}t-t.|rVt/|n|f}||r|t0krt1dd|Dsqt2j3||||||d||<n||kr|j4rt5| |<qt6|j7|&D]\}}|| ko|| }t|t8r4t9|s*t:d|d|d|d|| |<n|j4r\t9|r\|r\t5|d| |<nt+|r||kr|rt,||t2j3||||t*|||d}||krt;|j<||j<r||j<|_||?|j@r$tAtB|j@}!ntC}!tD|\}"}#|dkrHtE|jF}|| BdhB||dd|&Dptddd|&Dpd|jGtH||"dd d!tH| |#d"d d!itI|!| | | | | B|| d#fd$d|&D}$tJjK||||$f}%tLd%tM|%jN|||%_O|r&|%P|&D]4\}}&||$kr.tQ|&d&d}'tR|'r.|'|%|q.|%S)'N __slots__rfZ__resolve_forward_refs__TcSs$h|]}|dr|ds|qS)__) startswithendswith.0keyrfrfrg s z)ModelMetaclass.__new__..csi|]}||qSrf)popr})kwargsrfrg sz*ModelMetaclass.__new__..ConfigzYSpecifying config in two places is ambiguous, use either Config attribute or class kwargs)vrbcst|p|jjdkS)NZcython_function_or_method) isinstancerm__name__r)untouched_typesrfrg is_untouchedsz,ModelMetaclass.__new__..is_untouched __module__ __qualname__)z pydantic.mainr\__annotations__css|]}tt|tVqdSrk)rJr;r)r~Z allowed_typerfrfrg sz)ModelMetaclass.__new__..)namevalue annotationclass_validatorsconfigzPrivate 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 annotationcSs&i|]\}}|jjdk r||jjqSrk) field_infoexcluder~rfieldrfrfrgrs cSs&i|]\}}|jjdk r||jjqSrk)rincluderrfrfrgrs cSs|jSrkrrrfrfrg z(ModelMetaclass.__new__..)Z name_factorycSs |djS)Nrcr)Zskip_on_failure_and_vrfrfrgrr) __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__csi|]\}}|kr||qSrfrf)r~nr)exclude_from_namespacerfrgrs __signature__ __set_name__)Srgetrstrsetreversed_is_base_model_class_defined issubclassr\updaterLrr!rrrrrrrrrdirkeys TypeErrorrrrpZ set_configZget_validatorsrrZpopulate_validatorsr"rtr boolr?itemsr<addr/r.rHrNr>r;r:r7anyr+ZinferZunderscore_attrs_are_privater-ruZkeep_untouchedr,rI NameErrorrJtype_rBrhZcheck_for_unused json_encodersrr0r1rrsri validatorsrM staticmethodsuper__new__rCrG__init__r__try_update_forward_refs__getattrcallable)(mcsrbases namespacerrarrZpre_root_validatorsZpost_root_validatorsZprivate_attributesZbase_private_attributesslotsZ class_varsZ hash_funcbaseZresolve_forward_refsZallowed_config_kwargsZ config_kwargsZconfig_from_namespacevgfZextra_validatorsr annotationsZann_nameZann_typerZ allowed_typesvar_nameZcan_be_changedinferredZ_custom_root_typeZ json_encoderZ pre_rv_newZ post_rv_newZ new_namespaceclsobjset_namerm)rrrrgrzs$                                        zModelMetaclass.__new__)instancerbcst|dot|S)z| Avoid calling ABC _abc_subclasscheck unless we're pretty sure. See #3829 and python/cpython#92810 r)hasattrr__instancecheck__)selfrrrfrgr*sz ModelMetaclass.__instancecheck__) rrrrrr rr __classcell__rfrfrrgrxxs0rxc @seZdZUer0iZeeeefe d<dZ ee e ee fe d<dZee e ee fe d<iZeeeefe d<eeee d<eeeeefe d<eZeeee d<d d Zeee ge fe d <iZed e d <dZeee d<ede d<eeeefe d<eee d<eZeee d<eZdZ dZ!e ddddZ"e#ddZ$d dddZ%d ddd d!Z&ddd"d#Z'dddddddd$e e(d%e e(d%ee eeeed&d'd(d)Z)ddddddddd*d+ e e(d%e e(d%ee eeeee ee ge fee ed, d-d.Z*e+e e d/d0d1Z,e+ed2e d2d3d4d5Z-e+dd6ddd7ed2e.eee/ed2d8d9d:Z0e+dd6ddd7ed2e(ee1feee/ed2d;dd?Z3e+dred2e d@e d2dAdBdCZ4d2d&d@ed2dDdEdFZ5dddddGd2e e(d%e e(d%e d&ed2dHdIdJZ6e+d*e7feed&dKdLdMZ8e+d*e7dNeee edOdPdQZ9e+dRddSdTZ:e+ed2e d2dUdVdWZ;e+ed2e ee+e dd]d^d_Z?e+e dd]d`daZ@dbddcddZAdseee e(d%e e(d%eeedbdedfdgZBdte dhe dhee d&e eCedidjdkZDe edldmdnZEdoddpdqZFdS)ur\rNrrrrrrcCs|Srkrf)xrfrfrgr@rzBaseModel.rrUrFrrOrrr__fields_set__)ror)datarbc Kspt|j|\}}}|r|zt|d|Wn,tk rV}ztd|W5d}~XYnXt|d||dS)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. rozYModel values must be a dict; you may not have returned a dictionary from a root validatorNr)r_rmobject_setattrr_init_private_attributes)Z__pydantic_self__rrp fields_setvalidation_errorerfrfrgrLs zBaseModel.__init__c sR|jkstkrt||S|jjtjk rT|jkrTtd|j j ddn|jj rd|jj r|t d|j j dnƈ|jkr|jjrt d|j j ddn|jjr8|j|i}|jD]V}z||j |}Wqtt tfk r"}ztt|tdg|j W5d}~XYqXq|jd}|r|jj sVt d|jdfdd |jD}|j|||j d \}}|rt|g|j n||<g} |jD]h\} }| r| rƐqz||j |}Wn<tt tfk r}z| t|tdW5d}~XYnXq| r*t| |j t|d |n ||j<|jdS) N"z" object has no field "z3" is immutable and does not support item assignmentz " object "z2" field is final and does not support reassignmentlocz8" has allow_mutation set to False and cannot be assignedcsi|]\}}|kr||qSrfrfr~krrrfrgr}sz)BaseModel.__setattr__..rrro)rrArrextrar allowrrermrZallow_mutationrirfinalZvalidate_assignmentrorAssertionErrorr$r#rBrrrrvalidaterappendrr) rrr new_values validatorexcZ known_fieldZdict_without_original_valueZerror_errorsskip_on_failurerfrrg __setattr___sN   *  (  zBaseModel.__setattr__)rbcs.fddjD}jjdd|DdS)Nc3s|]}|t|tfVqdSrk)rr.)r~rrrfrgrsz)BaseModel.__getstate__..cSsi|]\}}|tk r||qSrf)r.rrfrfrgrsz*BaseModel.__getstate__..)ror__private_attribute_values__)rror)rZ private_attrsrfrrg __getstate__s  zBaseModel.__getstate__)staterbcCsJt|d|dt|d|d|diD]\}}t|||q0dS)Nrorr)rrr)rrrrrfrfrg __setstate__szBaseModel.__setstate__cCs4|jD]$\}}|}|tk r t|||q dSrk)rr get_defaultr.r)rrZ private_attrrrfrfrgrsz"BaseModel._init_private_attributes)rrby_alias skip_defaults exclude_unsetexclude_defaults exclude_none)rRrWrV)rrrrrrrrbc Cs>|dk r"t|jjdt|}t|jd||||||dS)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"Tto_dictrrrrrr)warningswarnrmrDeprecationWarningdict_iter)rrrrrrrrrfrfrgrs" zBaseModel.dictT) rrrrrrrencodermodels_as_dict) rrrrrrrr r  dumps_kwargsrbc Ks~|dk r"t|jjdt|}tttgtf|p8|j}t |j | ||||||d} |j rf| t } |j j| fd|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"rr)rrrmrrrr r rrrrrBr json_dumps) rrrrrrrrr r r rrfrfrgjsons*  zBaseModel.json)rrbcCsX|jrPt|tr|thks8t|trH|jthkrH|jtjtkrPt|iS|SdSrk) rrrrrBr\rshaper)rrrfrfrg_enforce_dict_if_roots zBaseModel._enforce_dict_if_rootr[)rrrbc Cs||}t|tsvz t|}WnTttfk rt}z2t|jd|jj}tt|t dg||W5d}~XYnX|f|S)Nz expected dict not r) rrrrrerrmr$r#rB)rrrrrfrfrg parse_objs   (zBaseModel.parse_objutf8) content_typeencodingproto allow_pickle)rbrrrrrbc Csdzt||||||jjd}Wn<tttfk rX}ztt|tdg|W5d}~XYnX| |S)Nrrrr json_loadsr) r4rrrerUnicodeDecodeErrorr$r#rBr)rrrrrrrrrfrfrg parse_raws  &zBaseModel.parse_raw)rpathrrrrrbcCs"t||||||jjd}||S)Nr)r3rrr)rrrrrrrrfrfrg parse_file's zBaseModel.parse_filecCsn|jjstd|jrt|in||}||}t||\}}}|rJ|t|d|t|d|| |S)Nz@You must have the config attribute orm_mode=True to use from_ormror) rorm_moder%rrB_decompose_classrr_rr)rrmrprrrfrfrgfrom_orm;s   zBaseModel.from_ormrY)r _fields_setrprbcKs||}i}|jD]P\}}|jr@|j|kr@||j||<q||krV||||<q|js|||<q||t|d||dkrt | }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 roNr) rrr alt_aliasaliasrequiredrrrrrr)rr"rpr Z fields_valuesrrrfrfrg constructIs      zBaseModel.construct)rrprdeeprbcCsp|r t|}|j}||}t|d|t|d||jD]0}t||t}|tk r:|r^t|}t|||q:|S)Nror)rrmrrrrr.)rrprr'rr rrrfrfrg_copy_and_set_valuesas     zBaseModel._copy_and_set_values)rrrr')rrrrr'rbcCsNt|jdd||ddf|pi}|r4|j|B}n t|j}|j|||dS)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)rrrrrr')rrrrrr()rrrrr'rprrfrfrgcopyss zBaseModel.copy)r ref_templaterbcCs<|j||f}|dk r|St|||d}||j||f<|S)Nrr+)rrr6)rrr+cachedsrfrfrgschemas zBaseModel.schemar,)rr+r rbcKs.ddlm}|jj|j||dfd|i|S)Nr)r1r,r)pydantic.v1.jsonr1rr r/)rrr+r r1rfrfrg schema_jsons  zBaseModel.schema_jsonrTccs |jVdSrk)r)rrfrfrg__get_validators__szBaseModel.__get_validators__)rrrbc Cst||rl|jj}d}|dkr2tdt|r2d}|dkr@d}n |dkrLd}|dkrX|S|j|j|j|dS| |}t|t r|f|S|jj r| |Sz t |}Wn.t tfk r}z t|W5d}~XYnX|f|SdS)N>shallownoner'zJ`copy_on_model_validation` should be a string: 'deep', 'shallow' or 'none'Fr3r'Tr))rrcopy_on_model_validationrrrr(rorrrrr!rrer&)rrr5Z deep_copyZ value_as_dictrrfrfrgrs6      zBaseModel.validatecCst|tr|S|j|Srk)rrDrZ getter_dictrrfrfrgrs zBaseModel._decompose_class) rrrrrrrrrbc s t|trFr8|j||d} t| kr4| tS| S|j||dS|rTt||nd|rft||ndt|trfdd|DSt|rfddt|D} t |j r|j | S| | St|t rt j ddr|jS|SdS) N)rrrrrr)rrc s\i|]T\}}r|sr(|r|j|oD|oP|dqS)rrrrrrrZ is_excludedZ is_included _get_value for_element)r~Zk_v_rrrrrr value_exclude value_includerfrgrs      z(BaseModel._get_value..c 3s\|]T\}}r|sr&|rj|o@|oL|dVqdS)r6Nr7)r~ir:r;rfrgr s     z'BaseModel._get_value..Zuse_enum_valuesF)rr\rrBr*rFrrK enumerater=rmrrrr) rrrrrrrrrZv_dictZseq_argsrfr;rgr8s8    zBaseModel._get_value)localnsrbcKs t||j|jj|tfdS)z{ Same as update_forward_refs but will not raise exception when forward references are not defined. N)r@rrprrrrr@rfrfrgr!sz%BaseModel.__try_update_forward_refs__cKst||j|jj|dS)z` Try to update ForwardRefs on fields based on this Model, globalns and localns. N)r@rrprrrArfrfrgupdate_forward_refs)szBaseModel.update_forward_refsrZccs|jEdHdS)z( so `dict(model)` works Nrorrrfrfrg__iter__0szBaseModel.__iter__)rrrrrrrrbc cs|dk s|jdk r t|j|}|dk s2|jdk rDtj|j|dd}|j|||d}|dkr|s|s|s|s|s|jEdHdS|dk rt||nd} |dk rt||nd} |jD]\} } |dk r| |ks|r| dkrq|r|j| } t | ddst | dt | krq|r4| |jkr4|j| j }n| }|sJ| sJ| r||j | ||| ob| | | op| | |||d} || fVqdS)NT)Z intersect)rrrr%rr)rrFmerger_calculate_keysrorrrr_missingr$r8r9)rrrrrrrrZ allowed_keysr<r=Z field_keyrZ model_fieldZdict_keyrfrfrgr6sH    zBaseModel._iterrW)rrrrrbcCsx|dkr|dkr|dkrdS|r,|j}n |j}|dk rJ||M}|rZ||8}|rt|dd|D8}|S)NFcSsh|]\}}t|r|qSrf)rFZis_truerrfrfrgrs z,BaseModel._calculate_keys..)rr*rorr)rrrrrrrfrfrgrFns    zBaseModel._calculate_keys)otherrbcCs*t|tr||kS||kSdSrk)rr\r)rrHrfrfrg__eq__s zBaseModel.__eq__rXcsfddjDS)Ncs8g|]0\}}|tkr|jks,j|jjr||fqSrf)rArrreprrrrfrg s  z+BaseModel.__repr_args__..rCrrfrrg __repr_args__s zBaseModel.__repr_args__)N)FFNNFFF)N)Grrrr rrrrr+rrrrr rrr9rrrrrrrr rrr,rYrrrry__doc__rrrrrrrrr  classmethodrrr8r2rrrr!r&r(r*r5r/r1r2rrDrr8rrBrDrr rFrIrLrfrfrfrgr\6sZ    7    %   -         &  H   = ) metaclass)r__base__rr__cls_kwargs__rS) __model_namerrPrrrQfield_definitionsrbcKsdSrkrfrRrrPrrrQrSrfrfrgr^s r^)rrrrQcKsdSrkrfrTrfrfrgr^s )rrPrrrQry) rRrrPrrrQryrSrbc Ksp|dk rtdt|dk r>|dk r,tdt|tsN|f}nttdtf}|pTi}i}i} | D]\} } t | std| dtt| trz | \} } Wqt k r}ztd|W5d}~XYqXn 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 `=(, )` or `=, e.g. `foobar=(str, ...)` or `foobar=123`, or, for complex use-cases, in the format `=` or `=(, )`, 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 "rzfield definitions should either be a tuple of (, ) or just a default value, unfortunately this means tuples as default values are not allowed)rrr)kwds__orig_bases__)rrRuntimeWarningr%rrnrrr\rrHrerr!rr r)rRrrPrrrQryrSrarf_nameZf_defZ f_annotationZf_valuerrresolved_basesmetansrUrfrfrgr^sN           rVrQrY)model input_datarrbc Csi}g}t}t}|j}|jtjk }|p,|} |jD]`} z| | |}Wq4tttfk r} z(itt t | t dg| fWYSd} ~ XYq4Xq4|j D]\} } || jt}d}|tkr|jr| jr|| jt}d}|tkr0| jr |t t| jdq| }|jsX| jsX||| <qn(|| |rX||rP| jn| j| j||| j| d\}}t|t r||qt|tr||q||| <q|r0t|tr| |}n |!|}|r0||O}|jtj"kr |D]}||||<qn$t#|D]}|t t$|dq|j%D]f\}} |rN|rNq6z| | |}Wn<tttfk r} z|t | t dW5d} ~ XYnXq6|r||t || fS||dfSdS)z( validate data against a model. rNFTr)&rrrr ignorerrerrr$r#rBrrrr$rGZallow_population_by_field_namer#rr%rr(rZ validate_allZvalidate_alwaysrrrlistextendrDZ extra_keysrrsortedr'r)r\r]rrprZ names_usedrrZ check_extraZcls_rrrrrZ using_namer:Zerrors_rrrrfrfrgr_sp  8           (r_)N)rabcrr*renumr functoolsrpathlibrtypesrrr typingr r r r rrrrrrrrrrrrtyping_extensionsrZpydantic.v1.class_validatorsrrrrZpydantic.v1.configrr r!r"Zpydantic.v1.error_wrappersr#r$Zpydantic.v1.errorsr%r&r'r(Zpydantic.v1.fieldsr)r*r+r,r-r.r/r0r0r1Zpydantic.v1.parser2r3r4Zpydantic.v1.schemar5r6Zpydantic.v1.typesr7r8Zpydantic.v1.typingr9r:r;r<r=r>r?r@Zpydantic.v1.utilsrArBrCrDrErFrGrHrIrJrKrLrMrNinspectrOrPrQrRrSrTrUrVrWrXrYrZr[__all__r`rrhrrrrspropertytyperNrrtrrurrxobjectrrr\rr^rGr_rfrfrfrgs     H $ ( @   ,  ;e           M