diff --git a/src/caoscrawler/hdf5_converter.py b/src/caoscrawler/hdf5_converter.py index 5824301026cacd9a9d8e896a68ed21ebc7e80a83..4a548dd30a231f0dbe50862ef4d31972f9804a64 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