L iGDddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z ddl mZmZmZmZGddeZGdd eZGd d e ZGd d eZGddeZGddeZGddeZGddeZGddeZeecZZy))absolute_import)warn)errors) _str_typeCallableHashableMappingMutableMappingSequence)get_Validator_classvalidator_factory mapping_hashTypeDefinitionc eZdZy)_AbortN)__name__ __module__ __qualname__U/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/cerberus/schema.pyrrsrrceZdZdZy) SchemaErrorz_ Raised when the validation schema is missing, has the wrong format or contains errors.N)rrr__doc__rrrrrs  rrceZdZdZfdZdZdZdZdZdZ dZ d Z d Z d Z ed Zed ZedZddZdZdZedZdZddZdZxZS)DefinitionSchemaz1A dict-subclass for caching of validated schemas.cdtvrmtdtatjj }|j tdtfdtdtfdd|t_tt|3|S)NSchemaValidatorcallablerhashable)rr ) globalsr SchemaValidatorMixinr types_mappingcopyupdaterrrsuperr__new__)clsargskwargsr# __class__s rr'zDefinitionSchema.__new__%s{ GI -/0ACWXO+99>>@M  .zH; K .zH; K  -:O )%s3C88rct|ts td||_t|tr|j j ||}t|ts t|}t||_t!d|jtj"|||_|j'|}|j)|||_y#t$r)ttjj|wxYw)z :param validator: An instance of Validator-(sub-)class that uses this schema. :param schema: A definition-schema as ``dict``. Defaults to an empty one. z0validator argument must be a Validator-instance.N) allow_unknown error_handler target_schematarget_validator) isinstancer RuntimeError validatorrschema_registrygetr dict ExceptionrrSCHEMA_ERROR_DEFINITION_TYPEformatSchemaValidationSchemavalidation_schemarSchemaErrorHandlerschema_validatorexpandvalidateschema)selfr3r@s r__init__zDefinitionSchema.__init__4s)%8%:;TU U" fi (..2266BF&'* Vf"8 !B / 00 33 & ! V$ f  V!&"E"E"L"LV"TUU Vs $ C2Dc|jj} ||=|j|=y#t$rtd|zt$r}|d}~wwxYw)Nz Schema has no field '%s' defined)r@r$ ValueErrorrr7)rAkey _new_schemaes r __delitem__zDefinitionSchema.__delitem__Us`kk&&(  !C  C  H@3FG G G s-A AAc |j|SN)r@)rAitems r __getitem__zDefinitionSchema.__getitem__`s{{4  rc,t|jSrJ)iterr@rAs r__iter__zDefinitionSchema.__iter__csDKK  rc,t|jSrJ)lenr@rOs r__len__zDefinitionSchema.__len__fs4;;rct|SrJ)strrOs r__repr__zDefinitionSchema.__repr__is 4yrct|jd|id}|j||i||j|<yNr)r>r?r@)rArEvalues r __setitem__zDefinitionSchema.__setitem__ls7 QJ'* sEl#  CrcFt|drt|jSy)Nr@zNo schema data is set yet.)hasattrrUr@rOs r__str__zDefinitionSchema.__str__qs 4 "t{{# #/rcj|j|j|jjSrJ)r+r3r@r$rOs rr$zDefinitionSchema.copyws$~~dnndkk.>.>.@AArc |j|}|j|}|j|}|S#t$rYwxYwrJ)_expand_logical_shortcuts_expand_subschemasr7_rename_deprecated_rulenames)r(r@s rr>zDefinitionSchema.expandzsR 226:F++F3F 11&9    s"7 AAcd}|jD]n\}}|Dcgc] }||s |c}D]M}|jdd\}}|j|gi||D]} ||j|| i||=Op|Scc}w)z Expand agglutinated rules in a definition-schema. :param schema: The schema-definition to expand. :return: The expanded schema-definition. cHt|txr|jdS)N)allof_anyof_noneof_oneof_)r1r startswith)xs r is_of_rulez>DefinitionSchema._expand_logical_shortcuts..is_of_rules$a+ 91 r_)itemssplitr%append) r(r@rkfieldrulesrjof_ruleoperatorrulerYs rr`z*DefinitionSchema._expand_logical_shortcutss  #LLN #LE5',>! 1 A> #!(sA!6$ h^,"7^:E(O**D%=9:'N  # # ?s BBc fd}fd}D]|snG|r|jdd<n"|jddidd<dD],}|vs |jd|id|<.dD]]}|vs t|ts"g}|D]'}|j|jd|id)||<_S)Nc<ttxrdvS)Nr@r1r rqr@srhas_schema_rulez.has_schema_rules"fUmW5S(fUm:S Srcp tddjDS#t$rYywxYw)zw Tries to determine heuristically if the schema-constraints are aimed to mappings. c3<K|]}t|tywrJrx.0rjs r zRDefinitionSchema._expand_subschemas..has_mapping_schema..s/0Jq'*r@F)allvalues TypeErrorrysrhas_mapping_schemaz?DefinitionSchema._expand_subschemas..has_mapping_schemasH  4:5M(4K4R4R4T  s %) 55r@r) keysrules valuesrules keyschema valueschema)allofanyofrnnoneofoneof)r>r1r rp)r(r@rzrrunew_rules_definitionrKrqs ` @rraz#DefinitionSchema._expand_subschemassL T  ?E"$#%*-**VE]85L*Mu h'*-**ax9P5Q*RST*Uu h'Q R6%=(*-**at9L5M*Nq*QF5M$' RG ?6%=(%fUmD&98D +-( &u d 3N,33CJJ4y4I!4LMN*>F5M$' ? ?* rc:|jj||SrJ)r@r5)rArKdefaults rr5zDefinitionSchema.gets{{tW--rc6|jjSrJ)r@rnrOs rrnzDefinitionSchema.itemss{{  ""rc4 |j|}|jj}|j||j |||_y#t $r)t tjj|t$r}|d}~wwxYwrJ) r>r@r$r%r?rDrrr8r9r7)rAr@rFrGs rr%zDefinitionSchema.updates &[[(F++**,K   v & MM+ & &DK  RfAAHHPQ Q G sA A9BBBc|jD]w\}}t|trdD]\\}}||vr ||vr tdt dj ||t ||||||<||j|^y|S)N))rr)r3 check_with)rrzTThe rule '{new}' is also present with its old name '{old}' in the same set of rules.zrThe rule '{old}' was renamed to '{new}'. The old name will not be available in the next major release of Cerberus.)oldnew)rnr1rUr2rr9DeprecationWarningpop)r@rqrrrrs rrbz-DefinitionSchema._rename_deprecated_rulenamess"LLN 'LE5%% 'S e#%<&A  &3C 8&  &,E]3%7u c"u !!#&+ '  '6 rc8t|j|_yrJ)r:r3r;rOs rregenerate_validation_schemaz-DefinitionSchema.regenerate_validation_schemas!7!Grc| |j}t|t|jjf}||jjvr7|j ||jjj |yy)ap Validates a schema that defines rules against supported rules. :param schema: The schema to be validated as a legal cerberus schema according to the rules of the assigned Validator object. Raises a :class:`~cerberus.base.SchemaError` when an invalid schema is encountered. N)r@rr3r#_valid_schemas _validateadd)rAr@_hashs rr?zDefinitionSchema.validatesk >[[Ff%|DNN4P4P'QR 55 5 NN6 " NN ) ) - -e 4 6rct|tr&|jjj ||}i}|j D]c\}}t|trt j ||||<0i}|j D]\}}|||jdd<|||<e|j|dst|jjy)N rlF normalize) r1rr3r4r5rnrules_set_registryreplacer=rr)rAr@ test_schemarqrr test_rulesru constraints rrzDefinitionSchema._validate s fi (^^3377GF "LLN 0LE5%+%7%;%;E5%I E" (- D$D*9CJt||C56D%/ E" 0$$[E$Bd33::; ;CrrJ)rrrrr'rBrHrLrPrSrVrZr]r$ classmethodr>r`rar5rnr% staticmethodrbrr?r __classcell__r+s@rrr"s; 9B !!! ! 0 B  ,%%N.# &<H5 0#%8-su5 "D2DCFCrc |jdS)z7The encountered references to rules set registry items.r_configrOs rrz)SchemaValidatorMixin.known_rules_set_refsAs||233rc |jdS)z4The encountered references to schema registry items.rrrOs rrz&SchemaValidatorMixin.known_schema_refsFs||/00rc |jdS)z#The schema that is being validated.r/rrOs rr/z"SchemaValidatorMixin.target_schemaKs||O,,rc |jdS)z.The validator whose schema is being validated.r0rrOs rr0z%SchemaValidatorMixin.target_validatorPs||.//rc~t|tri||jvry|jj||jj j |}||j|d|zy|}td|it|jjf}||jjvry|j|d|jj}||d|jr|j|jy|jjj|y)Nz"Rules set definition %s not found.turingFdocument_crumbr-r@r)r1rrrr0rr5_errorrr#r_get_child_validatorrr_errors)rArqrY definitionrr3s r_check_with_bulk_schemaz,SchemaValidatorMixin._check_with_bulk_schemaUs eY '111))--e4..AAEEeLJ! E#G%#OP" (E* + ..<< =  D))88 8 -- ((... %5)    KK )) *  ! ! 0 0 4 4U ;rcPt|tryt|tr?|j|dddiid}||ds|j |j yyt|t r6td|Ds#|j|fz}|j |d yyy) NrrlistTrr@r-Frc3<K|]}t|tywrJ)r1rr}s rrz@SchemaValidatorMixin._check_with_dependencies..s>1z!X.>rz)All dependencies must be a hashable type.) r1rr rrrr r document_path)rArqrYr3paths r_check_with_dependenciesz-SchemaValidatorMixin._check_with_dependenciesus eY '  w '11$%'78"2I Ue4 I--.5 x (>>>))UH4 D"MN?)rcRt|D]\}}|j||f|yrJ) enumerater)rArqrYir@s r_check_with_itemsz&SchemaValidatorMixin._check_with_itemss."5) =IAv  ( (%V < =rc |j||}t|t|jjf}||jj vry|j |d|j}||j|d|jr|j|jy|jj j|y#t$rYywxYw)NrFr) &_handle_schema_reference_for_validatorrrr0r#rrroot_allow_unknown_expand_rules_set_refsrrr)rArqrYrr3s r_check_with_schemaz'SchemaValidatorMixin._check_with_schemas ??uMEe$l43H3H3V3V&WX D))88 8 -- T=T=T.  $--e4F    KK )) *  ! ! 0 0 4 4U ;   sC C('C(ct|tr t|fn t|}|t|jjz }|r1|j |dj dj|yy)NzUnsupported types: {}z, )r1rrr0typesrr9join)rArqrYinvalid_constraintss r_check_with_typez%SchemaValidatorMixin._check_with_typesg!+E9!=UH 3u:#c$*?*?*E*E&FF  KK.55dii@S6TU  rci}|jD]C\}}t|tr)|jjj |||<?|||<E|SrJ)rnr1rr0rr5)rAr@resultkvs rrz+SchemaValidatorMixin._expand_rules_set_refssZLLN DAq!Y' 11DDHHKq q    rcDt|ts|S||jvrt|jj ||j j j|}|7|j|fz}|j|dj|t|S)NzSchema definition {} not found.) r1rrrrr0r4r5rrr9)rArqrYrrs rrz;SchemaValidatorMixin._handle_schema_reference_for_validators%+L D** *L ""5)**::>>uE  %%0D KK?FFuM NLrct|ts!|j|tjy|j |d|j j}|D]}td|it|j jf}||j jvrH||d|jr|j|jz|j jj|y)z2{'allowed': ('allof', 'anyof', 'noneof', 'oneof')}NFrrr) r1r rrBAD_TYPErr0validation_rulesrr#rrr)rArurqrYr3 constraintsrs r_validate_logicalz&SchemaValidatorMixin._validate_logicals%* KKv / --((99. ! @Kh 45T22@@AE--<<< kU 3   I--.%%4488? @r)rrrrrBpropertyrrr/r0rrrrrrrrrrs@rr"r"6s D 4411--00<@O =<& @rr"c@eZdZdZifdZdZdZdZdZd dZ d Z y) Registryz A registry to store and retrieve schemas and parts of it by a name that can be used in validation schemas. :param definitions: Optional, initial definitions. :type definitions: any :term:`mapping` c4i|_|j|yrJ)_storageextend)rA definitionss rrBzRegistry.__init__s  K rc@|j||j|<y)aQ Register a definition to the registry. Existing definitions are replaced silently. :param name: The name which can be used as reference in a validation schema. :type name: :class:`str` :param definition: The definition. :type definition: any :term:`mapping` N)_expand_definitionr)rAnamers rrz Registry.adds#55jA drc|jS)z_ Returns a :class:`dict` with all registered definitions mapped to their name. )rrOs rrz Registry.alls}}rc8|jjy)z&Purge all definitions in the registry.N)rclearrOs rrzRegistry.clears rcjt|jD]\}}|j||y)a Add several definitions at once. Existing definitions are replaced silently. :param definitions: The names and definitions. :type definitions: a :term:`mapping` or an :term:`iterable` with two-value :class:`tuple` s N)r6rnr)rArrrs rrzRegistry.extends4!%[ 1 7 7 9 ' D* HHT: & 'rNc:|jj||S)z Retrieve a definition from the registry. :param name: The reference that points to the definition. :type name: :class:`str` :param default: Return value if the reference isn't registered. )rr5)rArrs rr5z Registry.get s}}  w//rcJ|D]}|jj|d y)z Unregister definitions from the registry. :param names: The names of the definitions that are to be unregistered. N)rr)rAnamesrs rremovezRegistry.removes' *D MM  dD ) *rrJ) rrrrrBrrrrr5rrrrrrs0$&! B  '0*rrceZdZedZy)SchemaRegistryc,tj|SrJrr>r(rs rrz!SchemaRegistry._expand_definitions&&z22rNrrrrrrrrrrs33rrceZdZedZy)RulesSetRegistryc6tjd|idSrXrrs rrz#RulesSetRegistry._expand_definition%s&&:7::rNrrrrrr$s;;rrN) __future__rwarningsrcerberusrcerberus.platformrrrr r r cerberus.utilsr r rrr7rrrrr:objectr"rrrr4rrrrr s& Y  ) y<~y