Files
seweb/chart_config.py
Markus Zolliker 2c59e37074 major rework
using influxdb structure independed of nicos cache
2025-03-18 14:14:45 +01:00

61 lines
2.3 KiB
Python

from configparser import ConfigParser
class ChartConfig:
"""
Class that holds the chart section of a configuration file (for an instrument).
Attributes :
chart_config (Section) : the Section corresponding to the "chart" section in the given configuration file
"""
KEYS = ["cat", "color", "unit", "label"]
def __init__(self, path):
"""
Parameters :
path (str) : the path to the configuration file
"""
self.errors = {}
self.variables = {}
cfgp = ConfigParser(interpolation=None)
cfgp.optionxform = str
cfgp.read(path)
section = cfgp["chart"]
for key, raw_value in section.items():
if len(key.split('.')) > 1:
self.errors[key] = f'illegal key: {key}'
continue
arguments = raw_value.split(",")
keyword_mode = False
config = {'cat': '*'}
for i, argument in enumerate(arguments):
argname, _, argvalue = argument.rpartition(':')
if argname:
keyword_mode = True
config[argname] = argvalue
else:
if keyword_mode:
self.errors[key] = f"positional arg after keywd arg: {key}={raw_value!r}"
else:
try:
if argvalue:
config[self.KEYS[i]] = argvalue
except Exception as e:
self.errors[key] = f"{e!r} in {key}={raw_value}"
self.variables[key] = config
def get_variable_parameter_config(self, key):
"""
Gets the configuration of the given key in the configuration file (chart section).
Parameters :
key (str) : the key to look for in the chart section (<variable>[.<param>])
Returns :
{"cat":(str), "color":(str), "unit":(str)} | None : a dictionnary representing the different options for the given key in the chart section.
The different options are in this dict if they are found in the chart section for the given key. Returns None if the key is not in the chart section,
or if there is a syntax problem for the given key.
"""
return self.variables.get(key)