From b718dc29f80cb9890b69997bd8a5aadb9e9dc87e Mon Sep 17 00:00:00 2001 From: Isaac To Date: Fri, 19 Jan 2024 12:03:51 -0800 Subject: [PATCH] Use JSON Schema validator for Draft 2020-12 in `_validate_obj_json` For dandi JSON schema 0.7.0 or above --- dandischema/metadata.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dandischema/metadata.py b/dandischema/metadata.py index 072710cb..165c7c73 100644 --- a/dandischema/metadata.py +++ b/dandischema/metadata.py @@ -146,9 +146,17 @@ def publish_model_schemata(releasedir: Union[str, Path]) -> Path: def _validate_obj_json(data: dict, schema: dict, missing_ok: bool = False) -> None: - validator = jsonschema.Draft7Validator( - schema, format_checker=jsonschema.Draft7Validator.FORMAT_CHECKER - ) + if version2tuple(data["schemaVersion"]) >= version2tuple("0.7.0"): + # schema version 0.7.0 and above is produced with Pydantic V2 + # which is compliant with JSON Schema Draft 2020-12 + validator = jsonschema.Draft202012Validator( + schema, format_checker=jsonschema.Draft202012Validator.FORMAT_CHECKER + ) + else: + validator = jsonschema.Draft7Validator( + schema, format_checker=jsonschema.Draft7Validator.FORMAT_CHECKER + ) + error_list = [] for error in sorted(validator.iter_errors(data), key=str): if missing_ok and "is a required property" in error.message: