From e8cba835c79a97757e4da1813357fee06f6f3444 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Mon, 20 Jul 2026 11:17:25 +0200 Subject: [PATCH 1/4] add metadata_dd_version in the metadata --- src/simdb/imas/metadata.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/simdb/imas/metadata.py b/src/simdb/imas/metadata.py index 6f077167..75a78eb9 100644 --- a/src/simdb/imas/metadata.py +++ b/src/simdb/imas/metadata.py @@ -8,6 +8,8 @@ from simdb.remote.models import _array_to_range +METADATA_DD_VERSION_KEY = "metadata_dd_version" + class MetricException(Exception): pass @@ -121,13 +123,13 @@ def load_imas_metadata(ids_dist, entry) -> dict: :return: Dictionary containing metadata. """ - metadata = {} + latest_dd_version = imas.dd_zip.latest_dd_version() + if latest_dd_version is None: + raise ValueError("Could not determine the latest DD version.") + + metadata = {METADATA_DD_VERSION_KEY: latest_dd_version} for ids_name, _v in ids_dist.items(): ids = entry.get(ids_name, autoconvert=False) - # Explicitly convert the IDS to the target version - latest_dd_version = imas.dd_zip.latest_dd_version() - if latest_dd_version is None: - raise ValueError("Could not determine the latest DD version.") ids = imas.convert_ids(ids, latest_dd_version) for node in imas.util.tree_iter(ids): metadata[extract_ids_path(str(node.coordinates)).replace("/", ".")] = ( # type: ignore From cfaff7ce5691abd561a191b55470657ccf87c17f Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Tue, 21 Jul 2026 15:23:00 +0200 Subject: [PATCH 2/4] check latest version corresponds to a major version 4 and removed METADATA_DD_VERSION_KEY constant --- pyproject.toml | 2 +- src/simdb/imas/metadata.py | 20 ++++++++++++++++---- uv.lock | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3e93cfb7..78bff8e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ "click_option_group>=0.5", "distro>=1.8.0", "email-validator>=1.1", - "imas-python", + "imas-python>=2.0.1", "netCDF4>=1.5", "numpy>=1.14", "pydantic>=2.10.6", diff --git a/src/simdb/imas/metadata.py b/src/simdb/imas/metadata.py index 75a78eb9..f002eab5 100644 --- a/src/simdb/imas/metadata.py +++ b/src/simdb/imas/metadata.py @@ -5,11 +5,10 @@ import imas import imas.dd_zip import imas.ids_defs +from semantic_version import Version from simdb.remote.models import _array_to_range -METADATA_DD_VERSION_KEY = "metadata_dd_version" - class MetricException(Exception): pass @@ -125,9 +124,22 @@ def load_imas_metadata(ids_dist, entry) -> dict: latest_dd_version = imas.dd_zip.latest_dd_version() if latest_dd_version is None: - raise ValueError("Could not determine the latest DD version.") + raise RuntimeError("Could not determine the data dictionary version.") - metadata = {METADATA_DD_VERSION_KEY: latest_dd_version} + try: + parsed_dd_version = Version(latest_dd_version) + except ValueError as exc: + raise RuntimeError( + f"Could not parse the data dictionary version: {latest_dd_version!r}." + ) from exc + + if parsed_dd_version.major >= 5: + raise RuntimeError( + f"Unsupported data dictionary version {latest_dd_version!r}: " + "expected a major version lower than 5." + ) + + metadata = {"metadata_dd_version": latest_dd_version} for ids_name, _v in ids_dist.items(): ids = entry.get(ids_name, autoconvert=False) ids = imas.convert_ids(ids, latest_dd_version) diff --git a/uv.lock b/uv.lock index 94ddb1f1..b0072613 100644 --- a/uv.lock +++ b/uv.lock @@ -2863,7 +2863,7 @@ requires-dist = [ { name = "flask-cors", marker = "extra == 'server'", specifier = ">=3" }, { name = "flask-mail", marker = "extra == 'server'", specifier = "~=0.9.1" }, { name = "flask-restx", marker = "extra == 'server'", specifier = ">=1.0.0" }, - { name = "imas-python" }, + { name = "imas-python", specifier = ">=2.0.1" }, { name = "imas-simdb", extras = ["auth-ad", "auth-keycloak", "auth-ldap"], marker = "extra == 'auth'" }, { name = "imas-simdb", extras = ["imas-validator", "postgres", "server"], marker = "extra == 'all'" }, { name = "imas-validator", marker = "extra == 'imas-validator'", specifier = ">=1.0.0" }, From 73dab3c7c03d5f59a14bba2b82982f606d4f2815 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Tue, 21 Jul 2026 16:06:38 +0200 Subject: [PATCH 3/4] fixed Unsupported >= operation --- src/simdb/imas/metadata.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/simdb/imas/metadata.py b/src/simdb/imas/metadata.py index f002eab5..1531b906 100644 --- a/src/simdb/imas/metadata.py +++ b/src/simdb/imas/metadata.py @@ -133,7 +133,14 @@ def load_imas_metadata(ids_dist, entry) -> dict: f"Could not parse the data dictionary version: {latest_dd_version!r}." ) from exc - if parsed_dd_version.major >= 5: + dd_major_version = parsed_dd_version.major + if not isinstance(dd_major_version, int): + raise RuntimeError( + f"Could not determine the major data dictionary version from " + f"{latest_dd_version!r}." + ) + + if dd_major_version >= 5: raise RuntimeError( f"Unsupported data dictionary version {latest_dd_version!r}: " "expected a major version lower than 5." From 74192baa7324b1a2fa5eeac27244dc682bfb0c52 Mon Sep 17 00:00:00 2001 From: prasad-sawantdesai Date: Tue, 21 Jul 2026 16:37:50 +0200 Subject: [PATCH 4/4] updated condition and wording for dd major version check --- src/simdb/imas/metadata.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/simdb/imas/metadata.py b/src/simdb/imas/metadata.py index 1531b906..17cc0d3d 100644 --- a/src/simdb/imas/metadata.py +++ b/src/simdb/imas/metadata.py @@ -140,10 +140,9 @@ def load_imas_metadata(ids_dist, entry) -> dict: f"{latest_dd_version!r}." ) - if dd_major_version >= 5: + if dd_major_version > 4: raise RuntimeError( f"Unsupported data dictionary version {latest_dd_version!r}: " - "expected a major version lower than 5." ) metadata = {"metadata_dd_version": latest_dd_version}