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 rcCs8d}t|di||dtjdfd|j|dgiks4tdS)NZsurnameZdoer validatorerror unknown field)r rZ UNKNOWN_FIELDAssertionErrorrfieldrrrtest_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 r0cCsLtdditdditdditdditdditddidS)NZa_nullable_integerZa_nullable_field_without_typefoor+Z!a_not_nullable_field_without_typerr rrrrtest_nullable_fieldEs      r4cCs&ddddgddi}tddi|dS)NZroleagentclientZsupplierT)allowednullabler!r"rrrtest_nullable_skips_allowedNsr:cCs&d}t|di||dftjdfddS)NZa_readonly_stringzupdate me if you canreadonlyTr-)r rREADONLY_FIELDrrrrtest_readonly_fieldSs r>cCs@dddddi}t|}|ddid|jddkslz8test_readonly_field_with_default_value..r'r;Zdefault_setterrImodifiedrI)rIr;r;rP)rPr;tomorrowrrrr<r r"expected_errorsrrr&test_readonly_field_with_default_valuefs8    rVcCsddddddddddd d d i}tdii|d d tj|ddddfddtj|ddddfg}tdddd i||dtdddd i||ddS)N some_fielddictr$TrErFcSs|dSrHrrJrrrrLrMz?test_nested_readonly_field_with_default_value..rNrOr'r")rWrI)rWr"rIr;r"rIr;)rWrP)rWr"rPr;rPrQnowrRrSrTrrr-test_nested_readonly_field_with_default_values@    r[cCs2dddii|_tddi|dtddi|ddS)Nidr;Trr)r"r r]rrrtest_repeated_readonlysr^cCstddddS)Na_stringr$r,r rrrrtest_not_a_stringsracCstddddS)Na_binaryZbinaryzi'm not a binaryr`rrrrtest_not_a_binarysrccCstddddS)Nr+r?zi'm not an integerr`rrrrtest_not_a_integersrdcCstddddS)N a_booleanbooleanzi'm not a booleanr`rrrrtest_not_a_booleansrgcCstddddS)N a_datetimerzi'm not a datetimer`rrrrtest_not_a_datetimesricCstddddS)Na_floatfloatzi'm not a floatr`rrrrtest_not_a_floatsrlcCstddddS)Na_numbernumberzi'm not a numberr`rrrrtest_not_a_numbersrocCstddddS)Na_list_of_valueslistzi'm not a listr`rrrrtest_not_a_listsrrcCstddddS)Na_dictrXzi'm not a dictr`rrrrtest_not_a_dictsrtcCsVd}||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)Nrbr)r,r-)r rr}r~rrrrtest_bad_max_length_binarys  rcCsVd}||d}dddt|dD}t||i||dftj|t|ffddS)Nr_r(rucss|]}ttVqdSrrvrwrrrrzsz&test_bad_min_length..r,r-)r{r|r r MIN_LENGTHr~r"r min_lengthrrrrtest_bad_min_lengths rcCsFd}||d}d|d}t||i||dftj|t|ffddS)Nrbr(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_valuerr9rrassert_bad_max_values  z0test_bad_max_value..assert_bad_max_valuer+r,rj?rmr)r"rrrr9rtest_bad_max_values   rcs:fdd}d}||dd}||dd}||ddS)Ncs6|d}||}t||i||dftj|fddS)Nminr-)r r MIN_VALUE)rrZ min_valuerr9rrassert_bad_min_value,s  z0test_bad_min_value..assert_bad_min_valuer+r,rjrrmr)r"rrrr9rtest_bad_min_value+s   rc Cs,d}d}|d|ddiddddid i}||d ii}t|}t||||d ftj|jdd f||f|d |dftjdf|df|d dd ftjdfgd tj}||jkst||j|dkst|j tjj j dd|j|d|kstd|j|dkst|j tjj |j|ddks(tdS)NrsaddressrXr'r$cityTr'r*rY"r"r*rr child_errors constraint) rr rMAPPING_SCHEMAr"BAD_TYPEr/BasicErrorHandlerrmessagescoder)rZsubschema_fieldr"rrhandlerrrrtest_bad_schema;sZ     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 tjjtjjjdd |j|d dkstdd d g}t||i||dftj ddiddigdfddS)Nrpa stringritemsr'r$r?r,rrrr&z an extra item)r%r1r-) r rZ BAD_ITEMSrrrrrrZ ITEMS_LENGTH)rrrrrrtest_bad_list_of_valuess: rcCsd}ddg}t||idS)Na_list_of_integersrrr rrrrrtest_bad_list_of_integerssrc CsBd}ddidddd}d|d }|d |d i}t|}d d dg}||i}t||||d ftj|f|df|d d ftj|fgd||jkstd|j|dkstd|j|dddksttjjtjj j dd}||j|ddddkstdg}|df|d dftjddfg}t||i||d ftj|f|ddS)Na_list_of_dictsr'r$r?TrskupricerXrYrqZKT123Z100r"rrrrrrrr) rr rSEQUENCE_SCHEMArrrrrrr) rZ map_schemaZ seq_schemar"rrrexp_msgrrrrtest_bad_list_of_dictss>   "rcCs8d}dddg}t||i||dftjdddgdfddS) Nan_arrayr5r6profitr7vendor))rr-r rZUNALLOWED_VALUESrrrrtest_array_unalloweds rcCs2d}d}t||i||dftjdddg|fddS)Na_restricted_stringrr7r5r6rr-r rZUNALLOWED_VALUErrrrtest_string_unallowedsrcCs2d}d}t||i||dftjdddg|fddS)Na_restricted_integerr%r7rrr,r-rrrrrtest_integer_unalloweds rcCstddidS)Nrrr!rrrrtest_integer_allowedsrcCs"tdddiddigddddS) NdrZadrrZlet)r+rsrTr.r!rrrrtest_validate_updatesrcCstddidS)Nr_zjohn doer!rrrr test_stringsrcCstddidS)Nrr6r!rrrrtest_string_allowedsrcCstddidS)Nr+2r!rrrr test_integersrcCstddidS)NreTr!rrrr test_booleansrcCstdtidS)Nrh)rrrZrrrr test_datetimesrcCstdditddidS)Nrj @r,r!rrrr test_float"s rcCstdditddidS)Nrmrr1r!rrrr test_number's rcCstdddgidS)Nrr5r6r!rrrr test_array,srcCstdtddgidS)NZa_sethellor,)rsetrrrrtest_set0srcCsd}t|dit|ddgi|df|ddftjdfg}t|ddgi|||dftjddif|d t|di|f|dftjdd gfd |j|dd gigikstdS) NZone_or_more_stringsr2barr,r"r'r$rrqr-zmust be of string type)rrrr rr)rrrrrrtest_one_of_two_types4s   rcCs8d}t|di|dt|did||dftjdfddS) NZ a_regex_emailzvalid.email@gmail.comr]ZinvalidTregexz0^[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 grailr3rrrrtest_regex_with_flagWsrcCs tdddddddgidS)NrZAK345rrYZ069r!rrrrtest_a_list_of_dicts\srcCstdddgidS)Nrprrr!rrrrtest_a_list_of_valuesgsrcCstdddgidS)NZan_array_from_setr5r6r!rrrrtest_an_array_from_setksrcCstdddgidS)Nrcrr!rrrrtest_a_list_of_integersosrcCsVtdddditdddiiddtj|ddfd d tjd fd d tjdfgddS)Nrsz i live herezin my own town)rrria!)rsr"r")rsr)rsr"rr'r$)rsr)rsr"rr*Tr)rr rrrr/r9rrr test_a_dictss(  rcCstddddiddtjddif}dd tjdfg}tdd d ii|||d d |jdks^t|j}t|dd jdks~tdS)Nrrr)z an integerzanother integer)rrr'r?)rr)rrr'rZ99rrr,) rrrrr Zschema_error_treerr~Z descendants)rrrrCrrrtest_a_dict_with_valuesruless.   rrule)Z keysrulesZ keyschemacCsBddd|dddii}tdddii|d tdd dii|d dS) NZa_dict_with_keysrulesr'rXr$z[a-z]+r'rkeyrr9ZKEYr3)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 rrr|rr})r"rrrryrrrrtest_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'ZobjectidZ50ad188438345b1049c88a28r]rrr'r)rrr rrrr"rrrrtest_custom_datatypes  rcCsxGdddt}ddddi}||}tddi|ddtjdfd tdd i|dd tjdd fd |jdd giksttdS)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,rn)rr'0rrrr)rr)rr rrCUSTOMrrrrrtest_custom_datatype_rules  rcCsjGdddt}dddii}||}tddi|dtddi|dd tjdd fd |jdd giksftdS) 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)rrrrrrrrrsrrrTr]r)rrr)rrr rrrrrrrtest_custom_validators rz value, _type)rur$)rrqrXrqcCsdd}|d|ii}||i}t||d||d<t||||dftjdfdd||d<t||dS)Ntestr'Femptyr-T)rr rZEMPTY_NOT_ALLOWED)rZ_typerr"rrrrtest_empty_valuess    rcCs&dddddi}|ddi|s"tdS)Nr2Tz \d?\d\.\d\dr$)rrr'ru)r)rr"rrrtest_empty_skips_regex-sr cCsd}|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_valuesr]Tr*)r"rrr') rr r"rAr rr/rr r)rr"rr_errorsrrrtest_ignore_none_values2s.       r cCsfi}td|d}tddd|dddi|_tdd i|d tdd i|dd |_tdd i|ddS) NT allow_unknownr"Zyes)Zunknown1Zunknown2r]r'r$r rrrr,F)rrr r rBrrrtest_unknown_keysLs  rcCs&d|_ddddi}t|i|ddS)NTrsZ foo_valuerr2rr]r rrrrrrtest_unknown_key_dict^srcCs$d|_dddgi}t|i|ddS)NTrsr2rr]rrrrrtest_unknown_key_listes rcCs(d|_dddddgi}t||ddS)NTrrr)rrZextrar]rrrrrtest_unknown_keys_list_of_dictslsrcCs8Gdddt}|i}ddi|_tddd|ddS)Nc@seZdZddZdS)z>test_unknown_keys_retain_custom_rules..CustomValidatorcSs|dkr dSdS)Nr2Trrrrr_validate_type_fooxszQtest_unknown_keys_retain_custom_rules..CustomValidator._validate_type_fooN)rrrrrrrrCustomValidatorwsrr'r2)ZfredZbarneyr)rr r)rrrrr%test_unknown_keys_retain_custom_rulests rcCsTddddddiidi}ddd d d i}t||d ddi|dd <t||d dS)Nfield1rXTnested1r'r$r'r r"r2r*)rZarb1Zarb2)rr"r r3r"rrrrtest_nested_unknown_keyss  rcCs|jikstdS)zl In v0.1.0 and below `self.errors` raised an exception if no validation had been performed yet. N)rrr]rrrtest_novalidate_noerrorssrcCs\dddii}t|}|ddis&t|ddis6t|ddirHt|ddirXtdS)z` Validator instance is callable, functions as a shorthand passthrough to validate() rr'r$r2r,N)rrArrBrrrtest_callable_validators  r cCs4ddiddid}tddd|tddi|dS) N dependenciesr2r'r$rr2foobarrrr3r9rrrtest_dependencies_fieldsr$cCsBdddgiddiddid}tdddd|tddd|dS) Nr!r2rr'r$rr2rr#r"r3r9rrrtest_dependencies_lists  r&cCsdddgdddiddid}tdd i|td dd |td dd |tddd |ti|tddi|d |dd<tddd |dS)NTr2rr*r!r'r$r%rr#r"rrrFr*r rr9rrr*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.barrXr'r$rrYrrsr#r2rr3r9rrr/test_dependencies_list_with_subodcuments_fieldss r.cCsddddiddiddid}tdddd|tddd |tddd |tddd |tddd |td di|dS) Nr!r2rrr'r$r%r#r"r(rr3r9rrrtest_dependencies_dicts r/cCsdddddddiddid}td d i|td dd |td dd |tddd|ti|tddi|td ddd|d |d d<tddd|dS)NTr2rrr'r'r$r%rr#r"r(Fr*r)r9rrr*test_dependencies_dict_with_required_fields  r0cCsBddiddid}tddd|tddi|tddi|dS)Nr8Tr!r2rr,rr3r9rrr.test_dependencies_field_satisfy_nullable_fieldsr1cCsfddddddd}tddd|tddd|tddd|tddi|tddi|dS)NrT)r!r8r2rr,r3r9rrr?test_dependencies_field_with_mutually_dependent_nullable_fields sr2cCsdddgddidddiddidd d }td dddd |td dddd |td id |td dddd |td ddid |td ddid |dS) Nr!r2r)r+r,rXr'r$rrYr-r#r3r9rrr/test_dependencies_dict_with_subdocuments_fieldss,  r3c Csfdddii}d|did}tddd d i|dd tj|fd d tjddfgdtdddid|dS)Nversionr!^repoTr )packagerepor6Z somewherer)r7r4)r6r")r6r4)r6r"r4r!)r5rr,)r7r6)r rrZDEPENDENCIES_FIELDr)Z subschemar"rrrtest_root_relative_dependencies0s   r8c CsRtddiddddgidd}td d d|d d tjdddgidd iffd dS)Nr*FTronetwor'rfield2Zthreerr<)r<r!r)rr rDEPENDENCIES_FIELD_VALUE)rCrrrtest_dependencies_errorsEs r>cCs8dddddiidi|_d|_tdddd i|d dS) NZsub_dictrXr2r'r$rYTr)r2unknownr])r"r rr]rrr(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)rrrrDrrrrrhsrrArqTrXr2r$)r'rCrY)r'rCr"rbazr]Nrr)rr"rrrtest_self_root_documentas  rGcCsfdd}d|iddid|_tddd|d d tjdd fd |jd d giksPttddd|ddS)NcSs|s||ddS)Nmust be lowercase)islower)rrrrrr validate_name~sz*test_validator_rule..validate_namerr'r?)r ZageZItsMer%r r)rHrrHZitsmer])r"r rrrr)rrJrrrtest_validator_rule}srKcCsFdddii|_ddi}|||ks(tddi}||dksBtdS)Npropertyr'r$r)r"Z validatedrrrrrtest_validateds rMc Csddddi}ddi}t||ddddddddgii}dd i}t||ddddddddgii}dd i}t||dd d did digd i}tddi|d|dddkstd|dddkstd|dddkstd|dddksttddi|ddtjdfddtjdfg}tddi|ddtjd did digf|dddi}t||ddi}t||dS)Nprop1rr&rr@anyofrnirr?rr'rQr'r,r )rN)rNrQrr)rNrQr,rr)rNrQr@5.5)rr rrrANYOF)r"docrrrr test_anyofs:      rYcCsddddiddiddigii}dd i}t||dd i}t||dd i}t||ddddidd igii}dd i}t||dd i}t||ddi}t||dS)NrNallofr'rkrrr@r&rrP r?'@Z11r)r"rXrrr test_allofs     r^cCsfddi}dddddgdi}t||dddgdi}t||dddgdi}ddi}t||dS)Nletters ♄εℓł☺r$abcr'r7r)rXr"rrrtest_unicode_alloweds  rfr1zrequires 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$rdNr!rerrrtest_unicode_allowed_py3srhr%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$rdNrrerrrtest_unicode_allowed_py2s ricCsddddiddidddd gigd i}dd i}t||ddi}t||dd i}t||ddi}t||dd i}t||dd i}t||dS)NrNr?rrr&r7rPr'oneofrr,r[r)r]rrr test_oneofs"      rncCsddddiddidddd gigd i}dd i}t||ddi}t||dd i}t||ddi}t||dd i}t||dd i}t||dS)NrNr?rrr&r7rjrPrk)r'Znoneofrr,r[r3r]rrr test_noneof4s"     rocCsdddddiddigidddid d igigii}dd i}t||dd i}t||dd i}t||ddi}t||ddi}t||ddi}t||ddi}t||dS)NrNrZrQr'rkr?rr&r@rr[rrPr\grUrVr3r]rrrtest_anyof_allof]s*       rpc Csdddiddididddiddidig}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 |ks.t d|d dksDt |d ddddksbt |d ddd}d |kst d!|kst |d d"d#gigkst |d!d"d#gigkst |d dd$d%gkst dS)&Nr"r'r$r?z model numbercount serial numberrrrXrTpartsrqrYzMX-009rrtz898-001Zmiscr]ZMonitors) product namerrr&)rur1)rur"rQ)ru)rur"r')rur"rr1rrzno definitions validatezanyof definition 0zanyof definition 1rwrrxz"must be of ['dict', 'string'] type) rappendr poprrWrrr r) r valid_partsZ valid_itemr"rrr Zv_errorsZscoperrrtest_anyof_schemazsb     r|cCsddddddiidddddiidgii}ddd dddiiid dddiiigd i}ddd ii}t||t||ddd ii}t||t||ddd ii}t||t||dS)NZproprQrXvalr'r?rYr$r"rTrrg?r3)Zschema1Zschema2rXrrr test_anyof_2s.         r~cCs0ddddgii}tddi|tddi|dS)NZ anyof_typer$r?rrr!r9rrrtest_anyof_typesrcCsddddddddidd d d igd i}tddd ii|tdddii|tdd ddi|dS)N oneof_schemarXdigitsr?rr)r'rr@textr$z ^[0-9]{2}$rr'rZ84)rrr3r9rrrtest_oneof_schemas  rcCs<dddddgiii}tdddii|tddd ii|dS) NZnested_oneof_typer oneof_typer$r?r2rarr1r!r9rrrtest_nested_oneof_types rcCsddddddddgiidid d d iigd i|_dddd iii}ddddddgdgdgigigddgigdgi}t||d|j|kstdS)NabcrXr2rrr?rkrYrEr'r$rZbadz#none or more than one rule validatezmust be of integer typezmust be of float type)zoneof definition 0zoneof definition 1rr])r"r rr)rrrUrrrtest_nested_oneofss@   rcCshdddiddididddiddidig}dddg|d i|_dd i}t||d }t|d ksdtdS) Nr"r'r$r?rqrspartrXrTr&r]r,)r"r r~r)rr{rr rrr#test_no_of_validation_if_type_fails*s rcCsXddddddidi}dddii}t|||d t|}t|||||sTtdS) NinforXr r$TrrYzmy namer])rrrAr)rr"rrCrrrtest_issue_1075s   rcCs(tddi|d|jddgiks$tdS)Nr+r]znull value not allowed)r rrr]rrr%test_dont_type_validate_nulled_valuesEsrcCsfddiddddgidd}|d d i|tjjtjjjd dddgid }|jd |giksbtdS) Nr*FTrr9r:r'r;r<r)rr)rArrrr=rrr)rr"rrrrtest_dependencies_errorJs rc Csddidddiid}z2tddd|tdd d|td di|Wn:tk r}zt|d krptd nW5d}~XYnXdS) Nr'rfr!deletedFrrr2rrTrz'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 TypeErrorstrr)r"errr1test_dependencies_on_boolean_field_with_one_valueVs  rcCsJddidddgiid}tddd|tdd d|td di|dS) Nr'rfr!rFrr2rTrr3r9rrr5test_dependencies_on_boolean_field_with_value_in_listks  rcCsHGdddt}|}dddddiiii}ddiii}t|||ddS) Nc@seZdZddZdS)z.test_document_path..DocumentPathTestercSs,|j}|jD] }||}q ||jks(tdS)rN)rBZ document_pathrr)rrrrZtest_docZcrumbrrr_validate_trailys  z>test_document_path..DocumentPathTester._validate_trailN)rrrrrrrrDocumentPathTesterxsrr2r"rtrailTr]rF)rrCr"rrrrtest_document_pathws  rcCsNdddddid}tdii|tdii|ti|tiid|dS)NrX that_fieldr'excludesr' this_fieldrrrrr3r9rrr test_excludess rcCsPddddddd}tdii|tdii|ti|tiid|dS)NrXrrrrrr3r9rrrtest_mutual_excludess rcCs\ddddddddd}tdii|ddtdii|ddti|tiid |dS) NrXrTr'rr*rrFrrr3r9rrrtest_required_excludess   rcCsdddgddddddid}tdii|tdii|tiid|tiid |tiiid |tiid |dS) NrXr bazo_fieldrrr')rrrr)rr)rrr)rrr3r9rrrtest_multiples_exclusionss rcCs|dddgddddddd|_tiid|d tj}|j|jtjjjd dd g|jtjjjd dd gdksxtdS) NrXrrTrrrrr]z 'this_field'r=z'that_field', 'bazo_field') r"r rrrZEXCLUDES_FIELDrrr)rrrrrtest_bad_excludes_fieldss( rcCstddidddiidS)NrTr'rnrrrrrtest_boolean_is_not_a_numbersrcCsNdtdddtddddi}tdtdd d i|tdtd d d i|dS) Nrilr,i rOirPiOr&)rrr r9rrrtest_min_max_datesrcCs0dddii}tdii|tdddii|dS)NrXr(r,r2rr)r9rrrtest_dict_lengths rcCs0ddddgii}tddi|tddi|dS)Nuser forbiddenrootZadminZalicer)r9rrrtest_forbiddensrcCs,dddii}tddi|tddi|dS)NZamountr)rrrrr9rrrtest_forbidden_numbers rcCsFddddddgiii}dddii}t||dd tj|ddfd dS) Nrqr"r7rarbrcZis_amapping)rqr"r-)r rZBAD_TYPE_FOR_SCHEMArrrr!test_mapping_with_sequence_schemas  rcCs8ddddddgiiddi}ddddgi}t||dS) Nrqr2r7rarbrcrX)r"r'rrrrr!test_sequence_with_mapping_schemasrcCs4dddgdi}ddi}t||ddtjdfddS)Nr2r$rardr)r2r'r-)r rrrrrr!test_type_error_aborts_validations rcCsjddgdddgddgdiid}tdd d |tdd d |tdd d |tdd d |dS) Nr?r,rb)r7r!r%rcrl)rarbrcr2)rarbr)rarcr3r9rrrtest_dependencies_in_oneofs   rcCsdddddddiidddddiid gii}ddd ii}||||j}t|d ksZtt|dd tj|ddt|d jd kstdd ddi}t||ddS)NrrmrXTknownr'r$rrYsr,)rrmrZasd)rr?r])r r~rr rZONEOFrr)rr"rr rrr#test_allow_unknown_with_oneof_ruless0    rr))Graham Chapman Eric Idle Terry Gilliamcstdd|ii}ddi}||s$tddi}||r8ttj|jdksLt|jdtjjdtfdddDs|tdS) NZactorscontains)rrr)z Eric idlez Terry Jonesz John Cleesez Michael Palinrc3s|]}|kVqdSrr)rxxZmissing_actorsrrrzEsz test_contains..)rr)rrrZMISSING_MEMBERSZdocument_error_treerany)rrrrrr test_contains8s  rcCsfdddii}tdd}ti||ddtjdfdtddi||d |_ti||tddi||dS) Nr2r'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) Nr2r$FrTrr)r2r*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$r2rX)r'rr"rrE)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$rrr2rTrrrRrFrrrrrtest_require_all_and_excludes(     rc CsNdddigi}dddddgdi}t||dd tjdddgddifffd dS) Nr_ZsomerXrqrarbrcrd)r_r7r-rrerrr'test_allowed_when_passing_list_of_dictss r) itertoolsrsysrrZrandomrr$rZpytestrZcerberusrrZcerberus.testsr r r r r rZcerberus.tests.conftestrrrrr#r0r4r:r>rDrVr[r^rarcrdrgrirlrorrrtrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrZ parametrizerrrrrrr r rrrrrrrr r$r&r*r.r/r0r1r2r3r8r>r@rGrKrMrYr^rfZskipif version_inforhrirnrorpr|r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqproductrrrrrrrs*         )6%(   !         .  0)B!0