From 6a5a77f670ec51093789f0a142a863a7150296d0 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Fri, 27 May 2022 19:40:04 +0200 Subject: [PATCH] associate DataFrameHolder to file --- stand.py | 4 +--- tableapi.py | 2 +- utils/df_utils.py | 35 ++++++++++++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/stand.py b/stand.py index 4eb5a11..22e23e8 100644 --- a/stand.py +++ b/stand.py @@ -47,9 +47,7 @@ if not new_df.equals(df) and not changed: restapi.data = df = new_df -if not df.empty: - print("<<< write hdf") - df.to_hdf("output.h5", key="data") +restapi.dfh.dump() print(">>> end of streamlit run") diff --git a/tableapi.py b/tableapi.py index 6dd9aab..b901102 100644 --- a/tableapi.py +++ b/tableapi.py @@ -8,7 +8,7 @@ from utils.st_utils import rerun class TableAPI: def __init__(self): - self.dfh = DateFrameHolder() + self.dfh = DateFrameHolder("output.h5") self.sid = None self.changed = True diff --git a/utils/df_utils.py b/utils/df_utils.py index 7114cf0..6b8ad89 100644 --- a/utils/df_utils.py +++ b/utils/df_utils.py @@ -3,9 +3,13 @@ import pandas as pd class DateFrameHolder: - def __init__(self, df=None): - self.df = df or pd.DataFrame() -# self.df = pd.DataFrame.from_records([dict(a=1, b=2, c=3)] * 4) #TODO: remove + def __init__(self, fn): + self.fn = fn + self.df = try_load_df(fn) + + def dump(self): + dump_non_empty_df(self.df, self.fn) + def append(self, data): data = pd.DataFrame.from_records([data]) @@ -15,6 +19,31 @@ class DateFrameHolder: self.df = pd.DataFrame() + def __repr__(self): + head = self.fn + ":" + line = "-" * len(head) + df = str(self.df) + return "\n".join((head, line, df)) + + + +def try_load_df(fn): + try: + df = pd.read_hdf(fn) + print(f">>> loaded dataframe from {fn}") + except FileNotFoundError: + df = pd.DataFrame() + print(">>> created empty dataframe") + return df + +def dump_non_empty_df(df, fn, key="data"): + if df.empty: + print("<<< skip dumping empty dataframe") + return + print(f"<<< dump dataframe to {fn}") + df.to_hdf(fn, key) + + from io import BytesIO