Task 7: adding unittests with pytest

This commit is contained in:
Marco Schmid 2026-04-21 21:14:30 +02:00
parent fcdefddf15
commit 92bc2eb0f8
2 changed files with 53 additions and 11 deletions

27
main.py
View File

@ -1,6 +1,6 @@
import logging import logging
import json
from pathlib import Path from pathlib import Path
from utils import store_to_disk
from overpass import fetch_overpass from overpass import fetch_overpass
from queries.bergbahn import BERGBAHN_QUERY from queries.bergbahn import BERGBAHN_QUERY
from queries.restaurant import RESTAURANT_QUERY from queries.restaurant import RESTAURANT_QUERY
@ -25,6 +25,8 @@ logger = logging.getLogger(__name__)
# Konfiguration # Konfiguration
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
OUTPUT_DIR = Path("results")
BBOXEN = { BBOXEN = {
"SW": (45.8, 5.9, 46.8, 8.2), "SW": (45.8, 5.9, 46.8, 8.2),
"SO": (45.8, 8.2, 46.8, 10.5), "SO": (45.8, 8.2, 46.8, 10.5),
@ -85,8 +87,15 @@ def main() -> None:
logger.info(f"Fehler in Fragmenten: {errors}") logger.info(f"Fehler in Fragmenten: {errors}")
# Ergebnisse speichern # Ergebnisse speichern
with Path("overpass_results.json ").open("w", encoding="utf -8") as file: try:
json.dump(overall, file, indent=2, ensure_ascii=False) saved_path = store_to_disk(
results=overall,
poi_type=query_name,
output_dir=OUTPUT_DIR,
)
logger.info(f"Ergebnisse gespeichert: {saved_path}")
except OSError as e:
logger.error(f"Fehler beim Speichern: {e}")
logger.info("Fertig.") logger.info("Fertig.")
@ -96,14 +105,10 @@ if __name__ == "__main__":
# Was ist passiert? # Was ist passiert?
# * Wir haben die Resultate als .json auf unserer Festplatte gespeichert # * eigenes Modul 'utils' mit Funktion 'store_to_disk()', welche für die Speicherung der Daten zuständig ist.
# * Wir haben die Schweiz (bbox) verschiedener Grössen aufgesplittet
# TASK: # TASK:
# * Die Speicherung der Ergebnisse liegt nun in unserer Hauptlogik -> wir lagern diese in ein neues Modul 'utils' # * Bis jetzt haben wir nur Code geschrieben, aber keine Tests... Das holen wir jetzt nach!
# als eigenständige Funktion 'store_to_disk()' aus. # -> Überlegt: Was für Tests könnten geschrieben werden? Was macht Sinn? Schreibt 1-2 euerer Tests. Erstellt
# * Dokumentiert diese Funktion (docstrings) und fügt Typehints dazu. # dazu wie gewöhnlich den Order tests und speichert darin eure Tests (mit pytest)
# * Fangt in der Hauptfunktion einen OSError ab, wenn etwas beim Speichern nicht klappt
# * Optional könnt ihr der Funktion 'store_to_disk()' auch einen beliebigen Pfad mitgeben, wo das File gespeichert
# werden soll (Default wäre im aktuellen Verzeichnis)

37
utils.py Normal file
View File

@ -0,0 +1,37 @@
import json
from pathlib import Path
def store_to_disk(
results: list[dict],
poi_type: str = "overpass",
output_dir: Path = Path("."),
) -> Path:
"""
Speichert eine Liste von OSM-Elementen als JSON-Datei auf der Festplatte.
Der Dateiname wird aus dem poi_type-Parameter abgeleitet:
z.B. poi_type="bergbahn" "bergbahn_results.json"
Args:
results (list[dict]): Liste von OSM-Elementen, wie sie die
Overpass API unter "elements" zurückgibt.
poi_type (str): Bezeichnung des POI-Typs. Bestimmt den
Dateinamen. Standard: "overpass"
output_dir (Path): Zielverzeichnis. Wird erstellt falls nicht
vorhanden. Standard: aktuelles Verzeichnis.
Returns:
Path: Absoluter Pfad zur gespeicherten Datei.
Raises:
OSError: Wenn das Verzeichnis nicht erstellt oder die Datei nicht
geschrieben werden kann (z.B. fehlende Schreibrechte).
"""
output_dir.mkdir(parents=True, exist_ok=True)
output_path = output_dir / f"{poi_type}_results.json"
with output_path.open("w", encoding="utf-8") as f:
json.dump(results, f, indent=2, ensure_ascii=False)
return output_path.resolve()