Files
OBD2-Simulator/app/config.py
2025-08-24 23:46:59 +02:00

63 lines
1.7 KiB
Python

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