U nf@sUddlZddlZddlmZmZmZddlmZm Z m Z ddl mZmZmZmZmZmZmZmZmZm Z mZmZmZmZmZmZmZmZmZmZm Z ddl!m"Z"m#Z#ddl$m%Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,dd l-m.Z.m/Z/m0Z0m1Z1dd l2m3Z3m4Z4dd l5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBdd lCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLdd lMmNZNmOZOmPZPmQZQeRZSeeTd<edZUGdddZVeVZWer(ddl'mXZXddlYmZZZddl+m[Z[ddl2m\Z\ddl5m]Z]m^Z^m_Z_eeeee[fZ`e ee eaebfdfebfZce edeVfZeGdddeEZfeWfdddddddddddddddddddddddddeee6eebeebeebee ddefee ddefeedeegeegeegeegeegeedeeaeeaeeaeeaeedeeaeeaedeebeebedeeddd Zhd!Zid"Zjd#Zkd$Zld%Zmd&Znd'Zod(Zpd)Zqd*Zrd+Zsd,Ztd-Zud.Zvejd/ekd0end1eod2epd3eqd4esd5etd6eud7evd8i ZweuetelevhZxeeaeTd9<Gd:d;d;eEZyGdeee6ed?d@dAZ{GdBdCdCZ|eeeeddDdEdFZ}dS)GN)Counter defaultdictdeque)CallableHashableIterable) TYPE_CHECKINGAnyr DefaultDictDequeDict ForwardRef FrozenSet GeneratorrIteratorListMappingOptionalPatternSequenceSetTupleTypeTypeVarUnion) AnnotatedFinal)errors) Validatormake_generic_validatorprep_validators) ErrorWrapper) ConfigErrorInvalidDiscriminatorMissingDiscriminatorNoneIsNotAllowedError)Json JsonWrapper) NoArgAnyCallableconvert_genericsdisplay_as_typeget_args get_origin is_finalvaris_literal_type is_new_type is_none_type is_typeddictis_typeddict_specialis_unionnew_type_supertype) PyObjectStrRepresentation ValueItems"get_discriminator_alias_and_valuesget_unique_discriminator_aliaslenient_isinstancelenient_issubclass sequence_likesmart_deepcopy)constant_validatordict_validatorfind_validators validate_jsonRequiredTc@sJeZdZedddZeedddZedddZeeed d d Z d S) UndefinedTypereturncCsdS)NZPydanticUndefinedselfrGrG@/opt/hc_python/lib/python3.8/site-packages/pydantic/v1/fields.py__repr__FszUndefinedType.__repr__)rIrFcCs|SNrGrHrGrGrJ__copy__IszUndefinedType.__copy__cCsdS)N UndefinedrGrHrGrGrJ __reduce__LszUndefinedType.__reduce__)rI_rFcCs|SrLrG)rIrPrGrGrJ __deepcopy__OszUndefinedType.__deepcopy__N) __name__ __module__ __qualname__strrKrCrMrOr rQrGrGrGrJrDEsrD)ValidatorsList) BaseConfig) ErrorList) ModelOrDc)AbstractSetIntStrMappingIntStrAnyReprArgs.c@seZdZdZdZddddddddddddddddZefeeddddZd d d d Z e e d d dZ e e efddddZdd ddZdS) FieldInfoz3 Captures extra information about a field. )defaultdefault_factoryaliasalias_prioritytitle descriptionexcludeincludeconstgtgeltle multiple_of allow_inf_nan max_digitsdecimal_places min_items max_items unique_items min_length max_lengthallow_mutationreprregex discriminatorextraNT)rrrsrvrgrirhrjrkrlrmrnrorprqrt)r^kwargsrFcKs|||_|dd|_|dd|_|d|jdk r6dnd|_|dd|_|dd|_|dd|_|dd|_|d d|_ |d d|_ |d d|_ |d d|_ |d d|_ |dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_||_dS)Nr_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtTrvrwru)r^popr_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrvrwrurx)rIr^ryrGrGrJ__init__s6zFieldInfo.__init__r\rEcs4ddijfddjD}fdd|DS)NruTc3s|]}|t|fVqdSrLgetattr).0srHrGrJ sz*FieldInfo.__repr_args__..cs(g|] \}}||dkr||fqSrL)get)rav)field_defaults_to_hiderGrJ sz+FieldInfo.__repr_args__..)__field_constraints__ __slots__)rIattrsrG)rrIrJ __repr_args__szFieldInfo.__repr_args__csfddjDS)z Gets the constraints set on the field by comparing the constraint value with its default value :return: the constraints set on field_info cs"h|]\}}t||kr|qSrGr})rattrr^rHrGrJ sz,FieldInfo.get_constraints..)ritemsrHrGrHrJget_constraintsszFieldInfo.get_constraints) from_configrFc Cs|D]\}}zt||}Wn"tk r@|j||YqX||j|dkrbt|||q|dkrzt |||_ q|dkrtj ||dd|_ qdS)z{ Update this FieldInfo based on a dict from get_field_info, only fields which have not been set are dated. NrdreTZ intersect) rr~AttributeErrorrx setdefaultrrsetattrr7mergerdre)rIr attr_namevalue current_valuerGrGrJupdate_from_configszFieldInfo.update_from_configcCs |jtk r|jdk rtddS)N/cannot specify both default and default_factory)r^rNr_ ValueErrorrHrGrGrJ _validateszFieldInfo._validate)rRrSrT__doc__rrrNr r|rrrUrr rrrGrGrGrJr]as.  r]Tr_r`rbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrvrwrurZr[)r^r_r`rbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrvrwrurxrFcKsNt|f||||||||| | | | | |||||||||||d|}||S)u Used to provide extra information about a field, either for the model schema or complex validation. Some arguments apply only to number fields (``int``, ``float``, ``Decimal``) and some apply only to ``str``. :param default: since this is replacing the field’s default, its first argument is used to set the default, use ellipsis (``...``) to indicate the field is required :param default_factory: callable that will be called when a default value is needed for this field If both `default` and `default_factory` are set, an error is raised. :param alias: the public name of the field :param title: can be any string, used in the schema :param description: can be any string, used in the schema :param exclude: exclude this field while dumping. Takes same values as the ``include`` and ``exclude`` arguments on the ``.dict`` method. :param include: include this field while dumping. Takes same values as the ``include`` and ``exclude`` arguments on the ``.dict`` method. :param const: this field is required and *must* take it's default value :param gt: only applies to numbers, requires the field to be "greater than". The schema will have an ``exclusiveMinimum`` validation keyword :param ge: only applies to numbers, requires the field to be "greater than or equal to". The schema will have a ``minimum`` validation keyword :param lt: only applies to numbers, requires the field to be "less than". The schema will have an ``exclusiveMaximum`` validation keyword :param le: only applies to numbers, requires the field to be "less than or equal to". The schema will have a ``maximum`` validation keyword :param multiple_of: only applies to numbers, requires the field to be "a multiple of". The schema will have a ``multipleOf`` validation keyword :param allow_inf_nan: only applies to numbers, allows the field to be NaN or infinity (+inf or -inf), which is a valid Python float. Default True, set to False for compatibility with JSON. :param max_digits: only applies to Decimals, requires the field to have a maximum number of digits within the decimal. It does not include a zero before the decimal point or trailing decimal zeroes. :param decimal_places: only applies to Decimals, requires the field to have at most a number of decimal places allowed. It does not include trailing decimal zeroes. :param min_items: only applies to lists, requires the field to have a minimum number of elements. The schema will have a ``minItems`` validation keyword :param max_items: only applies to lists, requires the field to have a maximum number of elements. The schema will have a ``maxItems`` validation keyword :param unique_items: only applies to lists, requires the field not to have duplicated elements. The schema will have a ``uniqueItems`` validation keyword :param min_length: only applies to strings, requires the field to have a minimum length. The schema will have a ``minLength`` validation keyword :param max_length: only applies to strings, requires the field to have a maximum length. The schema will have a ``maxLength`` validation keyword :param allow_mutation: a boolean which defaults to True. When False, the field raises a TypeError if the field is assigned on an instance. The BaseModel Config must set validate_assignment to True :param regex: only applies to strings, requires the field match against a regular expression pattern string. The schema will have a ``pattern`` validation keyword :param discriminator: only useful with a (discriminated a.k.a. tagged) `Union` of sub models with a common field. The `discriminator` is the name of this common field to shorten validation and improve generated schema :param repr: show this field in the representation :param **extra: any additional keyword arguments will be added as is to the schema r)r]r)r^r_r`rbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrvrwrurx field_inforGrGrJFields@Prrz zList[{}]zSet[{}]zTuple[{}, ...]z Sequence[{}]z FrozenSet[{}]z Iterable[{}]z Deque[{}]zDict[{}]zDefaultDict[{}]z Counter[{}]MAPPING_LIKE_SHAPESc @seZdZdZddeddddeeeee ee fedeee de eeee dd dd Zed d d Zeeeeedee efd ddZeeeeee ee fedddddZedddddZee d ddZdd ddZdd ddZdd ddZdd ddZdd eeee dd!d"d#Zdd d$d%Zdd&ee eefd'ed(d)d*d+d,Zee eefd'ed(d)d*d-d.Zee eefd'ed(d)d*d/d0Z ee eefd'ed(d)d*d1d2Z!ee eefd'ed(d)d*d3d4Z"e#e eefe$e#e eeffd5d6d7Z%ee eefd'ed(d)d*d8d9Z&ee eefd'ed(d)d*d:d;Z'ee eefd'ed(dd?Z(e d d@dAZ)e*d dBdCZ+dDd dEdFZ,dS)G ModelField)type_ outer_type_ annotation sub_fieldssub_fields_mapping key_field validatorspre_validatorspost_validatorsr^r_requiredfinal model_confignamer` has_aliasrdiscriminator_keydiscriminator_aliasvalidate_always allow_noneshapeclass_validators parse_jsonNF)r^r_rrr`rrW BoolUndefined) rrrrr^r_rrr`rrFc Cs||_| dk |_| dk r| n||_||_t||_||_|p>i|_||_||_ ||_ ||_ ||_ | pjt ||_|jj|_|j|_d|_d|_d|_d|_d|_g|_d|_d|_d|_t|_|j ||dS)NF)rrr`rr)rrrr^r_rrrr]rrwrrrrrrrrrrrSHAPE_SINGLETONr prepare_fieldprepare) rIrrrrr^r_rrr`rrGrGrJr|s6     zModelField.__init__rEcCs|jdkrt|jS|SrLr_r=r^rHrGrGrJ get_defaultszModelField.get_default) field_namerrconfigrFcCs||}d}t|tkrddt|ddD}t|dkrNtd|tt|d}|dk rt|}| ||j t t fkrtd||t k r|t k r||_ t |tr|dk rtd||}| |n|dkrt|f|}|jdk rdn|j }|||fS)a~ Get a FieldInfo from a root typing.Annotated annotation, value, or config default. The FieldInfo may be set in typing.Annotated or the value, but not both. If neither contain a FieldInfo, a new one will be created using the config. :param field_name: name of the field for use in error messages :param annotation: a type hint such as `str` or `Annotated[str, Field(..., min_length=5)]` :param value: the field's assigned value :param config: the model's config object :return: the FieldInfo contained in the `annotation`, the value, or a new one from the config. NcSsg|]}t|tr|qSrG) isinstancer])rargrGrGrJrs z.ModelField._get_field_info..rz1cannot specify multiple `Annotated` `Field`s for z1`Field` default cannot be set in `Annotated` for z;cannot specify `Annotated` and value `Field`s together for )get_field_infor,rr+lenrnextitercopyrr^rNrBrr]r_r)rrrrZfield_info_from_configrZ field_infosrGrGrJ_get_field_infos0        zModelField._get_field_info)rrrrrrFc Cspddlm}|||||\}}t}|tkr6d}d}n |tk rBd}|||||j}||||j|||j|||d S)Nr)get_annotation_from_field_infoTF) rrr`rr^r_rrr)Zpydantic.v1.schemarrrNrBZvalidate_assignmentr`r_) clsrrrrrrrrrGrGrJinfers( zModelField.infer)rrFcCs||_||j}|||d}|dp2d}|r^||jjpDdkr^||j_||j_||_|d}|dk rt |jj ||j_ |d}|dk rtj |jj |dd|j_ dS)Nr`rarrdreTr) rrrrrrrar`r7rrdre)rIrZinfo_from_configZ new_aliasZnew_alias_priorityZ new_excludeZ new_includerGrGrJ set_configs     zModelField.set_configcCs |j|jkSrL)rr`rHrGrGrJ alt_aliasszModelField.alt_aliascCsb||jjtks |jjtkr$dS||jtkrrtjd_t?_-n|t@ks|tAkrj/tjddj0dd_Btjd_tC_-nnt*|tDr2j/tjddj0dd_Btjd_tE_-n&t*|tFrnj/tjddj0dd_BtG_tH_-nt*|tIrj/tjddj0dd_Btjd_tJ_-n|tKtLhkrtjd_tM_-/jj0dg_(ndt*|tNrdStO|d sjPjQrHtR_-fddt2tjD_(|_dSt d|d/jdj0g_(dS)NTFrzM`discriminator` can only be used with `Union` type with more than one variantrc s(g|] }|jdt|qSrP)_create_sub_typerr*)rtrHrGrJrsz-ModelField._type_analysis..rzZ_0)rGcs(g|] \}}|jd|qSrrrrirrHrGrJrs__get_validators__cSs$i|]\}}d|t|ddqS)list_Tprerrr validatorrGrGrJ sz-ModelField._type_analysis..cSs$i|]\}}d|t|ddqS)set_TrrrrGrGrJrscSs$i|]\}}d|t|ddqS)Z frozenset_TrrrrGrGrJrskey_for_keys_typecs(g|] \}}|jd|qSrrrrHrGrJrszFields of type "z" are not supported.rP)Sr;rr'Z inner_typerr&r rr __bound____constraints__rr/r4objectrrNrrrer.r1r-rrr+rr,rr2rr3 TypeErrorCollectionsHashabletyperr0appendrrr&prepare_discriminated_union_sub_fields issubclassrSHAPE_TUPLE_ELLIPSISrEllipsisrr SHAPE_TUPLE enumeraterr~rupdate SHAPE_LISTr SHAPE_SETrSHAPE_FROZENSETr SHAPE_DEQUErSHAPE_SEQUENCEdictr r SHAPE_DICTr SHAPE_DEFAULTDICTrint SHAPE_COUNTERr SHAPE_MAPPINGrCollectionsIterableSHAPE_ITERABLErhasattrrZarbitrary_types_allowed SHAPE_GENERIC)rIoriginZtypes_rargsget_validatorsrGrHrJrEs                                  "  "  " " zModelField._type_analysiscCs|jdk st|jjtkrdS|jdk s,ti}t}|jD]F}|j}|jtkrVdSt||j\}}| ||D] }|||<qtq<||_ t ||j|_ dS)z Prepare the mapping -> and update `sub_fields` Note that this process can be aborted if a `ForwardRef` is encountered N) rAssertionErrorrrrrsetr r8addrr9r)rIrZ all_aliases sub_fieldrr`Zdiscriminator_valuesdiscriminator_valuerGrGrJrs      z1ModelField.prepare_discriminated_union_sub_fieldsr)rrrrFcCsJ|r d}ndd|jD}|||d|j\}}|j||||j|dS)Nc Ss6i|].\}}|jr|t|j|jd|j|j|jdqS)F)funcr each_itemalways check_fieldsskip_on_failure)rrrrrrr)rkrrGrGrJrs z/ModelField._create_sub_type..)rrrrr)rrrrr)rIrrrrrrPrGrGrJrs  zModelField._create_sub_typecCs.t|jddp$tdd|jD|_|j}|jrB|jtkrt|jdd}dd|D|rf|nt t |j|j d d|D}t ||_ g|_g|_|jr|jjr|jtt|r|jt d d|D7_|jt d d|D7_|jr|jtt|jpd|_|jp&d|_dS) a Prepare self.pre_validators, self.validators, and self.post_validators based on self.type_'s __get_validators__ and class validators. This method should be idempotent, e.g. it should be safe to call multiple times without mis-configuring the field. rFcss|] }|jVqdSrL)rrrrGrGrJr4sz1ModelField.populate_validators..rNcSsg|]}|jr|jr|jqSrGrrrr rGrGrJr<sz2ModelField.populate_validators..cSsg|]}|jr|js|jqSrGr!r rGrGrJr>scss |]}|js|jr|jVqdSrLr!r rGrGrJrIscss |]}|js|js|jVqdSrLr!r rGrGrJrJs)r~ranyrvaluesrrrrlistr@rr rrrrrfrrr>rrA)rIZclass_validators_rZv_funcsrGrGrJr.s,     zModelField.populate_validators)rLocStrrYValidateReturn)rr#locrrFcCs|jjtk st|jjtkrB|dk s(ttd|jd|jd|jrl| |||||j\}}|rl||fS|dkrt |jrn6|j r|j r| |||||j SdSn|t t|fS|jtkr|||||\}}n|jtkr|||||\}}n~|jtkr|||||\}}n\|jtkr:|||||\}}n:|jtkr`| |||||j\}}n|||||\}}|s|j r| |||||j \}}||fS)Nfield "I" not yet prepared so type is still a ForwardRef, you might need to call .update_forward_refs().)NN)rrrrr r"rrRr_apply_validatorsr0rrr!r%rr_validate_singletonr_validate_mapping_liker_validate_tupler_validate_iterablerr_validate_sequence_like)rIrr#r'rrrGrGrJvalidateRs@        zModelField.validatecCst|sr|jtkrt}nH|jttfkr4t}n0|jtkrHt }n|jt kr\t }nt }|t ||fSt|tr|n|f}g}g}t|D]@\}} ||f} || || |\} } | r|| q|| q|r||fS|} |jtkrt|} n|jt krt|} n|jtkr(t|} n|jtkrJt|t|ddd} nn|jtkrt|trlt|} nLt|trt|} n6t|trt|} n t|trt|t|ddd} | dfS)z Validate sequence-like containers: lists, tuples, sets and generators Note that large if-else blocks are necessary to enable Cython optimization, which is why we disable the complexity check above. maxlenN)r2)r<rrrZ ListErrorrr TupleErrorrZSetErrorrZFrozenSetErrorZ SequenceErrorr!rtuplerr,rr frozensetrrr~rrr)rIrr#r'reresultrrv_v_locree convertedrGrGrJr0sR                         z"ModelField._validate_sequence_likecCs<z t|}Wn&tk r2|tt|fYSX|dfS)zw Validate Iterables. This intentionally doesn't validate values to allow infinite generators. N)rrr!rZ IterableError)rIrr#r'riterablerGrGrJr/s  zModelField._validate_iterablecCsd}t|st}n*t|t|j}}||kr@tj||d}|rR|t||fSt|tr`|n|f}g}g} t t ||jD]F\} \} } || f} | j | || |d\}}|r| |q~| |q~| r|| fSt|dfSdS)N) actual_lengthexpected_lengthr'r) r<rr3rrZTupleLengthErrorr!rr4rzipr1r)rIrr#r'rr6r>r?r7rrr8fieldr9r:r;rGrGrJr.s(    zModelField._validate_tuplec Cs@z t|}Wn4tk r@}z|t||fWYSd}~XYnXt|trP|n|f}ig}}|D]n\} } |d} |jj| || |d\} } | r|| qh|| f} | | || |\}}|r||qh||| <qh|r||fS|j t kr|dfS|j t krt |j|dfS|j tkr,t|dfS|||dfSdS)N__key__r@)rC)r?rr!rr4rrr1rr,rr r rrr CollectionCounter_get_mapping_value)rIrr#r'rZv_iterexcr7rrr8r9Z key_resultZ key_errorsZ value_resultZ value_errorsrGrGrJr-s6 $         z!ModelField._validate_mapping_like)originalr<rFcCsh|j}|tks|tkr|S|tthkr2t|j|Sz ||WStk rbtd|jdYnXdS)z When type is `Mapping[KT, KV]` (or another unsupported mapping), we try to avoid coercing to `dict` unwillingly. z Could not convert dictionary to N) rrr rr rr RuntimeErrorrR)rIrGr<Z original_clsrGrGrJrE s   zModelField._get_mapping_valuec Cs:|jr"|jdk r"|||||Sg}|jjrtt|jr|jD]}|j|j krB|dfSqB|jD]r}zt ||j r|dfWSWqft k rt |t|j r|j ||||d\}}|s|dfYSYqfXqf|jD]8}|j ||||d\}}|r ||q|dfSq||fS||||||jSdS)Nr@)rr_validate_discriminated_unionrZ smart_unionr3r,rrrrrr:r1rr+r) rIrr#r'rrrBrerrorrGrGrJr,s0       zModelField._validate_singletonc Cs|jdk st|jdk stz>z||j}Wn*tk rV|jjrP||j}nYnXWntk r|tt|jd|fYStk rzt ||j}Wn2t tfk r|tt|jd|fYYSXYnX|j dkr|dk stt d|j d|jdz|j |}WnJttfk rf|j dk sBt|tt|j|t|j d|fYSXt|tsz|f}|j|||t|jf|dSdS)N)rr(r)r*)rrZallowed_valuesr@)rrrKeyErrorrZallow_population_by_field_namer!r$rr~rrr"rrRr#r$rr4r1r*r)rIrr#r'rrrrGrGrJrILsH  &   z(ModelField._validate_discriminated_unionrV)rr#r'rrrFc Csh|D]Z}z||||||j}Wqtttfk r\}z|t||fWYSd}~XYqXq|dfSrL)rrrrr!)rIrr#r'rrrrFrGrGrJr+}s *zModelField._apply_validatorscCs8ddlm}|jtkp6t|jdp6t|j|ttt t fS)z\ Whether the field is "complex" eg. env variables should be parsed as JSON. r) BaseModelZ__pydantic_model__) Zpydantic.v1.mainrLrrrrr;r$rr5r)rIrLrGrGrJ is_complexs    zModelField.is_complexcCst|j}|jtkr0dt|jjd|d}n||jtkrXdddd|jD}nT|jt kr|jslt dt|jddd|jD}n|jt krt |j|}|j r|jt ks|jsd |d}t|S) NzMapping[z, ]z Tuple[{}]css|]}t|jVqdSrLr*rrfrGrGrJrsz+ModelField._type_display..z{}[{}]css|]}t|jVqdSrLrOrPrGrGrJrsz Optional[)r*rrrrrformatjoinrrrrSHAPE_NAME_LOOKUPrr5)rIrrGrGrJ _type_displays        zModelField._type_displayr\cCstd|jfd|fd|jfg}|jsZ|jdk rJ|dd|jjdfn|d|jf|jrp|d|jf|S) Nrrrr_z r^r`) rrUrr_rrRr^rr`)rIrrGrGrJrs zModelField.__repr_args__)-rRrSrTrrNrUrr rr rr(boolr]r|r staticmethodrr classmethodrrpropertyrrrrrrrr1r0r/r.r-rCrrEr,rIr+rMr5rUrrGrGrGrJrls# + + 2%  1  :      #*  0  2   rc@sNeZdZdZefddeeeddddZeddd Z ee d d d Z dS) ModelPrivateAttrr^r_Nr_r^r_rFcCs||_||_dSrLr\)rIr^r_rGrGrJr|szModelPrivateAttr.__init__rEcCs|jdkrt|jS|SrLrrHrGrGrJrszModelPrivateAttr.get_default)otherrFcCs$t||jo"|j|jf|j|jfkSrL)rrr^r_)rIr_rGrGrJ__eq__szModelPrivateAttr.__eq__) rRrSrTrrNr rr(r|rrWr`rGrGrGrJr[s r[r]r^cCs$|tk r|dk rtdt||dS)u Indicates that attribute is only used internally and never mixed with regular fields. Types or values of private attrs are not checked by pydantic and it's up to you to keep them relevant. Private attrs are stored in model __slots__. :param default: the attribute’s default value :param default_factory: callable that will be called when a default value is needed for this attribute If both `default` and `default_factory` are set, an error is raised. Nrr])rNrr[r\rGrGrJ PrivateAttrs rac@seZdZdZdS)rzV Used to postpone field preparation, while creating recursive generic models. N)rRrSrTrrGrGrGrJrsr)rvalrFcCst|o|tk ot|t SrL)r-rNrr])rrbrGrGrJis_finalvar_with_default_valsrc)~rr collectionsrrDrrcollections.abcrrrrrtypingrr r r r r rrrrrrrrrrrrrtyping_extensionsrrZ pydantic.v1rrZpydantic.v1.class_validatorsrrr Zpydantic.v1.error_wrappersr!Zpydantic.v1.errorsr"r#r$r%Zpydantic.v1.typesr&r'Zpydantic.v1.typingr(r)r*r+r,r-r.r/r0r1r2r3r4Zpydantic.v1.utilsr5r6r7r8r9r:r;r<r=Zpydantic.v1.validatorsr>r?r@rArrB__annotations__rCrDrNrVZpydantic.v1.configrWrXrYrZr[r\r&r rUr%rWrr]floatrrrrr rrrrrrrr r r rTrrr[rarrcrGrGrGrJs\  <,       } q N