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 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
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