Plan: logowanie „połykanych" wyjątków¶
Cel¶
Żaden catch-all (except Exception / except BaseException / bare except:)
ani przypadek „pokazane userowi, nigdzie nie zalogowane" nie ma ginąć po cichu.
Minimum: pełny traceback w logach (logger.exception) + Rollbar tam, gdzie to
ścieżka produkcyjna (web/task/admin/model/importer). User może nadal widzieć
„wystąpił nieznany błąd" — ale my widzimy co się stało.
Zakres (i czego NIE ruszamy)¶
- W zakresie: 105 cichych catch-all (
Exception/BaseException/bare) + przypadki web-facing, które pokazują fallback userowi bez logu. - POZA zakresem: ~140
except Model.DoesNotExist: ...— to idiomatyczny EAFP (oczekiwany control-flow, nie błąd). Logowanie ich byłoby szumem. Zostają nietknięte. except <wąski typ z komentarzem>(np.CannotDeleteStatementsException„PBN mówi że nie ma oświadczeń") — świadome, udokumentowane. Zostają.
Wspólny helper¶
src/bpp/util/wyjatki.py:
def zaloguj_polkniety_wyjatek(komunikat, *, logger=None, do_rollbar=True):
"""Woła się WEWNĄTRZ bloku except. Loguje pełny traceback + (opcjonalnie)
raportuje do Rollbara. Rollbar best-effort (gdy nieskonfigurowany — sam log)."""
Re-eksport z bpp.util (fasada). Dzięki temu zmiana w jednym miejscu, a diff
w 30+ plikach jest jednolity i łatwy do review.
Zasady stosowania¶
- BaseException → Exception wszędzie, gdzie nie ma intencji łapania
KeyboardInterrupt/SystemExit(czyli wszędzie tutaj) + logowanie. - Web/admin/task/model/importer:
do_rollbar=True(domyślnie). - Management commands / dev-utils (
playwright_util,compare_dbtemplates): logujemy (do_rollbar=False— bez szumu w monitoringu, ale log jest). except (X.DoesNotExist, Exception)— rozbić: zostawić wąską klauzulę jako cichy control-flow, aExceptionosobno z logowaniem.- Komunikat po polsku, konkretny: co robiliśmy, gdy padło.
Etapy (1 commit / etap)¶
- E1. Helper
wyjatki.py+ re-eksport + test jednostkowy helpera. - E2. Tier 1 — czyste
except ...: pass(20 szt.). - E3.
except BaseException(22 szt.) — narrow + log. - E4. Web-facing „pokazane, nie zalogowane" (admin/core, importer_publikacji, przemapuj_, pbn_wysylka, zglos_publikacje, rozbieznosci_).
- E5. Blok
pbn_import/utils/*+pbn_import/*(~25 szt.). - E6.
pbn_api/*,pbn_integrator/*, resztaexcept Exception. - E7.
bpp/*(multiseek, admin, export, models, templatetags). - E8. Self-review +
ruff+ uruchomienie testów dotkniętych modułów.
Weryfikacja¶
- Po każdym etapie:
ruff format+ruff checkna dotkniętych plikach. - Re-run analizatora AST — licznik cichych catch-all ma spadać do ~0 (poza świadomie zostawionymi).
- Testy modułów, których dotknęliśmy (importer_publikacji, pbn_import).