overpass/TASK.md

2.1 KiB

Task 10 — Queries auslagern

Rückblick Task 9: PoiType als StrEnum

Ihr habt den Magic String "bergbahn" durch eine StrEnum ersetzt. Die wichtigsten Punkte:

  • Magic Strings sind rohe Strings, die eine bestimmte Bedeutung haben, aber nirgends formal definiert oder geprüft werden. Tippfehler wie "Bergbahn" oder "berg_bahn" fallen erst zur Laufzeit auf — oder gar nicht.
  • PoiType("bergbahn") funktioniert bei StrEnum — Python findet den passenden Member anhand des Wertes. Das ist nützlich, wenn Werte aus einer Config oder Datenbank kommen.
  • Grenzen: Enums sind statisch — neue POI-Typen erfordern eine Code-Änderung. Für sehr dynamische Systeme (Typen kommen aus der DB) wäre eine andere Lösung nötig.

Aufgabe

In main.py steht aktuell die Overpass-Query als langer hardcodierter String direkt im Code. Das hat mehrere Nachteile: Der String ist schwer lesbar, nicht wiederverwendbar, und für jeden neuen POI-Typ muss main.py angefasst werden.

Konkret:

  1. Lege einen Unterordner queries/ im Package an.
  2. Verschiebe die Bergbahn-Query in eine Datei queries/bergbahn.overpassql. Der Platzhalter {bbox} bleibt erhalten — ergänze zusätzlich {timeout} und {maxsize} als Platzhalter (statt Hardcoding im Query-String).
  3. Schreibe in fetcher.py eine neue Funktion load_query():
   def load_query(poi_type: PoiType, bbox: tuple, timeout: int, maxsize: int) -> str:
       ...

Sie soll die passende .overpassql-Datei laden und alle Platzhalter befüllen. 4. Passe _fetch_overpass() an: Sie bekommt nun die fertige Query (kein bbox-Parameter mehr) und sendet sie direkt. 5. Passe load_pois() und main.py entsprechend an.

Fragen zum Nachdenken:

  • Welche Vorteile hat es, Queries in eigenen Dateien zu speichern?
  • Warum ist Path(__file__).parent / "queries" besser als ein relativer Pfad "queries/"?
  • Was passiert, wenn die .overpassql-Datei für einen bestimmten PoiType fehlt — wie sollte load_query() damit umgehen?
  • Welches Design-Prinzip steckt hinter dieser Änderung? (Stichwort: Separation of Concerns)