63 lines
1.7 KiB
Python
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
|