overpass/TASK.md

1.6 KiB

Task 8 — Python Package

Rückblick Task 7: Logging

Ihr habt alle print()-Aufrufe durch das logging-Modul ersetzt. Warum ist das besser?

  • Log-Level steuern ohne Code-Änderung: Mit logging.basicConfig(level=logging.DEBUG) sieht man alle Details, mit level=logging.WARNING nur Probleme — ohne eine einzige Zeile im Anwendungscode anzufassen.
  • logger = logging.getLogger(__name__): Jedes Modul bekommt seinen eigenen Logger, benannt nach dem Modul. Im Output sieht man sofort, woher eine Meldung kommt.
  • logging.basicConfig() gehört in main.py (den Einstiegspunkt), nicht in Hilfmodule — sonst konfiguriert jedes importierte Modul eigenständig das Logging, was zu unvorhersehbarem Verhalten führt.
  • Alternative: Für grössere Projekte lohnt sich eine separate Logging-Konfiguration via logging.config.dictConfig() oder eine externe Library wie loguru.

Aufgabe

Das Projekt besteht aktuell aus losen Modulen (main.py, models.py, overpass.py). Ziel ist es, daraus ein sauberes Python-Package zu machen.

Konkret:

  1. Lege eine leere __init__.py im Projektordner an.
  2. Benenne overpass.py in fetcher.py um (um später Namenskonflikte zu vermeiden).
  3. Passe alle Imports in main.py und fetcher.py auf relative Imports um (from .models import … statt from models import …).

Fragen zum Nachdenken:

  • Was ist der Unterschied zwischen einem Modul und einem Package in Python?
  • Was bewirkt __init__.py — was passiert ohne sie?
  • Wann verwendet man relative Imports, wann absolute?
  • Warum ist from overpass import * problematisch?