65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
import json
|
|
import time
|
|
import logging
|
|
from pathlib import Path
|
|
from functools import wraps
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
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()
|
|
|
|
|
|
def timer(func):
|
|
"""
|
|
Decorator der die Ausführungszeit einer Funktion misst und loggt.
|
|
|
|
Verwendung:
|
|
@timer
|
|
def meine_funktion():
|
|
...
|
|
"""
|
|
@wraps(func) # erhält __name__, __doc__ der originalen Funktion
|
|
def wrapper(*args, **kwargs):
|
|
start = time.perf_counter()
|
|
result = func(*args, **kwargs)
|
|
elapsed = time.perf_counter() - start
|
|
logger.info(f"{func.__name__}() dauerte {round(elapsed, 2)} Sekunden\n\n")
|
|
return result
|
|
return wrapper
|
|
|
|
# @wraps(func) — ohne diesen Decorator würde run_seriell.__name__ den Namen "wrapper" zurückgeben statt
|
|
# "run_seriell", was den Log-Output unbrauchbar macht |