61 lines
2.3 KiB
Python
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)
|