Repository navigation
Feature/43 cache downloaded data - #44
Conversation
…data is now in data.py module and table.py and cube.py only hold specific parsing logic
|
|
||
| def is_cube_metadata_header(line: str) -> bool: | ||
| """Check if a line is a cube metadata header. | ||
| def get_data(data: str) -> pd.DataFrame: |
There was a problem hiding this comment.
die Methode get_data existiert auch in data.py. Würde diese hier dann eher get_cube_data oder so nennen
There was a problem hiding this comment.
bzw, aktuell brauchen wir diese Methode ja nicht mehr, da in data.py schon die Logik abgebildet ist. Wobei man noch diskutieren könnte ob man diese Methode nicht analog zur tablefile-Methode in data.py importiert.
There was a problem hiding this comment.
Gut gesehen! Ich packe es in cube.py. Bin nicht ganz glücklich mit der Logik...stehe aber auf dem Schlauch, ob es besser ist diese Indirektion einzubauen oder ob wir nicht direkt die Methoden aus den Modulen verwenden sollten. Ich mache erstmal letzteres und verzichte auf die private methods ganz
| return cube["QEI"] | ||
|
|
||
|
|
||
| def _get_tablefile_data(data: str) -> pd.DataFrame: |
There was a problem hiding this comment.
ich würde die Methode direkt aus table.py importieren
There was a problem hiding this comment.
Die Idee war, dass man später das ganze einfach erweitern können soll, dazu bietet es sich dann meist an solche Methoden an einer Stelle zu haben, anstatt in einer Hauptmethode immer weitere if else einzubauen. Aber genau das passiert gerade noch in der Methode get_data, daher ist dein Vorschlag sauberer. Irgendwann sollte get_data so umgebaut werden, dass man nicht jede Methode per if-else einbaut, sondern der Code ab Zeile 46 sollte durch etwas ersetzt werden, was automatisch die verüfbaren Methoden ausliest.
| return _get_cubefile_data(data) | ||
|
|
||
|
|
||
| def _get_cubefile_data(data: str) -> pd.DataFrame: |
There was a problem hiding this comment.
siehe Comments incube.py. Glaube es macht Sinn wenn wir die Logik hier nach cube.py auslagern. Dann wäre es analog zu table (+ eventuell zukünftige Endpunkte)
|
Code überarbeitet und gemergt |
Closes #43
PR stellt einen
cache_datadecorator für die downloadfunktionget_data()zur Verfügung.get_dataist eine neue Methode, die mittelsmethod="cubefile"cubefiles downloaden kann und mittelsmethod="tablefile"tablefiles. Egal welche Methode verwendet wird,cache_datafunktioniert wie folgt:nameist ein required parameter fürget_data, daher immer vorhandennamewird verwendet, um imcache_dir(hinterlegt in derconfig.ini) im Unterordnerdatanach einem Ordner mit dem Namen zu suchencache_dir/data/<name>vorhanden, wurde das Objekt noch nicht gedownloaded undget_datanutzt einen REST-API Call auf Genesis data Endpunktget_dataliefert immer ein DataFrame Objekt zurück) mittelsdf.to_csv()im Ordnercache_dir/data/<name>/<yyyymmdd>/<name>.xzkomprimiert abgespeichertcache_dir/data/<name>vorhanden, so wird im Ordner nach dem letzten Datum gesucht ( wird in int umgewandelt und sortiert), und die Datei<name>.xzmittels pandaspd.read_csv()gelesen.Offen: