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() @dataclass class ValueUnit: value: int unit: str @dataclass class Settings: repros: list[str] path: str @dataclass class Metadata: SetupName: str Maintainer: str Creator: str SetupLocation: str Lab: str Institute: str University: str Address: str @dataclass class Input: inputsamplerate: int inputsamplerateunit: str # BufferSize 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] @dataclass class Output: 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 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 sinus: Sinus @dataclass class Config: settings: Settings metadata: Metadata pyrelacs: PyRelacs def load_config(): 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: try: data = yaml.full_load(config_file) try: config = from_dict(data_class=Config, data=data) return config except dacite.DaciteError as e: log.error(f"Invalid Config, {e}") 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()