-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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
src/pygenesis/cube.py
Outdated
@@ -4,77 +4,18 @@ | |||
import pandas as pd | |||
|
|||
|
|||
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
src/pygenesis/data.py
Outdated
return cube["QEI"] | ||
|
||
|
||
def _get_tablefile_data(data: str) -> pd.DataFrame: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ich würde die Methode direkt aus table.py importieren
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
passt genau
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
src/pygenesis/data.py
Outdated
return _get_cubefile_data(data) | ||
|
||
|
||
def _get_cubefile_data(data: str) -> pd.DataFrame: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
gut gesehen danke
Code überarbeitet und gemergt |
Closes #43
PR stellt einen
cache_data
decorator für die downloadfunktionget_data()
zur Verfügung.get_data
ist eine neue Methode, die mittelsmethod="cubefile"
cubefiles downloaden kann und mittelsmethod="tablefile"
tablefiles. Egal welche Methode verwendet wird,cache_data
funktioniert wie folgt:name
ist ein required parameter fürget_data
, daher immer vorhandenname
wird verwendet, um imcache_dir
(hinterlegt in derconfig.ini
) im Unterordnerdata
nach einem Ordner mit dem Namen zu suchencache_dir/data/<name>
vorhanden, wurde das Objekt noch nicht gedownloaded undget_data
nutzt einen REST-API Call auf Genesis data Endpunktget_data
liefert immer ein DataFrame Objekt zurück) mittelsdf.to_csv()
im Ordnercache_dir/data/<name>/<yyyymmdd>/<name>.xz
komprimiert abgespeichertcache_dir/data/<name>
vorhanden, so wird im Ordner nach dem letzten Datum gesucht ( wird in int umgewandelt und sortiert), und die Datei<name>.xz
mittels pandaspd.read_csv()
gelesen.Offen: