Skip to content

Commit

Permalink
Have metadata-validate returning what I want now
Browse files Browse the repository at this point in the history
  • Loading branch information
marc-white committed Oct 27, 2024
1 parent 53bbaf0 commit 8d89756
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/access_nri_intake/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,18 @@ def validate_against_schema(instance: dict, schema: dict) -> None:
Validator, type_checker=type_checker
)

issues = TupleAllowingValidator(schema).iter_errors(instance)
issues = list(TupleAllowingValidator(schema).iter_errors(instance))

if len(list(issues)) > 0:
if len(issues) > 0:
issue_str = ""
for issue in issues:
issue_str += f"{ issue.message }\n"
for i, issue in enumerate(issues):
try:
issue_str += (
f"\n{i+1:02d} | {issue.absolute_path[0]} : { issue.message };"
)
except IndexError: # Must be a missing keyword, not a bad type/value
issue_str += f"\n{i+1:02d} | missing : { issue.message };"
# raise jsonschema.ValidationError(textwrap.fill(textwrap.dedent(issue_str)))
raise jsonschema.ValidationError(issue_str)

return
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
created: '2024-02-27'
model: ACCESS-OM3
description: An early ACCESS-OM3 test run
long_description: An early ACCESS-OM3 test run
url: git@github.com:COSIMA/MOM6-CICE6-WW3.git
contact: dougiesquire
email: dougiesquire@gmail.com
21 changes: 21 additions & 0 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
# SPDX-License-Identifier: Apache-2.0

import datetime
from pathlib import Path

import jsonschema
import pytest
import yaml

from access_nri_intake.catalog import EXP_JSONSCHEMA
from access_nri_intake.utils import (
get_jsonschema,
load_metadata_yaml,
Expand Down Expand Up @@ -68,3 +71,21 @@ def test_validate_against_schema(instance):
},
}
validate_against_schema(instance, schema)


@pytest.mark.parametrize(
"instance,no_errs",
[
("bad_metadata/metadata-missing-name.yaml", 1),
("bad_metadata/metadata-missing-name-missing-uuid.yaml", 2),
],
)
def test_bad_metadata_validation_raises(test_data, instance, no_errs):
fpath = str(test_data / Path(instance))

try:
_ = load_metadata_yaml(fpath, EXP_JSONSCHEMA)
except jsonschema.ValidationError as e:
assert f"{no_errs:02d}" in e.message, "Can't see the right number of errors!"
except Exception:
assert False, "load_metadata_yaml didn't raise jsonschema.ValidationError"

0 comments on commit 8d89756

Please sign in to comment.