Initial commit
This commit is contained in:
76
app/src/config.py
Normal file
76
app/src/config.py
Normal file
@@ -0,0 +1,76 @@
|
||||
'''Config module handles the proxy configuration in the config.toml file'''
|
||||
|
||||
import shutil, tomllib, logging
|
||||
from schema import Schema, And, Use, Optional
|
||||
|
||||
class Config():
|
||||
'''Static class Config is reads and sanitize the config.
|
||||
|
||||
Read config.toml file and sanitize it with read().
|
||||
Get named parts of the config with get()'''
|
||||
|
||||
config = {}
|
||||
conf_schema = Schema({ 'tsun': {
|
||||
'enabled': Use(bool),
|
||||
'host': Use(str),
|
||||
'port': And(Use(int), lambda n: 1024 <= n <= 65535)},
|
||||
|
||||
'mqtt': {
|
||||
'host': Use(str),
|
||||
'port': And(Use(int), lambda n: 1024 <= n <= 65535),
|
||||
'user': And(Use(str), Use(lambda s: s if len(s) >0 else None)),
|
||||
'passwd': And(Use(str), Use(lambda s: s if len(s) >0 else None))},
|
||||
|
||||
|
||||
'ha': {
|
||||
'auto_conf_prefix': Use(str),
|
||||
'discovery_prefix': Use(str),
|
||||
'entity_prefix': Use(str)},
|
||||
|
||||
'inverters': {
|
||||
'allow_all' : Use(bool),
|
||||
And(Use(str), lambda s: len(s) == 16 ): {
|
||||
Optional('node_id', default=""): And(Use(str),Use(lambda s: s +'/' if len(s)> 0 and s[-1] != '/' else s)),
|
||||
Optional('suggested_area', default=""): Use(str)
|
||||
}}
|
||||
}, ignore_extra_keys=True)
|
||||
|
||||
@classmethod
|
||||
def read(cls) -> None:
|
||||
'''Read config file, merge it with the default config and sanitize the result'''
|
||||
|
||||
config = {}
|
||||
logger = logging.getLogger('data')
|
||||
|
||||
try:
|
||||
# make the default config transparaent by copying it in the config.example file
|
||||
shutil.copy2("default_config.toml", "config/config.example.toml")
|
||||
|
||||
# read example config file as default configuration
|
||||
with open("default_config.toml", "rb") as f:
|
||||
def_config = tomllib.load(f)
|
||||
|
||||
# overwrite the default values, with values from the config.toml file
|
||||
with open("config/config.toml", "rb") as f:
|
||||
usr_config = tomllib.load(f)
|
||||
|
||||
config['tsun'] = def_config['tsun'] | usr_config['tsun']
|
||||
config['mqtt'] = def_config['mqtt'] | usr_config['mqtt']
|
||||
config['ha'] = def_config['ha'] | usr_config['ha']
|
||||
config['inverters'] = def_config['inverters'] | usr_config['inverters']
|
||||
|
||||
cls.config = cls.conf_schema.validate(config)
|
||||
logging.debug(f'Readed config: "{cls.config}" ')
|
||||
|
||||
except Exception as error:
|
||||
logger.error(f'Config.read: {error}')
|
||||
cls.config = {}
|
||||
|
||||
@classmethod
|
||||
def get(cls, member:str = None):
|
||||
'''Get a named attribute from the proxy config. If member == None it returns the complete config dict'''
|
||||
|
||||
if member:
|
||||
return cls.config.get(member, {})
|
||||
else:
|
||||
return cls.config
|
||||
Reference in New Issue
Block a user