overpass/TASK.md

1.6 KiB

Finalizing

Rückblick Task 18: Testing

In der Musterlösung wurde zusätzlich ein pyproject.toml-File eingefügt. Dieses erlaubt es euch u.a. die erstellten Tests direkt aus der Konsole im Root-Verzeichnis mit pytest tests auszuführen.

Zusätzlich findet ihr eine .env.example-Datei. Diese ist selbst nicht funktional und soll dem User anzeigen, was die funktionale .env für eine Struktur hat. So weiss in unserem Falle jeder, er/sie muss eine .env mit DB_CONNECTION_STRING anlegen.

Im Testing (test_overpass.py) wurde lediglich ein einziger Unittest und Demonstration für stub, mock und fake gemacht. In der Realität wäre das zu wenig, für Demonstrationszwecke sollte es genügen ...

Stärken

  • Schichtenarchitektur ist (hoffentlich) klar: fetcher → pipeline → storage, keine zirkulären Abhängigkeiten
  • Fehlerbehandlung konsistent mit eigenen Exception-Typen
  • Konfiguration sauber von Code getrennt
  • Threading von API-Requests (concurrent)

Schwächen/Entwicklungspotenzial

  • Keine Retry-Logik für Overpass: Die API ist öffentlich und manchmal überlastet. Eine einfache Retry-Logik mit tenacity wäre produktionsreif.

  • ROOT-Konstante ist fragil. Drei .parent-Aufrufe funktionieren nur bei genau dieser Verzeichnistiefe. Wir haben nun am Schluss noch ein pyproject.toml gebildet und könnten deshalb das ROOT daraus extrahieren.

    def find_root() -> Path:
      for parent in Path(__file__).parents:
          if (parent / "pyproject.toml").exists():
              return parent
      raise RuntimeError("Projektroot nicht gefunden")
    
  • ...