import cherrypy as cp from utils.dfh import DateFrameHolder from utils.st_utils import rerun @cp.expose class TableAPI: def __init__(self): self.dfh = DateFrameHolder("output.h5") self.sid = None self.changed = True @property def data(self): self.changed = False return self.dfh.df @data.setter def data(self, df): if self.dfh.df.equals(df): print("<<< skipping dump because dataframe did not change") return self.dfh.df = df self.dfh.dump() def GET(self): return str(self.dfh.df) @cp.tools.json_in() def PATCH(self, **kwargs): kwargs = kwargs or cp.request.json self.dfh.append(kwargs) self._trigger_changed() self.dfh.dump() return str(self.dfh.df) def DELETE(self): self.dfh.clear() self._trigger_changed() return "cleared" def _trigger_changed(self): self.changed = True rerun(self.sid)