From cc9089f503e80568674cf13013d3697f6876387e Mon Sep 17 00:00:00 2001 From: wendtalexander Date: Wed, 16 Oct 2024 07:56:32 +0200 Subject: [PATCH] [config] fixing config loader --- pyrelacs/config/config_loader.py | 104 ++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 37 deletions(-) diff --git a/pyrelacs/config/config_loader.py b/pyrelacs/config/config_loader.py index d197e10..b1a226d 100644 --- a/pyrelacs/config/config_loader.py +++ b/pyrelacs/config/config_loader.py @@ -2,86 +2,105 @@ from typing import TypedDict, Union from dataclasses import dataclass import pathlib + +import dacite import yaml +from dacite import from_dict from IPython import embed from pyrelacs.util.logging import config_logging log = config_logging() -class ValueUnit(TypedDict): - value: Union[int, float] + +@dataclass +class ValueUnit: + value: int unit: str + @dataclass class Settings: - Repros: list[str] - Path: str + repros: list[str] + path: str @dataclass class Metadata: - Identifier: str + SetupName: str Maintainer: str Creator: str - Location: str + SetupLocation: str Lab: str Institute: str University: str Address: str + @dataclass class Input: - inputsamplerate : ValueUnit + inputsamplerate: int + inputsamplerateunit: str # BufferSize - inputtracecapacity : ValueUnit - inputunipolar : bool - inputtraceid : list[str] - inputtracescale : list[int] - inputtraceunit : list[str] - inputtracedevice : list[str] - inputtracechannel : list[int] + inputtracecapacity: int + inputtracecapacityunit: str + inputunipolar: bool + inputtraceid: list[str] + inputtracescale: list[int] + inputtraceunit: list[str] + inputtracedevice: list[str] + inputtracechannel: list[int] inputtracereference: list[str] - inputtracemaxvalue : list[int] - inputtracecenter : list[bool] + inputtracemaxvalue: list[int] + inputtracecenter: list[bool] + @dataclass class Output: - outputtraceid : list[str] - outputtracedevice : list[str] - outputtracechannel : list[int] - outputtracescale : list[int] - outputtraceunit : list[str] - outputtracemaxrate : list[ValueUnit] - outputtracemodality: list[str] + outputtraceid: list[str] + outputtracedevice: list[str] + outputtracechannel: list[int] + outputtracescale: list[int] + outputtraceunit: list[str] + outputtracemaxrate: list[int] + outputtracemaxrateunit: list[str] + outputtracemodality: list[str] + @dataclass class Data: input: Input output: Output + @dataclass -class SimData: - input: - inputsamplerate : 20kHz - inputtracecapacity : 600s - output: - outputtraceid : [ Sinus ] - outputtracedevice : [ ao-0 ] - outputtracechannel : [ 0 ] - outputtracescale : [ 1 ] - outputtraceunit : [ V ] - outputtracemaxrate : [ 40kHz ] - outputtracemodality: [ electric ] +class Sinus: + inputsamplerate: int + inputsamplerateunit: str + # BufferSize + inputtracecapacity: int + inputtracecapacityunit: str + outputtraceid: list[str] + outputtracedevice: list[str] + outputtracechannel: list[int] + outputtracescale: list[int] + outputtraceunit: list[str] + outputtracemaxrate: list[int] + outputtracemaxrateunit: list[str] + outputtracemodality: list[str] + @dataclass class PyRelacs: data: Data - simdata: SimData + sinus: Sinus + @dataclass class Config: - # Path: str + settings: Settings + metadata: Metadata + pyrelacs: PyRelacs @classmethod def load_config(cls): @@ -94,3 +113,14 @@ class Config: return yaml.full_load(config_file) except yaml.YAMLError as e: raise yaml.YAMLError(f"Error parsing YAML file: {e}") + + +if __name__ == "__main__": + pyrelacs_config_path = pathlib.Path(__file__).parent.parent / "config.yaml" + log.debug(pyrelacs_config_path) + if not pyrelacs_config_path.is_file(): + log.error("Config File was not found") + with open(pyrelacs_config_path, "r") as config_file: + data = yaml.full_load(config_file) + embed() + exit()