first commit
This commit is contained in:
62
app/config.py
Normal file
62
app/config.py
Normal file
@@ -0,0 +1,62 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from pathlib import Path
|
||||
|
||||
APP_ROOT = Path(__file__).resolve().parents[1]
|
||||
SETTINGS_PATH = APP_ROOT / "settings.json"
|
||||
|
||||
DEFAULTS = {
|
||||
"can": {
|
||||
"interface": "vcan0",
|
||||
"resp_id": "0x7E8",
|
||||
"timeout_ms": 200
|
||||
},
|
||||
"ui": {
|
||||
"font_family": "DejaVu Sans",
|
||||
"font_size": 10,
|
||||
"window": {
|
||||
"width": 1100,
|
||||
"height": 720
|
||||
}
|
||||
},
|
||||
"logging": {
|
||||
"level": "INFO",
|
||||
"file": "logs/app.log"
|
||||
}
|
||||
}
|
||||
|
||||
def load_settings():
|
||||
cfg = DEFAULTS.copy()
|
||||
if SETTINGS_PATH.exists():
|
||||
try:
|
||||
with open(SETTINGS_PATH, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
# shallow merge
|
||||
for k, v in data.items():
|
||||
if isinstance(v, dict) and k in cfg:
|
||||
cfg[k].update(v)
|
||||
else:
|
||||
cfg[k] = v
|
||||
except Exception as e:
|
||||
print("WARN: konnte settings.json nicht laden:", e)
|
||||
return cfg
|
||||
|
||||
def setup_logging(cfg):
|
||||
level = getattr(logging, cfg["logging"].get("level", "INFO").upper(), logging.INFO)
|
||||
log_file = cfg["logging"].get("file", "logs/app.log")
|
||||
log_path = (APP_ROOT / log_file).resolve()
|
||||
log_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
logger = logging.getLogger("configapp")
|
||||
logger.setLevel(level)
|
||||
|
||||
handler = RotatingFileHandler(log_path, maxBytes=1_000_000, backupCount=2, encoding="utf-8")
|
||||
fmt = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
|
||||
handler.setFormatter(fmt)
|
||||
logger.addHandler(handler)
|
||||
|
||||
sh = logging.StreamHandler()
|
||||
sh.setFormatter(fmt)
|
||||
logger.addHandler(sh)
|
||||
return logger
|
Reference in New Issue
Block a user