From fc6930d2aeb82adbf304abf61d59be9207c8ad33 Mon Sep 17 00:00:00 2001 From: Stefan Koelle Date: Wed, 5 Aug 2026 16:02:20 +0200 Subject: [PATCH] sync more logging when error --- .gitignore | 1 + src/db.py | 15 +++++++++++++-- src/sync.py | 6 +++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 80da1de..29fd4c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .env config/accounts.json +.venv/ __pycache__/ *.pyc .DS_Store diff --git a/src/db.py b/src/db.py index e0751ba..46ae1ca 100644 --- a/src/db.py +++ b/src/db.py @@ -108,7 +108,13 @@ def upsert_contacts(conn, contacts: list[dict], run_id: str): f"INSERT INTO contacts ({', '.join(cols)}) VALUES ({placeholders}) " f"ON DUPLICATE KEY UPDATE {update_clause}" ) - cur.execute(sql, list(c.values())) + try: + cur.execute(sql, list(c.values())) + except Exception as exc: + logger.error("INSERT fehlgeschlagen für UID %s: %s", c.get("uid"), exc) + logger.error("SQL: %s", sql[:500]) + logger.error("Values: %s", {k: v for k, v in c.items() if k != "raw_vcard"}) + raise conn.commit() @@ -202,6 +208,11 @@ def replace_all_contacts_for_account(conn, account: str, contacts: list[dict], r c = _sanitize_contact(c) cols = ", ".join(c.keys()) placeholders = ", ".join(["%s"] * len(c)) - cur.execute(f"INSERT INTO contacts ({cols}) VALUES ({placeholders})", list(c.values())) + try: + cur.execute(f"INSERT INTO contacts ({cols}) VALUES ({placeholders})", list(c.values())) + except Exception as exc: + logger.error("INSERT fehlgeschlagen für UID %s: %s", c.get("uid"), exc) + logger.error("Values: %s", {k: v for k, v in c.items() if k != "raw_vcard"}) + raise conn.commit() logger.info("Voller Re-Sync für Account %s abgeschlossen: %d Kontakte", account, len(contacts)) diff --git a/src/sync.py b/src/sync.py index 8aafb3d..c75f91a 100644 --- a/src/sync.py +++ b/src/sync.py @@ -94,7 +94,11 @@ def sync_account(conn, account, href_to_uid_cache: dict): ) except Exception as exc: logger.exception("[%s] Sync-Lauf %s fehlgeschlagen", account.name, run_id) - db.finish_sync_run(conn, run_id, "failed", error_message=str(exc)) + print(f"SYNC-FEHLER [{account.name}]: {exc}", file=sys.stderr) + detail = str(exc) + if "Unknown column" in detail: + detail += " — Fehlende Spalte? ALTER TABLE ausführen: siehe sql/schema.sql" + db.finish_sync_run(conn, run_id, "failed", error_message=detail) raise