diff --git a/TASK.md b/TASK.md index dd6cec6..bad6156 100644 --- a/TASK.md +++ b/TASK.md @@ -1,12 +1,5 @@ -# TASK 3: +# TASK 4: -Für `Task_2` habt ihr das requests-Modul benötigt, welches mit `pip install requests` installiert werden musste. -Ich habe zusätzlich eine neue Datei `requirements.txt` erstellt, worin das installierte Modul `requests` -nun aufgeführt ist. Das hilft, dass andere Programmierer am Schluss euer Projekt einfach nachbauen/ausführen können. - -* Fügt der aktuellen Funktion einen aussagekräftigen **Docstrings** und **Typehints** hinzu. - -Ziel ist es in unserem Miniprojekt ab nun stets aktuelle und aussagekräfte Docstrings und überall Typehints zu verwenden! -Das mag zwar beim Erstellen ein wenig lästig sein, ist aber eine Investition in die Zukunft! - -Denkt immer daran: "Ein Code wird meist häufiger gelesen als geschrieben..." \ No newline at end of file +* Versucht mal bbox auf die ganze Schweiz (45.8, 5.9, 47.8, 10.5) zu setzen und die Funktion aufzurufen. Klappt das? +* Versucht ein Error-Management mit in die Funktion einzubauen. Benutzt dazu eine eigene `OverpassApiError`-Klasse. + -> Überlegt: Was könnte nicht klappen? Wo könnte es Fehler geben? \ No newline at end of file diff --git a/main.py b/main.py index dd04dd2..a56e495 100644 --- a/main.py +++ b/main.py @@ -17,7 +17,44 @@ out center body; """ -def fetch_bergbahnen(bbox) -> dict: +def fetch_bergbahnen(bbox: tuple) -> dict: + """ + Fragt die Overpass API nach Bergbahnen in der angegebenen Bounding Box ab. + Sendet einen HTTP-POST-Request an die Overpass API und gibt die geparste + JSON-Antwort zurück. + + Args: + bbox (tuple): Bounding Box als 4-Tuple in Dezimalgrad: + (south, west, north, east) + Beispiel Davos: (46.72, 9.70, 46.92, 10.00) + Beispiel Schweiz: (45.8, 5.9, 47.8, 10.5) + + Returns: + dict: Geparste JSON-Antwort der Overpass API. Die Antwort enthält + unter dem Schlüssel "elements" eine Liste von OSM-Objekten + (nodes und ways) mit ihren Tags und Koordinaten. + Beispiel: + { + "elements": [ + { + "type": "node", + "id": 123456, + "lat": 46.8, "lon": 9.8, + "tags": {"aerialway": "station", "name": "Jakobshorn"} + }, + ... + ] + } + + Raises: + OverpassApiError: Wenn die API nicht innerhalb des gesetzten Timeouts + antwortet (clientseitig, unabhängig vom serverseitigen + Timeout im Query). + OverpassApiError: Wenn der Request aus einem anderen Grund fehlschlägt + (z.B. 429 Too Many Requests, 504 Gateway Timeout, + Netzwerkfehler). + """ + bbox_str = ",".join(map(str, bbox)) query = BERGBAHN_QUERY.format(bbox=bbox_str)