mirror of
https://github.com/ivan-usov-org/bec.git
synced 2025-04-22 02:20:02 +02:00
refactor: removed outdated xml writer
This commit is contained in:
parent
23f872127b
commit
c9bd0928ea
@ -1,3 +1,3 @@
|
|||||||
from .cli.launch import main
|
from .cli.launch import main
|
||||||
from .file_writer import NexusFileWriter, NeXusFileXMLWriter
|
from .file_writer import NexusFileWriter
|
||||||
from .file_writer_manager import FileWriterManager
|
from .file_writer_manager import FileWriterManager
|
||||||
|
@ -23,9 +23,6 @@ def main():
|
|||||||
config = ServiceConfig(config_path)
|
config = ServiceConfig(config_path)
|
||||||
|
|
||||||
file_writer_manager = file_writer.FileWriterManager(config, RedisConnector)
|
file_writer_manager = file_writer.FileWriterManager(config, RedisConnector)
|
||||||
file_writer_manager.file_writer.configure(
|
|
||||||
layout_file=os.path.abspath("./layout_cSAXS_NXsas.xml")
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
event = threading.Event()
|
event = threading.Event()
|
||||||
logger.success("Started FileWriter")
|
logger.success("Started FileWriter")
|
||||||
|
@ -8,7 +8,6 @@ import traceback
|
|||||||
import typing
|
import typing
|
||||||
|
|
||||||
import h5py
|
import h5py
|
||||||
import xmltodict
|
|
||||||
|
|
||||||
import bec_server.file_writer_plugins as fwp
|
import bec_server.file_writer_plugins as fwp
|
||||||
from bec_lib import MessageEndpoints, bec_logger, messages
|
from bec_lib import MessageEndpoints, bec_logger, messages
|
||||||
@ -49,107 +48,6 @@ class FileWriter(abc.ABC):
|
|||||||
return device_storage
|
return device_storage
|
||||||
|
|
||||||
|
|
||||||
class XMLWriter:
|
|
||||||
@staticmethod
|
|
||||||
def get_type(type_string: str):
|
|
||||||
if type_string == "float":
|
|
||||||
return float
|
|
||||||
if type_string == "string":
|
|
||||||
return str
|
|
||||||
if type_string == "int":
|
|
||||||
return int
|
|
||||||
raise NeXusLayoutError(f"Unsupported data type {type_string}.")
|
|
||||||
|
|
||||||
def get_value(self, value, entry, source, data_type):
|
|
||||||
if source == "constant":
|
|
||||||
if data_type:
|
|
||||||
return self.get_type(data_type)(value)
|
|
||||||
return value
|
|
||||||
return entry
|
|
||||||
|
|
||||||
def add_group(self, container, val):
|
|
||||||
name = val.pop("@name")
|
|
||||||
group = container.create_group(name)
|
|
||||||
self.add_content(group, val)
|
|
||||||
|
|
||||||
def add_dataset(self, container, val):
|
|
||||||
name = val.pop("@name")
|
|
||||||
source = val.pop("@source")
|
|
||||||
value = val.pop("@value", None)
|
|
||||||
data_type = val.pop("@type", None)
|
|
||||||
entry = val.pop("@entry", None)
|
|
||||||
|
|
||||||
data = self.get_value(value=value, entry=entry, source=source, data_type=data_type)
|
|
||||||
if data is None:
|
|
||||||
return
|
|
||||||
dataset = container.create_dataset(name, data=data)
|
|
||||||
self.add_content(dataset, val)
|
|
||||||
return
|
|
||||||
|
|
||||||
def add_attribute(self, container, val):
|
|
||||||
name = val.pop("@name")
|
|
||||||
source = val.pop("@source")
|
|
||||||
value = val.pop("@value", None)
|
|
||||||
data_type = val.pop("@type", None)
|
|
||||||
entry = val.pop("@entry", None)
|
|
||||||
|
|
||||||
data = self.get_value(value=value, entry=entry, source=source, data_type=data_type)
|
|
||||||
setattr(container.attrs, name, data)
|
|
||||||
|
|
||||||
def add_hardlink(self, container, val):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def add_softlink(self, container, val):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def add_content(self, container, layout):
|
|
||||||
for key, values in layout.items():
|
|
||||||
if not isinstance(values, list):
|
|
||||||
values = [values]
|
|
||||||
for val in values:
|
|
||||||
if key == "group":
|
|
||||||
self.add_group(container, val)
|
|
||||||
elif key == "hdf5_layout":
|
|
||||||
self.add_base_entry(container, val)
|
|
||||||
elif key == "attribute":
|
|
||||||
self.add_attribute(container, val)
|
|
||||||
elif key == "dataset":
|
|
||||||
self.add_dataset(container, val)
|
|
||||||
elif key == "hardlink":
|
|
||||||
self.add_hardlink(container, val)
|
|
||||||
elif key == "softlink":
|
|
||||||
self.add_softlink(container, val)
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
# raise NeXusLayoutError()
|
|
||||||
|
|
||||||
def add_base_entry(self, container, val):
|
|
||||||
self.add_group(container, val["group"])
|
|
||||||
|
|
||||||
|
|
||||||
class NeXusFileXMLWriter(FileWriter, XMLWriter):
|
|
||||||
def configure(self, layout_file, **kwargs):
|
|
||||||
self.layout_file = layout_file
|
|
||||||
with open(self.layout_file, "br") as f:
|
|
||||||
self.layout = xmltodict.parse(f)
|
|
||||||
|
|
||||||
def get_value(self, value, entry, source, data_type):
|
|
||||||
if source == "constant":
|
|
||||||
if data_type:
|
|
||||||
return self.get_type(data_type)(value)
|
|
||||||
return value
|
|
||||||
if source == "bec":
|
|
||||||
return self.data.get(entry)
|
|
||||||
return entry
|
|
||||||
|
|
||||||
def write(self, file_path: str, data):
|
|
||||||
print(f"writing file to {file_path}")
|
|
||||||
self.data = self._create_device_data_storage(data)
|
|
||||||
|
|
||||||
with h5py.File(file_path, "w") as file:
|
|
||||||
self.add_content(file, self.layout)
|
|
||||||
|
|
||||||
|
|
||||||
class HDF5Storage:
|
class HDF5Storage:
|
||||||
"""
|
"""
|
||||||
The HDF5Storage class is a container used by the HDF5 writer plugins to store data in the correct NeXus format.
|
The HDF5Storage class is a container used by the HDF5 writer plugins to store data in the correct NeXus format.
|
||||||
|
@ -27,7 +27,6 @@ dependencies = [
|
|||||||
"pyyaml",
|
"pyyaml",
|
||||||
"python-dotenv",
|
"python-dotenv",
|
||||||
"rich",
|
"rich",
|
||||||
"xmltodict",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
|
@ -9,7 +9,7 @@ from test_file_writer_manager import file_writer_manager_mock
|
|||||||
|
|
||||||
from bec_lib.tests.fixtures import dm_with_devices
|
from bec_lib.tests.fixtures import dm_with_devices
|
||||||
from bec_server import file_writer
|
from bec_server import file_writer
|
||||||
from bec_server.file_writer import NexusFileWriter, NeXusFileXMLWriter
|
from bec_server.file_writer import NexusFileWriter
|
||||||
from bec_server.file_writer.file_writer import HDF5Storage
|
from bec_server.file_writer.file_writer import HDF5Storage
|
||||||
from bec_server.file_writer.file_writer_manager import ScanStorage
|
from bec_server.file_writer.file_writer_manager import ScanStorage
|
||||||
from bec_server.file_writer_plugins.cSAXS import NeXus_format as cSAXS_Nexus_format
|
from bec_server.file_writer_plugins.cSAXS import NeXus_format as cSAXS_Nexus_format
|
||||||
|
Loading…
x
Reference in New Issue
Block a user