Skip to content

Commit

Permalink
Make datamodel versions accessible from python
Browse files Browse the repository at this point in the history
  • Loading branch information
tmadlener committed Aug 28, 2024
1 parent 437e555 commit 1b81ea4
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
20 changes: 20 additions & 0 deletions python/podio/base_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,23 @@ def get_podio_version(self):
write this file
"""
return self._reader.currentFileVersion()

def get_datamodel_version(self, edm_name):
"""Get the datamodel version
Args:
edm_name (str): The package name of the datamodel
Returns:
podio.version.Version: The version of the datamodel if available
Raises:
KeyError: If the datamodel does not have a version stored
RuntimeError: If the reader is a legacy reader
"""
if self._is_legacy:
raise RuntimeError("Legacy readers do not store any version info")
maybe_version = self._reader.currentFileVersion(edm_name)
if maybe_version.has_value():
return maybe_version.value()
raise KeyError(f"No version information available for '{edm_name}'")
19 changes: 19 additions & 0 deletions python/podio/test_Reader.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/usr/bin/env python3
"""Unit tests for podio readers"""

from podio.version import build_version


class ReaderTestCaseMixin:
"""Common unittests for readers.
Expand Down Expand Up @@ -70,6 +72,23 @@ def test_frame_iterator_invalid_category(self):
i += 1
self.assertEqual(i, 0)

def test_available_datamodels(self):
"""Make sure that the datamodel information can be retrieved"""
datamodels = self.reader.datamodel_definitions
self.assertEqual(len(datamodels), 2)
for model in datamodels:
self.assertTrue(model in ("datamodel", "extension_model"))

self.assertEqual(self.reader.get_datamodel_version("datamodel"), build_version)

def test_invalid_datamodel_version(self):
"""Make sure that the necessary exceptions are raised"""
with self.assertRaises(KeyError):
self.reader.get_datamodel_version("extension_model")

with self.assertRaises(KeyError):
self.reader.get_datamodel_version("non-existant-model")


class LegacyReaderTestCaseMixin:
"""Common test cases for the legacy readers python bindings.
Expand Down
12 changes: 8 additions & 4 deletions tools/podio-dump
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,14 @@ def print_general_info(reader, filename):
f"input file: {filename}{legacy_text}\n"
f" (written with podio version: {version_as_str(reader.get_podio_version())})\n"
)
print(
"datamodel model definitions stored in this file: "
f'{", ".join(reader.datamodel_definitions)}'
)

print("datamodel model definitions stored in this file: ")
for edm_name in reader.datamodel_definitions:
try:
edm_version = reader.get_datamodel_version(edm_name)
print(f" - {edm_name} ({version_as_str(edm_version)})")
except KeyError:
print(f" - {edm_name}")

print()
print("Frame categories in this file:")
Expand Down

0 comments on commit 1b81ea4

Please sign in to comment.