U !` @s dZddlZddlmZddlmZddlmZmZddl m Z m Z ddl m Z ddlmZmZmZmZdd lmZed ed d ed ddddddgddiddidddgigddiddddZdddddidddeeddddd dd!d"d#d$ddid%d&id'd(dddejegd)d*d+d,id+d-igd.d-dd/ddid0d1d2eidd3idd d4d d5Zd6d7Zd8d9Ze e ed:d;d<Z e j!d=d>d?d@Z"edAdBdCZ#edAdDdEZ$edAdFdGZ%edAdHdIZ&dJdKZ'dLdMZ(dNdOZ)e*dPkre)dS)Qa some notes regarding this test suite: - results are only comparable using the semantically equal schema against and identical set of documents in the same execution environment - the module can be executed to generate a new set of test documents - it is intended to detect *significant* changes in validation time - benchmarks should run with as few other processes running on the system as possible (e.g. an Alpine Linux on bare metal w/o a Desktop environment) N)Counter)Path)choice randrange)CallableList)mark)rules_set_registryschema_registryTypeDefinition Validator)DOCUMENTS_PATHZ path_rulespath)coercetypeZfield_3_schemaF)containsemptyrZintegerstringnullableT)defaultitemsschema)field_31field_32cCst|dkr||ddS)N zRequires a smaller list.)len)Zfieldvalueerrorr_/opt/alt/python38/lib/python3.8/site-packages/cerberus/benchmarks/test_overall_performance_1.py)schema_1_field_3_allow_unknown_check_with,s r dictZregexzfield_1[12345]d)field_12z^field_1.field_13)rZallowed dependenciescCsdSNr)_rrrAr*)r()rZdefault_setterZ forbiddenrenamefield_13)field_11r%r-field_14)rZrequired allow_unknownZ keysrulesZ minlengthZ maxlengthrrYr&field_22field_23)rrminmaxZanyof)Zexcludesr)field_21r2r3)rr0rZ check_withlist)r0Z valuesrulesZ require_allr)Zfield_1Zfield_2Zfield_3Zfield_4cCsGdddt}|tddS)Nc@s$eZdZejdedefdiZdS)z%init_validator..TestValidatorrrN)__name__ __module__ __qualname__r Z types_mappingr rrrrr TestValidatorbs r;T)Z purge_unknown)r schema_1)r;rrrinit_validatorasr=c Cs&td}t|}W5QRX|S)Noverall_documents_1.json)r openjsonload)f documentsrrrload_documentsksrD)r=rCcsd}}t|}fdd|D],}||dkrJ|d7}|j|d7}q&t|d|dtdtdd D]\}}t|d |qdS) Nrcs>|dkr dS|D](}|jr&|jq|jd7<qdSr')Zis_group_errorZ child_errorsZ schema_path)errorsr count_errorsZ error_pathsrrrGvs  z(validate_documents..count_errorsr(z out of z documents failed with z different error leafs.z)Top 3 errors, excluding container errors:r"z: )rZ validatedZ_errorsprintr most_common)r=rCZ doc_countZ failed_countZ validatorZdocumentrcountrrFrvalidate_documentsqs   rKz overall-1)groupcCs|jtttfdddS)Nr#)rounds)ZpedanticrKr=rD) benchmarkrrrtest_overall_performance_1srO)returncCs6i}dD](}tdrtd||d|<q|S)N)r(r"r#r$Zgenerate_document_1_field_Zfield_)rglobals)resultirrrgenerate_sample_document_1s rVcCsBtddd}tdrd|d<tds.d|d<tdr>d|d<|S)Nr$r)r.r-r%r/Zfield_15rrTrrrgenerate_document_1_field_1srYcCsTtds dnd}d|ttd|i}tdr8d|d<d|krPtdsPd|d<|S)N2* r6r$r2r3)rstr)xrTrrrgenerate_document_1_field_2sr_cCsti}tdr(ddttdD|d<nd|d<tdrRtdtdtdg|d <td spd gtd d |d <|S)Nr$cSsg|] }tdqS)rQrW.0r)rrr sz/generate_document_1_field_3..r) rrrrrrrrN) rdrdrdrdrdrdrdrdrN) rrrrrdrdrdrdNr rr(Z 3_unknown)rrangerrXrrrgenerate_document_1_field_3srgcCstdr dSdS)Nr$z/foo/barrrWrrrrgenerate_document_1_field_4srhcCsdS)Nrrrrrgenerate_document_1_field_5sric Cs8tdd }tddtdD|W5QRXdS)Nr>ZwtcSsg|] }tqSr)rVr`rrrrbsz*write_sample_documents..i')r r?r@dumprf)rBrrrwrite_sample_documentssrk__main__)+__doc__r@ collectionsrpathlibrZrandomrrtypingrrZpytestrZcerberusr r r r Zcerberus.benchmarksr addr r7rfr]stripintr<r=rDr!rKrNrOrVrYr_rgrhrirkr8rrrrs       0