- Release using the newer twine release to preserve PEP 639 license metadata.
- Add a lower pin on
typing-extensions
for the version we depend on.
- Declare support for Python 3.13.
- Make
Resource.pointer
also properly handle empty pointers (which refer to the root document). This fix likely only affects you if you were using that function directly, asResource.lookup
already handles empty fragments.
- Ensure that
Registry.contents()
also raisesNoSuchResource
exceptions for nonexistent resources, notKeyError
(which is an implementation detail).
- Also look inside
definitions
keywords even on newer dialects. The specification recommends doing so regardless of the rename to$defs
.
- Add a
referencing.jsonschema.SchemaResource
type alias to go along with the other JSON Schema specialized types.
- Make
Specification.detect
raise aCannotDetermineSpecification
error even if passed a mapping with a$schema
key that doesn't match JSON Schema dialect semantics (e.g. a non-string).
- Add
Specification.detect
, which essentially operates likeResource.from_contents
without 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
sdist
contains 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#foo
now works even if the resource has some internal$id
saying its canonical URI ishttp://somethingelse.example.com
.
- Further API documentation.
- Add some documentation on
referencing
public 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.py
used, 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
additionalProperties
with boolean value on Draft 4 (where the boolean isn't a schema, it's a special allowed value)
- Add a bit of intro documentation
pyrsistent
was 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.