Skip to content

[Python] Release 0.61.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 16:43
· 19 commits to master since this release
946d715

Fixed

  • . in pattern and patternProperties matched \r, U+2028 and U+2029 (it should reject every line terminator).
  • evaluate() reported a missing single required name beside additionalProperties: false at /additionalProperties (it should be /required).
  • Numeric keywords misjudging whole floats past 2^53. #1825
  • Building a validator with an explicit draft retrieving the schema's $schema URI.
  • format: "date-time", "date" and "time" accepting +, ,, -, . or / where RFC 3339 requires a digit. #1829
  • Numeric keywords misjudging instances against whole floats past 2^53 in the schema. #1825
  • $ref pointers through a numeric object key (#/responses/200) skipping the references under their target.
  • oneOf / anyOf rejecting valid instances when a $ref inside a branch sits under an $id.
  • unevaluatedItems treated every element as evaluated beside a non-schema items value (it should evaluate none).

Performance

  • Building validators up to 15% faster on schemas that repeat the same $ref, from resolving each reference once.
  • Evaluation.list() up to 4x and Evaluation.hierarchical() up to 6x faster, from building output units directly as Python objects.
  • Building registries up to 30% faster and validators up to 3% faster, from a cheaper walk over schema documents.
  • Building validators up to 25% faster on schemas that declare a base URI, from building absolute keyword locations on first use.
  • Building validators up to 3% faster, from cheaper compilation cache keys.
  • Validation errors on large values up to 40% faster, from returning the validated object as ValidationError.instance instead of a copy.
  • oneOf / anyOf up to 7x faster when branches fix a property with const or enum.
  • oneOf / anyOf skip branches that exclude the instance's value with not over enum or const.
  • properties up to 40% faster on objects with a few more keys than it declares.
  • minLength / maxLength skip counting code points when the byte length decides.
  • pattern starting with lookaheads (^(?=...)(?=...)...) up to 2x faster.
  • properties and additionalProperties up to 13% faster on schemas declaring 15 or more properties.
  • properties up to 12% faster on objects with keys it does not declare.
  • unevaluatedProperties up to 10% faster on schemas that combine it with patternProperties or applicators.
  • required up to 40% faster when it lists every property of an object closed by additionalProperties: false.
  • properties, anyOf and other applicators faster on subschemas that only check a non-numeric type, directly or through $ref.
  • evaluate() up to 20% faster on instances with many errors, from fewer allocations per error.
  • evaluate() up to 20% faster, from rendering instance locations only when the output reads them.
  • is_valid() and validate() up to 14% faster on small instances, from a cheaper per-call validation context.