diff options
| author | Leonard Kugis <leonard@kug.is> | 2025-12-23 03:50:47 +0100 |
|---|---|---|
| committer | Leonard Kugis <leonard@kug.is> | 2025-12-23 03:50:47 +0100 |
| commit | d342b3d00f64915685b486a68b7c7b3e2e47fde6 (patch) | |
| tree | a9e9ae070d79737e1a62b275d18472793250ae43 /xembu.py | |
| parent | ec7598f568ff59ecc1eb51572f84d866b0180501 (diff) | |
| download | xembu-d342b3d00f64915685b486a68b7c7b3e2e47fde6.tar.gz | |
Format corrections, english language
Diffstat (limited to 'xembu.py')
| -rw-r--r-- | xembu.py | 38 |
1 files changed, 34 insertions, 4 deletions
@@ -12,9 +12,13 @@ from matplotlib import font_manager from modules.base import Frame, BigFrame, Module, ModuleResult from modules.general import GeneralModule +from modules.drug import DrugModule from datetime import datetime +import logging +import sys + CSV_COLUMNS = [ "date", "debitor", @@ -27,6 +31,28 @@ CSV_COLUMNS = [ "receipt", ] +logger = logging.getLogger("xembu") + +def setup_logging(verbose: int = 0): + level = logging.ERROR + if verbose == 1: + level = logging.WARNING + elif verbose == 2: + level = logging.INFO + elif verbose >= 3: + level = logging.DEBUG + + logger.setLevel(level) + + handler = logging.StreamHandler(sys.stderr) + handler.setLevel(level) + + fmt = logging.Formatter("[%(levelname)s] %(message)s") + handler.setFormatter(fmt) + + logger.handlers.clear() + logger.addHandler(handler) + def _pick_mono_font(size: int = 8) -> font_manager.FontProperties: for fam in ["Inconsolata", "DejaVu Sans Mono", "monospace"]: try: @@ -386,8 +412,11 @@ def main(): parser.add_argument("--title", "-t", help="PDF header title (optional)") parser.add_argument("--pdf", "-p", help="PDF path (optional)") parser.add_argument("--bundle", "-b", help="Path to bundle (.tar.zst), containing CSV, PDF and receipts (optional)") + parser.add_argument("-v", "--verbose", action="count", default=0, help="Logging verbosity (-v=warning, -vv=info, -vvv=debug)") args = parser.parse_args() + setup_logging(args.verbose) + csv_path = os.path.abspath(args.csv) base_dir = os.path.dirname(csv_path) or "." @@ -396,13 +425,14 @@ def main(): df = parse_csv(csv_path) if df["date"].isna().any(): bad = df[df["date"].isna()][CSV_COLUMNS] - raise ValueError(f"Ungültige Datumsangaben in folgenden Zeilen:\n{bad}") + raise ValueError(f"Invalid dates:\n{bad}") want_pdf = bool(args.pdf) mono_font = _pick_mono_font(size=8) modules: Dict[str, Module] = { "general": GeneralModule(), + "drug": DrugModule(), } rows_for_module: Dict[str, List[int]] = {} @@ -419,7 +449,7 @@ def main(): continue mod = modules.get(mod_name) if not mod: - print(f"[INFO] Unbekanntes Modul '{mod_name}' – ignoriert (noch nicht registriert).") + logger.warning("Unknown module {} - ignoring".format(mod_name)) continue subdf = df.loc[indices].copy() results.append(mod.process(subdf, context={"base_dir": base_dir, "want_pdf": want_pdf, "mono_font": mono_font})) @@ -439,11 +469,11 @@ def main(): module_pages.extend(r.pages) create_pdf(df, module_frames, module_bigframes, module_pages, args.pdf, mono_font, base_dir=base_dir, title=title) - print(f"[OK] PDF geschrieben: {args.pdf}") + logger.info("PDF written to {}".format(args.pdf)) if args.bundle: create_bundle(args.bundle, csv_path, df, base_dir=base_dir, pdf_path=args.pdf if args.pdf else None) - print(f"[OK] Bundle geschrieben: {args.bundle}") + logger.info("Bundle written to {}".format(args.bundle)) if __name__ == "__main__": main() |
