Task 7: adding unittests with pytest
This commit is contained in:
parent
fcdefddf15
commit
92bc2eb0f8
27
main.py
27
main.py
@ -1,6 +1,6 @@
|
||||
import logging
|
||||
import json
|
||||
from pathlib import Path
|
||||
from utils import store_to_disk
|
||||
from overpass import fetch_overpass
|
||||
from queries.bergbahn import BERGBAHN_QUERY
|
||||
from queries.restaurant import RESTAURANT_QUERY
|
||||
@ -25,6 +25,8 @@ logger = logging.getLogger(__name__)
|
||||
# Konfiguration
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
OUTPUT_DIR = Path("results")
|
||||
|
||||
BBOXEN = {
|
||||
"SW": (45.8, 5.9, 46.8, 8.2),
|
||||
"SO": (45.8, 8.2, 46.8, 10.5),
|
||||
@ -85,8 +87,15 @@ def main() -> None:
|
||||
logger.info(f"Fehler in Fragmenten: {errors}")
|
||||
|
||||
# Ergebnisse speichern
|
||||
with Path("overpass_results.json ").open("w", encoding="utf -8") as file:
|
||||
json.dump(overall, file, indent=2, ensure_ascii=False)
|
||||
try:
|
||||
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.")
|
||||
|
||||
@ -96,14 +105,10 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
# Was ist passiert?
|
||||
# * Wir haben die Resultate als .json auf unserer Festplatte gespeichert
|
||||
# * Wir haben die Schweiz (bbox) verschiedener Grössen aufgesplittet
|
||||
# * eigenes Modul 'utils' mit Funktion 'store_to_disk()', welche für die Speicherung der Daten zuständig ist.
|
||||
|
||||
# TASK:
|
||||
|
||||
# * Die Speicherung der Ergebnisse liegt nun in unserer Hauptlogik -> wir lagern diese in ein neues Modul 'utils'
|
||||
# als eigenständige Funktion 'store_to_disk()' aus.
|
||||
# * Dokumentiert diese Funktion (docstrings) und fügt Typehints dazu.
|
||||
# * 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)
|
||||
# * Bis jetzt haben wir nur Code geschrieben, aber keine Tests... Das holen wir jetzt nach!
|
||||
# -> Überlegt: Was für Tests könnten geschrieben werden? Was macht Sinn? Schreibt 1-2 euerer Tests. Erstellt
|
||||
# dazu wie gewöhnlich den Order tests und speichert darin eure Tests (mit pytest)
|
||||
37
utils.py
Normal file
37
utils.py
Normal 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()
|
||||
Loading…
x
Reference in New Issue
Block a user