aboutsummaryrefslogtreecommitdiffstats
path: root/xembu.py
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2025-12-23 03:50:47 +0100
committerLeonard Kugis <leonard@kug.is>2025-12-23 03:50:47 +0100
commitd342b3d00f64915685b486a68b7c7b3e2e47fde6 (patch)
treea9e9ae070d79737e1a62b275d18472793250ae43 /xembu.py
parentec7598f568ff59ecc1eb51572f84d866b0180501 (diff)
downloadxembu-d342b3d00f64915685b486a68b7c7b3e2e47fde6.tar.gz
Format corrections, english language
Diffstat (limited to 'xembu.py')
-rw-r--r--xembu.py38
1 files changed, 34 insertions, 4 deletions
diff --git a/xembu.py b/xembu.py
index 02f1132..2242079 100644
--- a/xembu.py
+++ b/xembu.py
@@ -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()