2.2 KiB
2.2 KiB
Task 14 — pipeline.py: fetch_and_store()
Rückblick Task 13: Storage-Factory
Ihr habt eine Factory-Funktion build_storage() eingeführt. Die wichtigsten Punkte:
- Factory-Pattern:
build_storage()zentralisiert die Entscheidung, welches Backend instanziiert wird.main.pymuss wederJsonStoragenochPostgresStoragekennen — es übergibt nur die Config und bekommt ein fertigesStorage-Objekt zurück. match-Statement: Klarer und erweiterbarer als eineif/elif-Kette, besonders wenn neue Storage-Typen dazukommen. Dercase _-Zweig fängt ungültige Werte ab.StorageType-Enum: Verhindert Magic Strings in der Factory — ein ungültigertype-Wert in der Config wirft sofort einenValueError.**params: Die Parameter aus der Config werden direkt als Keyword-Argumente an den Konstruktor übergeben. Das machtbuild_storage()generisch — sie muss nicht wissen, welche ParameterJsonStorageoderPostgresStoragekonkret erwarten.root-Parameter: Die Pfadauflösung bleibt inmain.pyverankert —storage.pyweiss nichts von der Projektstruktur, was die Wiederverwendbarkeit erhöht.
Aufgabe
In main.py ist die Fetch-Schleife über Bboxen direkt in main() eingebettet.
Das hat einen Nachteil: Die Logik ist schwer isoliert testbar, und main()
wird mit jedem Feature länger und unübersichtlicher.
Ziel ist es, die gesamte Fetch-und-Store-Logik für einen POI-Typ in eine eigene Funktion auszulagern.
Konkret:
- Lege eine neue Datei
pipeline.pyan. - Schreibe darin eine Funktion
fetch_and_store()mit folgender Signatur:
def fetch_and_store(
poi_type: PoiType,
bboxen: dict,
timeout: int,
maxsize: int,
storage: Storage,
) -> None:
Sie soll die bisherige Schleife aus main.py übernehmen:
über alle Bboxen iterieren, POIs fetchen, sammeln und am Ende speichern.
3. Vereinfache main() so, dass sie nur noch Config liest, Storage baut
und fetch_and_store() pro POI-Typ aufruft.
Fragen zum Nachdenken:
- Welche konkreten Vorteile hat eine schlanke
main()-Funktion? - Warum bekommt
fetch_and_store()ein fertigesStorage-Objekt übergeben — statt es selbst zu instanziieren?