From 0b03fed79895931ef40c55bb4f380ba4c83361f0 Mon Sep 17 00:00:00 2001 From: rpwolff Date: Sun, 8 Feb 2026 19:03:00 +0100 Subject: [PATCH] anlegen --- README.md | 17 +++++++++++++++++ mmp_logger.py | 11 +++++++++++ requirements.txt | 1 + 3 files changed, 29 insertions(+) create mode 100644 requirements.txt diff --git a/README.md b/README.md index e69de29..461fdf3 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,17 @@ +Ziel-Struktur: alles in einem Verzeichnis +Beispiel: ~/mmp_logger/ +``` +mmp_logger/ +├─ mmp_logger.py +├─ requirements.txt +├─ config.json +├─ cost_centers.json +├─ data/ +│ └─ mmp.sqlite +├─ logs/ +│ └─ mmp_logger.log +└─ reports/ + ├─ report_weekly.md + ├─ report_weekly.html + └─ report_weekly.pdf (optional) +``` diff --git a/mmp_logger.py b/mmp_logger.py index 526e262..83f795a 100644 --- a/mmp_logger.py +++ b/mmp_logger.py @@ -11,6 +11,7 @@ import telnetlib import time from dataclasses import dataclass from typing import Dict, List, Optional, Tuple +from pathlib import Path PROMPT_RE = re.compile(rb".*> ?$") # Prompt endet mit '>' NUM_RE = re.compile(r"([-+]?\d+(\.\d+)?)") @@ -23,6 +24,12 @@ class DeviceCfg: enabled: bool = True username: Optional[str] = None password: Optional[str] = None + +def resolve_path(base_file: str, maybe_rel: str) -> str: + p = Path(maybe_rel) + if p.is_absolute(): + return str(p) + return str(Path(base_file).resolve().parent / p) def utc_now_iso() -> str: return dt.datetime.now(dt.timezone.utc).replace(microsecond=0).isoformat() @@ -434,6 +441,10 @@ def main(): args = ap.parse_args() cfg = load_json(args.config) + cfg_path = args.config + db_path = resolve_path(cfg_path, cfg["db_path"]) + cc_path = resolve_path(cfg_path, cfg["cost_center_map"]) + cc_map = load_json(cc_path) cc_map = load_json(cfg["cost_center_map"]) db_path = cfg["db_path"] diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3cda9eb --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +markdown \ No newline at end of file