diff --git a/jsonschema/validators.py b/jsonschema/validators.py index 3acee870a..bdd3765d9 100644 --- a/jsonschema/validators.py +++ b/jsonschema/validators.py @@ -102,10 +102,10 @@ def _validates(cls): return _validates -def _warn_for_remote_retrieve(uri: str): +def _warn_for_remote_retrieve(uri): from urllib.request import Request, urlopen headers = {"User-Agent": "python-jsonschema (deprecated $ref resolution)"} - request = Request(uri, headers=headers) + request = Request(str(uri), headers=headers) with urlopen(request) as response: warnings.warn( "Automatically retrieving remote references can be a security " @@ -130,6 +130,10 @@ def _warn_for_remote_retrieve(uri: str): ) +def _str_id_of(specification): + return lambda schema: str(specification.id_of(schema)) + + def create( meta_schema: referencing.jsonschema.ObjectSchema, validators: ( @@ -139,7 +143,7 @@ def create( version: str | None = None, type_checker: _types.TypeChecker = _types.draft202012_type_checker, format_checker: _format.FormatChecker = _format.draft202012_format_checker, - id_of: _typing.id_of = referencing.jsonschema.DRAFT202012.id_of, + id_of: _typing.id_of = _str_id_of(referencing.jsonschema.DRAFT202012), applicable_validators: _typing.ApplicableValidators = methodcaller( "items", ), @@ -611,7 +615,7 @@ def extend( type_checker=_types.draft3_type_checker, format_checker=_format.draft3_format_checker, version="draft3", - id_of=referencing.jsonschema.DRAFT3.id_of, + id_of=_str_id_of(referencing.jsonschema.DRAFT3), applicable_validators=_legacy_keywords.ignore_ref_siblings, ) @@ -650,7 +654,7 @@ def extend( type_checker=_types.draft4_type_checker, format_checker=_format.draft4_format_checker, version="draft4", - id_of=referencing.jsonschema.DRAFT4.id_of, + id_of=_str_id_of(referencing.jsonschema.DRAFT4), applicable_validators=_legacy_keywords.ignore_ref_siblings, ) @@ -694,7 +698,7 @@ def extend( type_checker=_types.draft6_type_checker, format_checker=_format.draft6_format_checker, version="draft6", - id_of=referencing.jsonschema.DRAFT6.id_of, + id_of=_str_id_of(referencing.jsonschema.DRAFT6), applicable_validators=_legacy_keywords.ignore_ref_siblings, ) @@ -739,7 +743,7 @@ def extend( type_checker=_types.draft7_type_checker, format_checker=_format.draft7_format_checker, version="draft7", - id_of=referencing.jsonschema.DRAFT7.id_of, + id_of=_str_id_of(referencing.jsonschema.DRAFT7), applicable_validators=_legacy_keywords.ignore_ref_siblings, ) @@ -940,7 +944,7 @@ def __init__( def from_schema( # noqa: D417 cls, schema, - id_of=referencing.jsonschema.DRAFT202012.id_of, + id_of=_str_id_of(referencing.jsonschema.DRAFT202012), *args, **kwargs, ): diff --git a/pyproject.toml b/pyproject.toml index 26d299a36..4b4a8b6b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,8 +36,8 @@ dynamic = ["version", "readme"] dependencies = [ "attrs>=22.2.0", "jsonschema-specifications>=2023.03.6", - "referencing>=0.28.4", - "rpds-py>=0.7.1", + "referencing>=0.31.0", + "rpds-py>=0.10.2", "importlib_resources>=1.4.0;python_version<'3.9'", "pkgutil_resolve_name>=1.3.10;python_version<'3.9'",