From e1809e34f1345adf7f62b4ddfd4cd32a7c741a36 Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:00:26 -0400 Subject: [PATCH 1/3] Update pynwb_utils.py --- dandi/pynwb_utils.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/dandi/pynwb_utils.py b/dandi/pynwb_utils.py index f4d809664..faed185c3 100644 --- a/dandi/pynwb_utils.py +++ b/dandi/pynwb_utils.py @@ -335,23 +335,27 @@ def validate( path = str(path) # Might come in as pathlib's PATH errors: List[ValidationResult] = [] try: - with pynwb.NWBHDF5IO(path, "r", load_namespaces=True) as reader: - error_outputs = pynwb.validate(reader) - # TODO: return ValidationResult structs - for error_output in error_outputs: - errors.append( - ValidationResult( - origin=ValidationOrigin( - name="pynwb", - version=pynwb.__version__, - ), - severity=Severity.WARNING, - id=f"pywnb.{error_output}", - scope=Scope.FILE, - path=Path(path), - message="Failed to validate.", + if Version(pynwb.__version__) >= Version("2.2.0"): # Use cached namespace feature + # argument get_cached_namespaces is True by default + error_outputs, _ = pynwb.validate(paths=[path]) + else: # Fallback if an older version + with pynwb.NWBHDF5IO(path=path, mode="r", load_namespaces=True) as reader: + error_outputs = pynwb.validate(io=reader) + # TODO: return ValidationResult structs + for error_output in error_outputs: + errors.append( + ValidationResult( + origin=ValidationOrigin( + name="pynwb", + version=pynwb.__version__, + ), + severity=Severity.WARNING, + id=f"pywnb.{error_output}", + scope=Scope.FILE, + path=Path(path), + message="Failed to validate.", + ) ) - ) except Exception as exc: if devel_debug: raise From 921f67ac1be840930ebe01743f8f58067afae315 Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:12:44 -0400 Subject: [PATCH 2/3] Update pynwb_utils.py --- dandi/pynwb_utils.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/dandi/pynwb_utils.py b/dandi/pynwb_utils.py index faed185c3..40558223d 100644 --- a/dandi/pynwb_utils.py +++ b/dandi/pynwb_utils.py @@ -341,21 +341,21 @@ def validate( else: # Fallback if an older version with pynwb.NWBHDF5IO(path=path, mode="r", load_namespaces=True) as reader: error_outputs = pynwb.validate(io=reader) - # TODO: return ValidationResult structs - for error_output in error_outputs: - errors.append( - ValidationResult( - origin=ValidationOrigin( - name="pynwb", - version=pynwb.__version__, - ), - severity=Severity.WARNING, - id=f"pywnb.{error_output}", - scope=Scope.FILE, - path=Path(path), - message="Failed to validate.", - ) - ) + # TODO: return ValidationResult structs + for error_output in error_outputs: + errors.append( + ValidationResult( + origin=ValidationOrigin( + name="pynwb", + version=pynwb.__version__, + ), + severity=Severity.WARNING, + id=f"pywnb.{error_output}", + scope=Scope.FILE, + path=Path(path), + message="Failed to validate.", + ) + ) except Exception as exc: if devel_debug: raise From d7ab706936aabb9e59038555146c420e474c46ef Mon Sep 17 00:00:00 2001 From: Cody Baker <51133164+CodyCBakerPhD@users.noreply.github.com> Date: Tue, 1 Nov 2022 14:17:43 -0400 Subject: [PATCH 3/3] Update pynwb_utils.py --- dandi/pynwb_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dandi/pynwb_utils.py b/dandi/pynwb_utils.py index 40558223d..5a34c38fa 100644 --- a/dandi/pynwb_utils.py +++ b/dandi/pynwb_utils.py @@ -10,6 +10,7 @@ from fscacher import PersistentCache import h5py import hdmf +from packaging.version import Version import pynwb from pynwb import NWBHDF5IO import semantic_version