From 9249b510dbd20cb24e949703624126bb41e557bd Mon Sep 17 00:00:00 2001
From: fspreck <f.spreckelsen@indiscale.com>
Date: Tue, 6 Jun 2023 16:10:21 +0200
Subject: [PATCH] WIP: Begin dataset converter class

---
 src/caoscrawler/hdf5_converter.py | 49 +++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/src/caoscrawler/hdf5_converter.py b/src/caoscrawler/hdf5_converter.py
index 58243010..4a548dd3 100644
--- a/src/caoscrawler/hdf5_converter.py
+++ b/src/caoscrawler/hdf5_converter.py
@@ -87,3 +87,52 @@ class H5FileConverter(SimpleFileConverter):
         children.extend(__convert_attributes(ff))
 
         return children
+
+
+class H5GroupConverter(DictElementConverter):
+
+    def typecheck(self, element: StructureElement):
+
+        return isinstance(element, H5GroupElement)
+
+    def create_children(self, generalStore: GeneralStore, element: StructureElement):
+
+        if not isinstance(element.value, h5py.Group):
+
+            raise ValueError("create_children should have been called with a HDF5 Group object.")
+
+        children = []
+
+        for name, value in element.value.items():
+
+            children.append(__convert_h5_elements(value, name))
+
+        children.append(self._create_children_from_dict(element.value.attrs))
+
+        return children
+
+
+class H5DatasetConverter(DictElementConverter):
+
+    def typecheck(self, element: StructureElement):
+
+        return isinstance(element, H5DatasetElement)
+
+    def create_children(self, generalStore: GeneralStore, element: StructureElement):
+
+        if not isinstance(element.value, h5py.Dataset):
+
+            raise ValueError("create_children should have been called with a HDF5 Dataset object")
+
+        return self._create_children_from_dict(element.value.attrs)
+
+    def create_records(self, values: GeneralStore, records: RecordStore, element: StructureElement):
+
+        keys_modified = []
+
+        # TODO: Create the Dataset Record that holds the reference to the HDF5
+        # file and its internal path to the dataset.
+
+        keys_modified.append(super().create_records(values, records, element))
+
+        return keys_modified
-- 
GitLab