2022-09-20 09:34:28 +00:00
|
|
|
import configparser
|
|
|
|
import structlog
|
|
|
|
|
|
|
|
class CONFIG:
|
|
|
|
"""
|
|
|
|
CONFIG class for handling with config files
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
2022-12-10 12:34:26 +00:00
|
|
|
def __init__(self, configfile: str):
|
2022-09-20 09:34:28 +00:00
|
|
|
# set up logger
|
|
|
|
self.log = structlog.get_logger("CONFIG")
|
|
|
|
|
|
|
|
# init configparser
|
|
|
|
self.config = configparser.ConfigParser(inline_comment_prefixes="#", allow_no_value=True)
|
2022-12-10 12:34:26 +00:00
|
|
|
|
|
|
|
try:
|
|
|
|
self.config_name = configfile
|
|
|
|
|
|
|
|
except Exception:
|
|
|
|
self.config_name = "config.ini"
|
2022-09-20 09:34:28 +00:00
|
|
|
|
|
|
|
self.log.info("[CFG] logfile init", file=self.config_name)
|
|
|
|
|
|
|
|
# check if log file exists
|
|
|
|
self.config_exists()
|
|
|
|
|
|
|
|
def config_exists(self):
|
|
|
|
"""
|
|
|
|
check if config file exists
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
return bool(self.config.read(self.config_name, None))
|
|
|
|
except Exception as configerror:
|
|
|
|
self.log.error("[CFG] logfile init error", e=configerror)
|
|
|
|
return False
|
|
|
|
|
|
|
|
def write_config(self, section: str, key: str, value):
|
|
|
|
"""
|
|
|
|
write values to config
|
|
|
|
"""
|
|
|
|
|
|
|
|
def write_entire_config(self, data):
|
|
|
|
"""
|
|
|
|
write entire config
|
|
|
|
"""
|
|
|
|
self.config['NETWORK'] = {'#Network settings': None,
|
2022-09-20 10:23:28 +00:00
|
|
|
'TNCPORT': data[50]
|
2022-09-20 09:34:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
self.config['STATION'] = {'#Station settings': None,
|
2022-09-20 10:23:28 +00:00
|
|
|
'mycall': data[1],
|
2022-12-08 15:14:59 +00:00
|
|
|
'mygrid': data[2],
|
2023-02-02 22:51:22 +00:00
|
|
|
'ssid_list': list(data[18])# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # list(data[18])
|
2022-09-20 09:34:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
self.config['AUDIO'] = {'#Audio settings': None,
|
|
|
|
'rx': data[3],
|
|
|
|
'tx': data[4],
|
2023-02-02 22:49:52 +00:00
|
|
|
'txaudiolevel': data[14],
|
|
|
|
'auto_tune': data[19]
|
2022-09-20 09:34:28 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
self.config['RADIO'] = {'#Radio settings': None,
|
2023-02-02 22:49:52 +00:00
|
|
|
'radiocontrol': data[5],
|
|
|
|
'rigctld_ip': data[6],
|
|
|
|
'rigctld_port': data[7]
|
2022-09-20 09:34:28 +00:00
|
|
|
}
|
|
|
|
self.config['TNC'] = {'#TNC settings': None,
|
2023-02-02 22:49:52 +00:00
|
|
|
'scatter': data[8],
|
|
|
|
'fft': data[9],
|
|
|
|
'narrowband': data[10],
|
|
|
|
'fmin': data[11],
|
|
|
|
'fmax': data[12],
|
|
|
|
'qrv': data[15],
|
|
|
|
'rxbuffersize': data[16],
|
|
|
|
'explorer': data[17],
|
2023-02-02 22:51:22 +00:00
|
|
|
'stats': data[19]
|
2022-09-20 09:34:28 +00:00
|
|
|
}
|
|
|
|
try:
|
|
|
|
with open(self.config_name, 'w') as configfile:
|
|
|
|
self.config.write(configfile)
|
|
|
|
except Exception as conferror:
|
2022-09-20 09:36:11 +00:00
|
|
|
self.log.error("[CFG] reading logfile", e=conferror)
|
2022-09-20 09:34:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
def read_config(self):
|
|
|
|
"""
|
|
|
|
read config file
|
|
|
|
"""
|
|
|
|
if self.config_exists():
|
|
|
|
#print(self.config.read(self.config_name))
|
|
|
|
#print(self.config.sections())
|
|
|
|
|
|
|
|
return self.config
|
|
|
|
|
2023-02-18 13:18:39 +00:00
|
|
|
def get(self, area, key, default):
|
|
|
|
"""
|
|
|
|
read from config and add if not exists
|
|
|
|
|
|
|
|
"""
|
2023-02-18 13:51:26 +00:00
|
|
|
|
2023-02-18 18:57:04 +00:00
|
|
|
for _ in range(2):
|
2023-02-18 14:01:26 +00:00
|
|
|
try:
|
2023-02-18 18:57:04 +00:00
|
|
|
parameter = (
|
|
|
|
self.config[area][key] in ["True", "true", True]
|
|
|
|
if default in ["True", "true", True, "False", "false", False]
|
|
|
|
else self.config[area][key]
|
|
|
|
)
|
2023-02-18 14:01:26 +00:00
|
|
|
except KeyError:
|
|
|
|
self.config[area][key] = str(default)
|
2023-02-18 13:51:26 +00:00
|
|
|
|
|
|
|
self.log.info("[CFG] reading...", parameter=parameter, key=key)
|
|
|
|
return parameter
|