U 5`d>d?id@dAdBifdCdDZ+e*d>d>d?id@eifdEdFZ,e*d>d>d?id@eifdGdHZ-e*d>d>d?id@dIdBifdJdKZ.dLdMZ/e*d>d>d?id@dNdBifdOdPZ0dQdRZ1dSdTZ2dUdVZ3dWdXZ4dYdZZ5d[d\Z6d]d^Z7d_d`Z8dadbZ9dcddZ:dedfZ;dgdhZddddtiidi}dddii}dddii}t|||dSNthingdictrrtyper2rrrrrtest_coerce_in_dictschemas  r#cCs>dddtidi}ddddgi}ddd d gi}t|||dS) Nthingslistrrrr!3rr"rrrrrtest_coerce_in_listschema#sr(cCszdddtidtigdi}dddgi}dddgi}t|||t|}|dd ||r`t|jd|dksvtdS) Nr$r%rr itemsrr"rr!r')rstrr rappendAssertionErrorr)rrr validatorrrrtest_coerce_in_listitems*s    r/cCsLdddtiid}dd|di}dddigi}dddigi}t|||dS) Nrrrrr$r%r!r"r)Z item_schemarrrrrr'test_coerce_in_dictschema_in_listschema6s r0cCs8ddtii}t|}ddi}|||j|k s4tdS)Nrrr)rrZvalidaterr-)rvdocrrrtest_coerce_not_destructive>s   r3cCs:ddtii}tddi|}d|d_t|ddtjtdS)Nrr not_a_numberrr)rr)rrinforrCOERCION_FAILEDr_errorsrrrtest_coerce_catches_ValueErrorFs  r9cCsPdddtidtigdi}dddgi}t||}d|d_t|d d tjtdS) Nr$r%rr)r4r"rr)r$rr$r*r)rr+rr5rrr6rrr8rrr+test_coerce_in_listitems_catches_ValueErrorOs   r<cCs>ddtjii}tddi|}d|d_t|ddtjtjdS)Nnamerirr)r=r)r+lowerrr5rrr6r7rrrtest_coerce_catches_TypeError]s r?cCsTdddtidtjigdi}dddgi}t||}d|d_t|d d tjtjdS) Nr$r%rr)rr"rr)r$rr:)rr+r>rr5rrr6r;rrr*test_coerce_in_listitems_catches_TypeErrorfs   r@cCs:didtidi}dddii}dddii}t|||dS)Nfoorr allow_unknownbar0rrrrrrtest_coerce_unknownvs  rFcsnGfdddtddddii}|ddiddks@tdd did }|ddid diksjtdS) Ncs&eZdZfddZddZZS)z3test_custom_coerce_and_rename..MyNormalizercst|j||||_dSN)super__init__ multiplier)selfrJr r ) MyNormalizer __class__rrrIsz.MyNormalizer.__init__cSs ||jSrG)rJ)rKvaluerrr_normalize_coerce_multiplyszNtest_custom_coerce_and_rename..MyNormalizer._normalize_coerce_multiply)__name__ __module__ __qualname__rIrO __classcell__rrL)rMrrL~srLr"rArZmultiplyr'rename_handlerrC )r normalizedr-r1rrTrtest_custom_coerce_and_rename}s r[cCs:dd}dd}ddt||gii}tddiddi|dS)NcSs |ddS)Nr"rxrrrz#test_coerce_chain..cSs|SrG)upperr\rrrr^r_rArF)hexr )Z drop_prefixr`rrrrtest_coerce_chainsrdcCs:dd}ddt|gii}|ddi|tj|jks6tdS)NcSs tddS)Nz0The coercion chain did not abort after an error.)r-rNrrr dont_do_mesz,test_coerce_chain_aborts..dont_do_merArrE)rcrr6r8r-)r.rfrrrrtest_coerce_chain_abortssrgcCsNdddtddi}ddgi}|||dks2t|j||dd|ksJtdS) Ndatar%integerr rrqT)Zalways_return_document)rZ validatedr-)r.rrrrr!test_coerce_non_digit_in_sequences  rlcCs(dtdddi}ddi}t|||dS)NrATrirnullabler rrrrrrtest_nullables_dont_fail_coercesrpcCsNdd}d|dddi}ddi}t||||ddi|tj|jksJtdS)NcSs tddS)Nzexpected to fail) Exceptionrerrrfailing_coercionszGtest_nullables_fail_coerce_on_non_null_values..failing_coercionrATrirmr")r rr6r8r-)r.rrrrrrr-test_nullables_fail_coerce_on_non_null_valuess  rscCs,ddtii}ddi}ddi}t|||dS)Nrrr!r"rrrrrtest_normalizeds rtcCs:dddii}ddi}ddi}|||d|j|ks6tdS)NrArenamerDrF)rr-r.rrrrrr test_renames   rwcCs4tdtid}i}ddi}ddi}t||||dS)NrVrWrErAr)rrr rvrrrtest_rename_handlers rxcCs4tdd}dddii}ddi}i}t||||dS)NT purge_unknownrAr stringrDrr rvrrrtest_purge_unknowns   r}cCs<dddddiiddi}dddii}dii}t|||dS) NrArr r{T)r rrzrDr rrrrtest_purge_unknown_in_subschemas  rcCsddtii}dtddd}|dd|dd t|d d |}|dd ksZt|ddksnt|d|ddS) Nrevisionr5zw+)mode)rfilerZfoobarrTrW) rrwriteseekrrYr-readcloserrrYrrrtest_issue_147_complexs  rcCsxddddtiidi}d}dd|ii}t||}||k s@t|dddksTt|dks`t|dd|ksttdSr)rrrYr-)rZref_objrrYrrrtest_issue_147_nested_dicts   rcCs<ddtdddi}dddii}dddii}t|||dS) Nrrrirr )r Z valuesrulesrr!r"rrrrrtest_coerce_in_valuesruless   rcCs<ddtdddi}dddii}dddii}t|||dS) Nrrrir)r Z keysrulesrrArrrrrrtest_coerce_in_keysrules s   rcCs`dddtddi}ddddgi}dd d d gi}t|||||jdD]}t|tsHtqHdS) Na_listr%floatrjrr'rUrg@g@g@)rr r isinstancer-)r.rrrr]rrrtest_coercion_of_sequence_itemss rdefault bar_valuedefault_settercCsdSNrrr2rrrr^r_r^cCsBddi}||ddi|d}ddi}ddd}t|||dS)Nr r{rArDrA foo_valuerupdater r bar_schemarrrrrrtest_default_missings   rcCs>ddi}||ddi|d}ddd}t|||dS)Nr r{rrZ non_defaultrr copyrrrrrrrtest_default_existent)s   rcCs@ddd}||ddi|d}ddd}t|||dS)Nr{Tr rnr rrrrrrrtest_default_none_nullable4s    rcCsdSrrrrrrr^@r_cCsFddd}||ddi|d}ddd}ddd}t|||dS)Nr{Frr rrrrrrrrtest_default_none_nonnullable?s     rcCs8ddiddddd}ddi}ddd}t|||dS)Nr r{T)r rnrrrArrrrrrtest_default_none_default_valueKs   rcCsdSrrrrrrr^Vr_cCsTddi}||ddddi|ddi}dddii}ddd di}t|||dS) Nr r{rrrrrArrrrrrr!test_default_missing_in_subschemaUs   rcCsVddiddddddddddddd}d d i}d d d d d}t|||dS)Nr ricSs |ddSNarrdrrrr^ir_z0test_depending_default_setters..r rcSs |ddS)Nbr"rrrrrr^jr_cSs|d|dS)Nrcrrrrrr^kr_)rrrrrrr"rUrrrrrtest_depending_default_settersfs   rcCs<ddddddddd}|i|tj|jks8tdS)NricSs |ddS)Nrrrrrrrr^tr_z9test_circular_depending_default_setters..rcSs |ddSrrrrrrr^ur_rr)rZSETTING_DEFAULT_FAILEDr8r-)r.rrrr'test_circular_depending_default_settersrs    rcCsNdddddddiiddi}dd d ii}t||dd tj|ddfd dS) Nr%rTrr r{r rCrrZis_amapping)r%r error)rrZBAD_TYPErorrrtest_issue_250{s  rcCs<dddddddiidii}dd d d gi}t|||dS) Nr%rTrrr r{)rCr rknownunknownrrrorrr#test_issue_250_no_type_pass_on_lists  rcCsNddddddiidii}ddddiii}t||dd tj|ddfd dS) Nr%rTrr r{rCrr)r%rr)rrZBAD_TYPE_FOR_SCHEMArorrr#test_issue_250_no_type_fail_on_dicts rcCs2ddddddiidii}ddi}t|||dS) Nr%rTrr r{rrrrorrr)test_issue_250_no_type_fail_pass_on_others rcCsvdddddddiidddddiid gii}ddd ii}t||dd tj|ddfd dd d di}t||dS)NtestoneofrTrr r{rrs)rrrZasd)rr)rrZONEOFr rorrr test_allow_unknown_with_of_ruless$  rcCsfddddidi}ddddd d d d ifi}t||t||}|ddddd d d d ifksbtdS) NZmy_fieldr%r )r{ZnumberrrrArD*ZalbertZ kandinskyr*)r rrYr-rrrrtest_271_normalising_tupless  rcCs"tddddi}|diidS)NrrTr rC)rrZrrrtest_allow_unknown_wo_schemasrcCsDtdd}ddddi}ddidd}dddii}t||||dS)NTryrArrrDrr|rvrrr%test_allow_unknown_with_purge_unknowns   rcCsRtdd}dddddiiddi}d d d d d }dd d d i}t||||dS)NTryrArrDr r{)r rrCZbazF)rDZcorgeZxyzzy)rAZthudr|rvrrr1test_allow_unknown_with_purge_unknown_subdocuments  rcCsJdddddid}t|dd}dd i}t|}d |d <t|||d dS) Nr{i)r Z maxlengthreadonlyT) description last_updated)rZpurge_readonlyrz it is a thingZfuturer)r.)rrr )rr.rrrrrtest_purge_readonlys rcCshddiddid}ddddddidd}t||d }d d d id }d d ddd }t||||dS)Nr rr{)metaversionzcfg.yaml)r r)cfg_pathpackagerrBz1.2.3rrA)rZ plugin_foo)rrr|)rrCr.rrrrr%test_defaults_in_allow_unknown_schemas rN)>rrZtempfilerZpytestrZcerberusrrZcerberus.testsrrr r rrr#r(r/r0r3r9r<r?r@rFr[rdrgrlrprsrtrwrxr}rrrrrrZ parametrizerrrrrrrrrrrrrrrrrrrrrrrs