U `@sDddlZddlZddlZddlmZmZddlmZddlmZddl m Z ddl m Z m Z ddlmZmZmZmZmZmZddlmZd d Zd d Zd dZddZddZddZddZddZddZddZ ddZ!dd Z"d!d"Z#d#d$Z$d%d&Z%d'd(Z&d)d*Z'd+d,Z(d-d.Z)d/d0Z*d1d2Z+d3d4Z,d5d6Z-d7d8Z.d9d:Z/d;d<Z0d=d>Z1d?d@Z2dAdBZ3dCdDZ4dEdFZ5dGdHZ6dIdJZ7dKdLZ8dMdNZ9dOdPZ:dQdRZ;dSdTZdYdZZ?d[d\Z@d]d^ZAd_d`ZBdadbZCdcddZDdedfZEdgdhZFdidjZGdkdlZHdmdnZIdodpZJdqdrZKdsdtZLdudvZMe NdwdxdydzZOd{d|ZPd}d~ZQddZRddZSe NdddidfgdffddZTddZUddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpe jqejrddkddčddƄZse jqejrddkddčddʄZtdd̄Zudd΄ZvddЄZwdd҄ZxddԄZyddքZzdd؄Z{ddڄZ|dd܄Z}ddބZ~ddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZe Nd d d d Zd dZddZe NdeejddgdǐdddZddZddZdS(N)datetimedate)choice)ascii_lowercase)mark)errors Validator)assert_bad_typeassert_document_error assert_failassert_has_errorassert_not_has_errorassert_success) sample_schemacCstdtdtjdSN)r rrZDOCUMENT_MISSINGrrO/opt/alt/python38/lib/python3.8/site-packages/cerberus/tests/test_validation.pytest_empty_documentsrcCsd}t|tdtj|dS)N not a dict)r rrZDOCUMENT_FORMATformat)documentrrrtest_bad_document_types rcCs$d}t|di||dtjdfddS)NZsurnameZdoer validatorerror)r rZ UNKNOWN_FIELDrfieldrrrtest_unknown_field#s rcCsd}|ii}t||dS)Nnamer)rrschemarrrtest_empty_field_definition-sr!cCsDd}ddddddi}||tddi|||d ftjdfd dS) NZa_required_stringstring T)type minlength maxlengthrequired an_integerr(r)updater rREQUIRED_FIELD)r rZrequired_string_extensionrrrtest_required_field3s r.cCsLtdditdditdditdditdditddidS)NZa_nullable_integerZa_nullable_field_without_typefoor)Z!a_not_nullable_field_without_typerr rrrrtest_nullable_fieldEs      r2cCs&ddddgddi}tddi|dS)NZroleagentclientZsupplierT)allowednullablerr rrrtest_nullable_skips_allowedNsr8cCs&d}t|di||dftjdfddS)NZa_readonly_stringzupdate me if you canreadonlyTr+)r rREADONLY_FIELD)rrrrtest_readonly_fieldSs r;cCs*dddddi}t|}|ddidS)NZa_readonly_numberintegerTr*)r%r9maxr#)rvalidater vrrrtest_readonly_field_first_rule[srAcCsdddddddddd}ti|d d tj|d d fd d tj|d d fg}tddd||dtddd||ddS)Nr"Ttodayr%r9defaultcSs|dSNcreatedrdrrrlz8test_readonly_field_with_default_value..r%r9Zdefault_setterrFmodifiedrF)rFr9r9rM)rMr9tomorrowrrrr:r r expected_errorsrrr&test_readonly_field_with_default_valuefs8    rScCsddddddddddd d d i}tdii|d d tj|ddddfddtj|ddddfg}tdddd i||dtdddd i||ddS)N some_fielddictr"TrBrCcSs|dSrErrGrrrrIrJz?test_nested_readonly_field_with_default_value..rKrLr%r )rTrF)rTr rFr9r rFr9)rTrM)rTr rMr9rMrNnowrOrPrQrrr-test_nested_readonly_field_with_default_values@    rXcCs2dddii|_tddi|dtddi|ddS)Nidr9Trrr r rZrrrtest_repeated_readonlysr\cCstddddS)Na_stringr"r*r rrrrtest_not_a_stringsr_cCstddddS)Na_binaryZbinaryzi'm not a binaryr^rrrrtest_not_a_binarysracCstddddS)Nr)r<zi'm not an integerr^rrrrtest_not_a_integersrbcCstddddS)N a_booleanbooleanzi'm not a booleanr^rrrrtest_not_a_booleansrecCstddddS)N a_datetimerzi'm not a datetimer^rrrrtest_not_a_datetimesrgcCstddddS)Na_floatfloatzi'm not a floatr^rrrrtest_not_a_floatsrjcCstddddS)Na_numbernumberzi'm not a numberr^rrrrtest_not_a_numbersrmcCstddddS)Na_list_of_valueslistzi'm not a listr^rrrrtest_not_a_listsrpcCstddddS)Na_dictrUzi'm not a dictr^rrrrtest_not_a_dictsrrcCsVd}||d}dddt|dD}t||i||dftj|t|ffddS)Nr]r'css|]}ttVqdSrrr.0irrr sz&test_bad_max_length..r*r+)joinranger r MAX_LENGTHlenr r max_lengthvaluerrrtest_bad_max_lengths rcCsFd}||d}d|d}t||i||dftj|t|ffddS)Nr`r'r*r+)r rr{r|r}rrrtest_bad_max_length_binarys  rcCsVd}||d}dddt|dD}t||i||dftj|t|ffddS)Nr]r&rscss|]}ttVqdSrrtrurrrrxsz&test_bad_min_length..r*r+)ryrzr r MIN_LENGTHr|r r min_lengthrrrrtest_bad_min_lengths rcCsFd}||d}d|d}t||i||dftj|t|ffddS)Nr`r&rr*r+)r rrr|rrrrtest_bad_min_length_binary s  rcs:fdd}d}||dd}||dd}||ddS)Ncs6|d}||}t||i||dftj|fddS)Nr=r+)r rZ MAX_VALUE)rincZ max_valuerr7rrassert_bad_max_values  z0test_bad_max_value..assert_bad_max_valuer)r*rh?rkr)r rrrr7rtest_bad_max_values   rcs:fdd}d}||dd}||dd}||ddS)Ncs6|d}||}t||i||dftj|fddS)Nminr+)r r MIN_VALUE)rrZ min_valuerr7rrassert_bad_min_value,s  z0test_bad_min_value..assert_bad_min_valuer)r*rhrrkr)r rrrr7rtest_bad_min_value+s   rc Csd}d}|d|ddiddddid i}||d ii}t|}t||||d ftj|jdd f||f|d |dftjdf|df|d dd ftjdfgd tj}dS)NrqaddressrUr%r"cityTr%r(rV"r r(rr child_errors)rr rMAPPING_SCHEMAr BAD_TYPEr-BasicErrorHandler)rZsubschema_fieldr rrhandlerrrrtest_bad_schema;sF    rcCsRd}d}|di}||f|ddftjdfg}t||i||dftjddif|ddS)Na_dict_with_valuesrulesr]not an integer valuesrulesr%r<rr)rrr VALUESRULES)rZ schema_fieldrexp_child_errorsrrrtest_bad_valuesrulesqsrc Csd}ddg}t||i|||dftjddiddigf|df|dddftjdfgd dd d g}t||i||dftjddiddigd fd dS)Nrna stringritemsr%r"r<r*rr$z an extra item)r#r/r+)r rZ BAD_ITEMSrZ ITEMS_LENGTH)rrrrrrtest_bad_list_of_valuess. rcCsd}ddg}t||idS)Na_list_of_integersrrr rrrrrtest_bad_list_of_integerssrc Csd}ddidddd}d|d }|d |d i}t|}d d dg}||i}t||||d ftj|f|df|d d ftj|fgdtjjtjjj dd}dg}|df|d dftjddfg}t||i||d ftj|f|ddS)Na_list_of_dictsr%r"r<TrskupricerUrVroZKT123Z100r rr) constraintrrr) rr rSEQUENCE_SCHEMArrmessagesrcoder) rZ map_schemaZ seq_schemar rrrexp_msgrrrrtest_bad_list_of_dictss6   rcCs8d}dddg}t||i||dftjdddgdfddS) Nan_arrayr3r4profitr5vendor))rr+r rZUNALLOWED_VALUESrrrrtest_array_unalloweds rcCs2d}d}t||i||dftjdddg|fddS)Na_restricted_stringrr5r3r4rr+r rZUNALLOWED_VALUErrrrtest_string_unallowedsrcCs2d}d}t||i||dftjdddg|fddS)Na_restricted_integerr#r5rr*r+rrrrrtest_integer_unalloweds rcCstddidS)Nrrrrrrrtest_integer_allowedsrcCs"tdddiddigddddS) NdrZadrrZlet)r)rqrTr,rrrrrtest_validate_updatesrcCstddidS)Nr]zjohn doerrrrr test_stringsrcCstddidS)Nrr4rrrrrtest_string_allowedsrcCstddidS)Nr)2rrrrr test_integersrcCstddidS)NrcTrrrrr test_booleansrcCstdtidS)Nrf)rrrWrrrr test_datetimesrcCstdditddidS)Nrh @r*rrrrr test_float"s rcCstdditddidS)Nrkrr/rrrrr test_number's rcCstdddgidS)Nrr3r4rrrrr test_array,srcCstdtddgidS)NZa_sethellor*)rsetrrrrtest_set0srcCsd}t|dit|ddgi|df|ddftjdfg}t|ddgi|||dftjddif|d t|di|f|dftjdd gfd dS) NZone_or_more_stringsr0barr*r r%r"rror+)rrrr r)rrrrrrtest_one_of_two_types4s   rcCs8d}t|di|dt|did||dftjdfddS) NZ a_regex_emailzvalid.email@gmail.comrZZinvalidTregexz0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)r,r)rr rZREGEX_MISMATCHrrrr test_regexHsrcCs0tddidddiitddidddiidS)Nitemz hOly grAilrz(?i)holy grailz holy grailr1rrrrtest_regex_with_flagWsrcCs tdddddddgidS)NrZAK345rrYZ069rrrrrtest_a_list_of_dicts\srcCstdddgidS)Nrnrrrrrrrtest_a_list_of_valuesgsrcCstdddgidS)NZan_array_from_setr3r4rrrrrtest_an_array_from_setksrcCstdddgidS)Nrcrrrrrrtest_a_list_of_integersosrcCsVtdddditdddiiddtj|ddfd d tjd fd d tjdfgddS)Nrqz i live herezin my own town)rrria!)rqr r )rqr)rqr rr%r")rqr)rqr rr(Tr)rr rrrr-r7rrr test_a_dictss(  rcCsVtddddiddtjddif}dd tjdfg}tdd d ii|||d |j}dS) Nrrr)z an integerzanother integer)rrr%r<)rr)rrr%rZ99r)rrrrr Zschema_error_tree)rrrr@rrrtest_a_dict_with_valuesruless,   rrule)Z keysrulesZ keyschemacCsBddd|dddii}tdddii|d tdd dii|d dS) NZa_dict_with_keysrulesr%rUr"z[a-z]+r%rkeyrr7ZKEYr1)rr rrrtest_keysrulessrcCsd}||d}||d}t|dg|di||dftj||dffdt||D]}dg|}t||iqVt|dg|di||dftj||dffddS)NZ a_list_lengthr&r'r*r+)r rrrzrr{)r rrr~rwrrrrtest_a_list_lengths0    rcCsTGdddt}dddii}||}tddi|dtddi|dd tjdfd dS) Nc@seZdZddZdS)z)test_custom_datatype..MyValidatorcSstd|rdSdS)Nz [a-f0-9]{24}T)rematchselfrrrr_validate_type_objectids zAtest_custom_datatype..MyValidator._validate_type_objectidN)__name__ __module__ __qualname__rrrrr MyValidatorsr test_fieldr%ZobjectidZ50ad188438345b1049c88a28rZrrr%r)rrr rrrr rrrrtest_custom_datatypes  rcCsdGdddt}ddddi}||}tddi|ddtjdfd tdd i|dd tjdd fd dS) Nc@seZdZddZddZdS)z.test_custom_datatype_rule..MyValidatorcSs||kr||ddS)z{'type': 'number'} Below the minN)_error)r min_numberrrrrr_validate_min_numberszCtest_custom_datatype_rule..MyValidator._validate_min_numbercSst|trdSdS)NT) isinstanceintrrrr_validate_type_numbers zDtest_custom_datatype_rule..MyValidator._validate_type_numberN)rrrrrrrrrrsrrr*rl)rr%0rrrr)r)rr rrCUSTOMrrrrtest_custom_datatype_rules  rcCsVGdddt}dddii}||}tddi|dtddi|dd tjdd fd dS) Nc@seZdZddZdS)z*test_custom_validator..MyValidatorcSs |rt|d@s||ddS){'type': 'boolean'}r*Not an odd numberN)boolr)risoddrrrrr_validate_isoddsz:test_custom_validator..MyValidator._validate_isoddN)rrrrrrrrrsrrrTrZr)rr)rrr rrrrrrtest_custom_validators rz value, _type)rsr")rrorUrocCsdd}|d|ii}||i}t||d||d<t||||dftjdfdd||d<t||dS)Ntestr%Femptyr+T)rr rZEMPTY_NOT_ALLOWED)rZ_typerr rrrrtest_empty_valuess    rcCsdddddi}dS)Nr0Tz \d?\d\.\d\dr")rrr%r)rr rrrtest_empty_skips_regex-srcCsd}|ddddi}|di}t|dd}t||dd|j|d<|jt||d}t|||dftjdt|dd}d|j|d<|jt||dd|j|d<t|||d }t|||dftjdt|||d ftj ddS) Nrr"F)r%rr()Zignore_none_valuesrZTr()r rrr%) rr r r>r rr-rr r)rr rr_errorsrrrtest_ignore_none_values2s.       rcCsfi}td|d}tddd|dddi|_tdd i|d tdd i|dd |_tdd i|ddS) NT allow_unknownr Zyes)Zunknown1Zunknown2rZr%r"rrrrr*F)rrr r r?rrrtest_unknown_keysLs  r cCs&d|_ddddi}t|i|ddS)NTrqZ foo_valuerr0rrZr rrrrrrtest_unknown_key_dict^srcCs$d|_dddgi}t|i|ddS)NTrqr0rrZrrrrrtest_unknown_key_listes rcCs(d|_dddddgi}t||ddS)NTrrr)rrZextrarZrrrrrtest_unknown_keys_list_of_dictslsrcCs8Gdddt}|i}ddi|_tddd|ddS)Nc@seZdZddZdS)z>test_unknown_keys_retain_custom_rules..CustomValidatorcSs|dkr dSdS)Nr0Trrrrr_validate_type_fooxszQtest_unknown_keys_retain_custom_rules..CustomValidator._validate_type_fooN)rrrrrrrrCustomValidatorwsrr%r0)ZfredZbarneyr )rr r)rrrrr%test_unknown_keys_retain_custom_rulests rcCsTddddddiidi}ddd d d i}t||d ddi|dd <t||d dS)Nfield1rUTnested1r%r"r%r r r0r*)rZarb1Zarb2)rr r r1r rrrrtest_nested_unknown_keyss  rcCsdS)zl In v0.1.0 and below `self.errors` raised an exception if no validation had been performed yet. NrrZrrrtest_novalidate_noerrorssrcCsdddii}t|}dS)z` Validator instance is callable, functions as a shorthand passthrough to validate() rr%r"N)rr?rrrtest_callable_validators rcCs4ddiddid}tddd|tddi|dS) N dependenciesr0r%r"rr0foobarrrr1r7rrrtest_dependencies_fieldsr!cCsBdddgiddiddid}tdddd|tddd|dS) Nrr0rr%r"rr0rr rr1r7rrrtest_dependencies_lists  r#cCsdddgdddiddid}tdd i|td dd |td dd |tddd |ti|tddi|d |dd<tddd |dS)NTr0rr(rr%r"r"rr rrrr Fr(r rr7rrr*test_dependencies_list_with_required_fields   r'cCsddddgidddiddiddd }td d d dd |td id |td d d id |dS) Nr a_dict.foo a_dict.barrUr%r"r rVrrqr r0rr1r7rrr/test_dependencies_list_with_subodcuments_fieldss r+cCsddddiddiddid}tdddd|tddd |tddd |tddd |tddd |td di|dS) Nrr0rr r%r"r"r rr%rr1r7rrrtest_dependencies_dicts r,cCsdddddddiddid}td d i|td dd |td dd |tddd|ti|tddi|td ddd|d |d d<tddd|dS)NTr0rr r$r%r"r"rr rr%Fr(r&r7rrr*test_dependencies_dict_with_required_fields  r-cCsBddiddid}tddd|tddi|tddi|dS)Nr6Trr0r r*rr1r7rrr.test_dependencies_field_satisfy_nullable_fieldsr.cCsfddddddd}tddd|tddd|tddd|tddi|tddi|dS)NrT)rr6r0r r*r1r7rrr?test_dependencies_field_with_mutually_dependent_nullable_fields sr/cCsdddgddidddiddidd d }td dddd |td dddd |td id |td dddd |td ddid |td ddid |dS) Nrr0r)r(r)rUr%r"r rVr*r r1r7rrr/test_dependencies_dict_with_subdocuments_fieldss,  r0c Csfdddii}d|did}tddd d i|dd tj|fd d tjddfgdtdddid|dS)Nversionr^repoTr )packagerepor3Z somewherer)r4r1)r3r )r3r1)r3r r1r)r2rr*)r4r3)r rrZDEPENDENCIES_FIELDr)Z subschemar rrrtest_root_relative_dependencies0s   r5c CsRtddiddddgidd}td d d|d d tjdddgidd iffd dS)Nr(FTronetwor$rfield2Zthreerr9)r9rr)rr rDEPENDENCIES_FIELD_VALUE)r@rrrtest_dependencies_errorsEs r;cCs8dddddiidi|_d|_tdddd i|d dS) NZsub_dictrUr0r%r"rVTr)r0unknownrZ)r r rrZrrr(test_options_passed_to_nested_validatorsYs r=cCsTGdddt}dddddddd id d i}tddd idd igi||ddS)z Make sure self.root_document is always the root document. See: * https://github.com/pyeve/cerberus/pull/42 * https://github.com/pyeve/eve/issues/295 c@seZdZddZdS)z,test_self_root_document..MyValidatorcSs,d|jkst|jddkr(||ddS)rsubr#z!self.context is not the root doc!N) root_documentr|r)rroot_docrrrrr_validate_root_docisz?test_self_root_document..MyValidator._validate_root_docN)rrrrArrrrrhsrr>roTrUr0r")r%r@rV)r%r@r rbazrZNrr)rr rrrtest_self_root_documentas  rDcCsRdd}d|iddid|_tddd|d d tjdd fd td dd|ddS)NcSs|s||ddS)Nmust be lowercase)islower)rrrrrr validate_name~sz*test_validator_rule..validate_namerr%r<)rZageZItsMer#rr)rErZitsmerZ)r r rrr)rrGrrrtest_validator_rule}srHcCs"dddii|_ddi}ddi}dS)Npropertyr%r"rr7rrrrtest_validatedsrJc Cs ddddi}ddi}t||ddddddddgii}dd i}t||ddddddddgii}dd i}t||dd d did digd i}tddi|tddi|ddtjdfddtjdfg}tddi|ddtjd did digf|dddi}t||ddi}t||dS)Nprop1rr$rr=anyofrnirr<rr%rN)rK)rKrNrr)rKrNr*rr)rKrNr@5.5)rr rrANYOF)r docrrrr test_anyofs2      rVcCsddddiddiddigii}dd i}t||dd i}t||dd i}t||ddddidd igii}dd i}t||dd i}t||ddi}t||dS)NrKallofr%rirrr=r$rrM r<'@Z11r&r rUrrr test_allofs     r[cCsfddi}dddddgdi}t||dddgdi}t||dddgdi}ddi}t||dS)Nletters ♄εℓł☺r"abcr%r5r&rUr rrrtest_unicode_alloweds  rcr/zrequires python 3.x)reasoncCs&ddi}dddgdi}t||dS)zz All strings are unicode in Python 3.x. Input doc and schema have equal strings and validation yield success. r\r]r"raNrrbrrrtest_unicode_allowed_py3srer#zrequires python 2.xcCs&ddi}dddgdi}t||dS)z Python 2.x encodes value of allowed using default encoding if the string includes characters outside ASCII range. Produced string does not match input which is an unicode string. r\r]r"raNrrbrrrtest_unicode_allowed_py2s rfcCsddddiddidddd gigd i}dd i}t||ddi}t||dd i}t||ddi}t||dd i}t||dd i}t||dS)NrKr<rrr$r5rMr%oneofrr*rXr&rZrrr test_oneofs"      rkcCsddddiddidddd gigd i}dd i}t||ddi}t||dd i}t||ddi}t||dd i}t||dd i}t||dS)NrKr<rrr$r5rgrMrh)r%Znoneofrr*rXr1rZrrr test_noneof4s"     rlcCsdddddiddigidddid d igigii}dd i}t||dd i}t||dd i}t||ddi}t||ddi}t||ddi}t||ddi}t||dS)NrKrWrNr%rir<rr$r=rrXrrMrYgrRrSr1rZrrrtest_anyof_allof]s*       rmc Cs8dddiddididddiddidig}ddg|d}d d |d i}d d d dddidgi}t|||d|d dddt|||d|d t|||d|d ddd|d dddtj|fddtjddgfg}t|||d dtj|f|d}t|ddtj||j}|d ddd}dS)Nr r%r"r<z model numbercount serial numberrorUrQpartsrorVzMX-009rrqz898-001ZmiscrZZMonitors)z product nameror$)rrr/)rrr rN)rr)rrr r%)rrr rrr/) rappendr poprrTrrr ) r valid_partsZ valid_itemr rrrZv_errorsZscoperrrtest_anyof_schemazsT     rxcCsddddddiidddddiidgii}ddd dddiiid dddiiigd i}ddd ii}t||t||ddd ii}t||t||ddd ii}t||t||dS)NZproprNrUvalr%r<rVr"r rQrrg?r1)Zschema1Zschema2rUrrr test_anyof_2s.         rzcCs0ddddgii}tddi|tddi|dS)NZ anyof_typer"r<rrrr7rrrtest_anyof_typesr{cCsddddddddidd d d igd i}tddd ii|tdddii|tdd ddi|dS)N oneof_schemarUdigitsr<rr)r%rr=textr"z ^[0-9]{2}$rr%r|Z84)r}r~r1r7rrrtest_oneof_schemas  rcCs<dddddgiii}tdddii|tddd ii|dS) NZnested_oneof_typer oneof_typer"r<r0r^rr/rr7rrrtest_nested_oneof_types rcCsddddddddgiidid d d iigd i|_dddd iii}ddddddgdgdgigigddgigdgi}t||ddS)NabcrUr0rrr<rirVrBr%r"rZbadz#none or more than one rule validatezmust be of integer typezmust be of float type)zoneof definition 0zoneof definition 1z unknown fieldrZr[)rrrRrrrtest_nested_oneofss@   rcCsXdddiddididddiddidig}dddg|d i|_dd i}t||d }dS) Nr r%r"r<rnrppartrUrQr$rZr[)rrwrrrrr#test_no_of_validation_if_type_fails*s rcCsJddddddidi}dddii}t|||d t|}t|||dS) NinforUrr"TrrVzmy namerZ)rr)rr rr@rrrtest_issue_1075s   rcCstddi|ddS)Nr)rZrrZrrr%test_dont_type_validate_nulled_valuesEsrcCsRddiddddgidd}|d d i|tjjtjjjd dddgid }dS) Nr(FTrr6r7r$r8r9r)rr)r>rrrr:rr)rr rrrrtest_dependencies_errorJs rc Csddidddiid}z2tddd|tdd d|td di|Wn:tk r}zt|d krptd nW5d}~XYnXdS) Nr%rdrdeletedFrr~r0r~rTr~z'argument of type 'bool' is not iterablezBug #138 still exists, couldn't use boolean in dependency without putting it in a list. 'some_field': True vs 'some_field: [True])rr TypeErrorstrAssertionError)r errr1test_dependencies_on_boolean_field_with_one_valueVs  rcCsJddidddgiid}tddd|tdd d|td di|dS) Nr%rdrrFrr0rTr~r1r7rrr5test_dependencies_on_boolean_field_with_value_in_listks  rcCsHGdddt}|}dddddiiii}ddiii}t|||ddS) Nc@seZdZddZdS)z.test_document_path..DocumentPathTestercSs|j}|jD] }||}q dS)rN)r?Z document_path)rrrrZtest_docZcrumbrrr_validate_trailys  z>test_document_path..DocumentPathTester._validate_trailN)rrrrrrrrDocumentPathTesterxsrr0r rtrailTrZrC)rr@r rrrrtest_document_pathws  rcCsNdddddid}tdii|tdii|ti|tiid|dS)NrU that_fieldr%excludesr% this_fieldrrrrr1r7rrr test_excludess rcCsPddddddd}tdii|tdii|ti|tiid|dS)NrUrrrrrr1r7rrrtest_mutual_excludess rcCs\ddddddddd}tdii|ddtdii|ddti|tiid |dS) NrUrTr%rr(rrFrrr1r7rrrtest_required_excludess   rcCsdddgddddddid}tdii|tdii|tiid|tiid |tiiid |tiid |dS) NrUr bazo_fieldrrr%)rrrr)rr)rrr)rrr1r7rrrtest_multiples_exclusionss rcCs<dddgddddddd|_tiid|d tj}dS) NrUrrTrrrrrZ)r r rr)rrrrrtest_bad_excludes_fieldss rcCstddidddiidS)NrTr%rlrrrrrtest_boolean_is_not_a_numbersrcCsNdtdddtddddi}tdtdd d i|tdtd d d i|dS) Nrilr*i rLirMiOr$)rrr r7rrrtest_min_max_datesrcCs0dddii}tdii|tdddii|dS)NrUr&r*r0rr&r7rrrtest_dict_lengths rcCs0ddddgii}tddi|tddi|dS)Nuser forbiddenrootZadminZalicer&r7rrrtest_forbiddensrcCs,dddii}tddi|tddi|dS)NZamountr)rrrrr7rrrtest_forbidden_numbers rcCsFddddddgiii}dddii}t||dd tj|ddfd dS) Nror r5r^r_r`Zis_amapping)ror r+)r rZBAD_TYPE_FOR_SCHEMArrrr!test_mapping_with_sequence_schemas  rcCs8ddddddgiiddi}ddddgi}t||dS) Nror0r5r^r_r`rU)r r%rrrrr!test_sequence_with_mapping_schemasrcCs4dddgdi}ddi}t||ddtjdfddS)Nr0r"r^rar)r0r%r+)r rrrrrr!test_type_error_aborts_validations rcCsjddgdddgddgdiid}tdd d |tdd d |tdd d |tdd d |dS) Nr<r*r_)r5rr#r`ri)r^r_r`r0)r^r_r)r^r`r1r7rrrtest_dependencies_in_oneofs   rcCsdddddddiidddddiid gii}ddd ii}||||j}t|dd tj|dddd d d i}t||ddS)NrrjrUTknownr%r"rrVs)rrjZasd)rr<rZ)rr rZONEOFr)rr rrrrr#test_allow_unknown_with_oneof_ruless,    rr))Graham Chapman Eric Idle Terry Gilliamcs:tdd|ii}ddi}ddi}|jdtjjddS)NZactorscontains)rrr)z Eric idlez Terry Jonesz John Cleesez Michael Palinr)rZdocument_error_treerZMISSING_MEMBERSr)rrrr)Zmissing_actorsr test_contains8srcCsfdddii}tdd}ti||ddtjdfdtddi||d |_ti||tddi||dS) Nr0r%r"T require_all__require_all__r+rFrr rr-rrr rrrrtest_require_all_simpleHs    rcCsddddi}tdd}ti||tddi||d|_ti||tddi||ddddi}d|_ti||ddtjdfd tddi||d|_ti||ddtjdfd tddi||dS) Nr0r"FrTrr)r0r(r+)rrrr rr-rrrr%test_require_all_override_by_requiredWs0     rz*validator_require_all, sub_doc_require_allTF)repeatcCsdddii}dd||di}t|d}tdddii|||rLti||n ti|||rntdii||ntdii||dS) Nrr%r"r0rU)r%rr rrB)rrr )Zvalidator_require_allZsub_doc_require_allZ sub_schemar rrrr/test_require_all_override_by_subdoc_require_allss   rc Csddddddd}tdd}ti||ddtjdfddtjdfgd tdd i||tdd i||td d d||d |_ti||tdd i||tdd i||td d d||dS) Nr"rrr0r TrrrOrFrrrrrtest_require_all_and_excludes(     rc CsNdddigi}dddddgdi}t||dd tjdddgddifffd dS) Nr\ZsomerUror^r_r`ra)r\r5r+rrbrrr'test_allowed_when_passing_list_of_dictss r) itertoolsrsysrrZrandomrr"rZpytestrZcerberusrrZcerberus.testsr r r r r rZcerberus.tests.conftestrrrrr!r.r2r8r;rArSrXr\r_rarbrergrjrmrprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrZ parametrizerrrrrrrrr rrrrrrrr!r#r'r+r,r-r.r/r0r5r;r=rDrHrJrVr[rcZskipif version_inforerfrkrlrmrxrzr{rrrrrrrrrrrrrrrrrrrrrrrrrrrrroproductrrrrrrrs*         )6%(   !         .  0)B!0