buildtesters/buildtest

Use latest jsonschema version v4.18 or higher

shahzebsiddiqui opened this issue · 2 comments

According to https://github.com/python-jsonschema/jsonschema/releases/tag/v4.18.0 the RefResolver has been deprecated in favor of referencing library which requires a bit of work to change the codebase. This will impact the way we call custom_validator method

resolver = RefResolver.from_schema(
schema_table["definitions.schema.json"]["recipe"], store=schema_store
)
def custom_validator(recipe, schema):
"""This is a custom validator for validating JSON documents. We implement a
custom resolver using `RefResolver <https://python-jsonschema.readthedocs.io/en/stable/references/#jsonschema.RefResolver>`_
to find schemas locally in order to validate buildspecs with schema files on local filesystem. This ensures changes to
schema can be done in sync with change to code base.
This method uses `Draft7Validator <https://python-jsonschema.readthedocs.io/en/stable/validate/#jsonschema.Draft7Validator>`_
for validating schemas. If there is an error during validation jsonschema will raise an exception of type
`jsonschema.exceptions.ValidationError <https://python-jsonschema.readthedocs.io/en/stable/errors/#jsonschema.exceptions.ValidationError>`_
Args:
recipe (dict): Loaded test recipe as YAML document
schema (dict): Schema document loaded in JSON format
Raises:
jsonschema.exceptions.ValidationError: if recipe fails to validate with schema
"""
# making sure input recipe and schema are dictionary
assert isinstance(recipe, dict)
assert isinstance(schema, dict)
validator = Draft7Validator(schema, resolver=resolver)
validator.validate(recipe)

What we need to do

To summarize the following line needs to be changed since resolver needs to be handled via Registry().with_resource()

resolver = RefResolver.from_schema(
    schema_table["definitions.schema.json"]["recipe"], store=schema_store
)

For more details also check out https://python-jsonschema.readthedocs.io/en/stable/referencing/

@Xiangs18 i created a PR #1793 so feel free to get started from here.

this was addressed in #1802