Skip to content

Commit

Permalink
Toggle legacy behavior in validate_dandi_nwb() via DANDI_SCHEMA envvar
Browse files Browse the repository at this point in the history
  • Loading branch information
jwodder committed Dec 2, 2020
1 parent 28cc8ac commit c6c5329
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 14 deletions.
3 changes: 2 additions & 1 deletion dandi/tests/test_validate.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from ..validate import validate_file


def test_validate_simple1(simple1_nwb):
def test_validate_simple1(monkeypatch, simple1_nwb):
monkeypatch.setenv("DANDI_SCHEMA", "1")
# this file lacks subject_id
errors = validate_file(simple1_nwb)
assert len(errors) == 1
Expand Down
35 changes: 22 additions & 13 deletions dandi/validate.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
import os.path as op
from .consts import dandiset_metadata_file

from .metadata import get_metadata
from .pynwb_utils import validate as pynwb_validate, validate_cache
from .utils import find_dandi_files, yaml_load

Expand Down Expand Up @@ -47,18 +48,26 @@ def validate_dandiset_yaml(filepath):
def validate_dandi_nwb(filepath):
"""Provide validation of .nwb file regarding requirements we impose
"""
from pydantic import ValidationError
from .metadata import nwb2asset
from .models import AssetMeta

try:
asset = nwb2asset(filepath, digest="dummy_value", digest_type="sha1")
AssetMeta(**asset.dict())
except ValidationError as e:
return [str(e)]
except Exception as e:
return [f"Failed to read metadata: {e}"]
return []
if os.environ.get("DANDI_SCHEMA"):
from pydantic import ValidationError
from .metadata import nwb2asset
from .models import AssetMeta

try:
asset = nwb2asset(filepath, digest="dummy_value", digest_type="sha1")
AssetMeta(**asset.dict())
except ValidationError as e:
return [str(e)]
except Exception as e:
return [f"Failed to read metadata: {e}"]
return []
else:
# make sure that we have some basic metadata fields we require
try:
meta = get_metadata(filepath)
except BaseException as e:
return [f"Failed to read metadata: {e}"]
return _check_required_fields(meta, _required_nwb_metadata_fields)


def _check_required_fields(d, required):
Expand Down

0 comments on commit c6c5329

Please sign in to comment.