- Declare support for Python 3.14.
- Drop support for Python 3.9 which is near EOL.
- Release using the newer twine release to preserve PEP 639 license metadata.
- Add a lower pin on
typing-extensionsfor the version we depend on.
- Declare support for Python 3.13.
- Make
Resource.pointeralso properly handle empty pointers (which refer to the root document). This fix likely only affects you if you were using that function directly, asResource.lookupalready handles empty fragments.
- Ensure that
Registry.contents()also raisesNoSuchResourceexceptions for nonexistent resources, notKeyError(which is an implementation detail).
- Also look inside
definitionskeywords even on newer dialects. The specification recommends doing so regardless of the rename to$defs.
- Add a
referencing.jsonschema.SchemaResourcetype alias to go along with the other JSON Schema specialized types.
- Make
Specification.detectraise aCannotDetermineSpecificationerror even if passed a mapping with a$schemakey that doesn't match JSON Schema dialect semantics (e.g. a non-string).
- Add
Specification.detect, which essentially operates likeResource.from_contentswithout constructing a resource (i.e. it simply returns the detected specification).
- No user facing changes.
- Add
referencing.jsonschema.EMPTY_REGISTRY(which simply has a convenient type annotation, but otherwise is justRegistry()).
- Minor docs improvement.
- Ensure that an
sdistcontains the test suite JSON files.
- Declare support for Python 3.12.
- Documentation fix.
- Improve the hashability of exceptions when they contain hashable data.
- Minor docs improvement.
- Add
referencing.retrieval.to_cached_resource, a simple caching decorator useful when writing a retrieval function turning JSON text into resources without repeatedly hitting the network, filesystem, etc.
- No user-facing changes.
- Fix a type annotation and fill in some missing test coverage.
- Fix a type annotation.
- No user-facing changes.
- Added some additional packaging trove classifiers.
- More minor documentation improvements
- Minor documentation improvement
- Minor simplification to the docs structure.
- Also strip fragments when using
__getitem__on URIs with empty fragments.
- Another fix for looking up anchors from non-canonical URIs, now when they're inside a subresource which has a relative
$id.
- Improve a small number of docstrings.
- Support looking up anchors from non-canonical URIs.
In other words, if you add a resource at the URI
http://example.com, then looking up the anchorhttp://example.com#foonow works even if the resource has some internal$idsaying its canonical URI ishttp://somethingelse.example.com.
- Further API documentation.
- Add some documentation on
referencingpublic and non-public API.
- Also suggest a proper JSON Pointer for users who accidentally use
#/and intend to refer to the entire resource.
- No changes.
- Attempt to suggest a correction if someone uses '#foo/bar', which is neither a valid plain name anchor (as it contains a slash) nor a valid JSON pointer (as it doesn't start with a slash)
- Normalize the ID of JSON Schema resources with empty fragments (by removing the fragment). Having a schema with an ID with empty fragment is discouraged, and newer versions of the spec may flat-out make it an error, but older meta-schemas indeed used IDs with empty fragments, so some extra normalization was needed and useful here even beyond what was previously done. TBD on whether this is exactly right if/when another referencing spec defines differing behavior.
- Minor tweaks to the package keywords and description.
- Minor internal tweaks to the docs configuration.
- Bump the minimum version of
rpds.pyused, enabling registries to be used from multiple threads.
- Fix handling of IDs with empty fragments (which are equivalent to URIs with no fragment)
- Further intro documentation
- Fix handling of
additionalPropertieswith boolean value on Draft 4 (where the boolean isn't a schema, it's a special allowed value)
- Add a bit of intro documentation
pyrsistentwas replaced withrpds.py(Python bindings to the Rust rpds crate), which seems to be quite a bit faster. No user-facing changes really should be expected here.