added handling multiple browser sessions

This commit is contained in:
2022-11-25 23:52:44 +01:00
parent a84a4f8faf
commit 37ca97ea37
2 changed files with 26 additions and 16 deletions

View File

@ -1,7 +1,7 @@
import cherrypy as cp
from utils.dfh import DateFrameHolder
from utils.st_utils import rerun
from utils.st_utils import rerunall, get_session_ids
@cp.expose
@ -9,22 +9,33 @@ class TableController:
def __init__(self):
self.dfh = DateFrameHolder("output.h5")
self.sid = None
self.changed = True
# self.changed = True
self.sids = get_session_ids()
@property
def data(self):
self.changed = False
def get(self, sid):
changed = self.get_changed(sid)
data = self.get_data(sid)
return changed, data
def get_changed(self, sid):
return (sid in self.sids)
def get_data(self, sid):
# self.changed = False
try:
self.sids.remove(sid)
except KeyError as e:
if self.sids:
raise RuntimeError(f"{self.sids} is not empty") from e
return self.dfh.df
@data.setter
def data(self, df):
def set_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()
self._trigger_changed()
def GET(self):
return str(self.dfh.df)
@ -44,8 +55,9 @@ class TableController:
def _trigger_changed(self):
self.changed = True
rerun(self.sid)
# self.changed = True
self.sids = get_session_ids()
rerunall()

View File

@ -24,10 +24,8 @@ st.set_page_config(
hide_UI_elements()
restapi.sid = get_session_id() # rest api needs current session ID to trigger the next rerun
changed = restapi.changed
df = restapi.data
sid = get_session_id() # rest api needs current session IDs to trigger reruns
changed, df = restapi.get(sid)
download(df)
@ -77,7 +75,7 @@ response = aggrid(
new_df = response["data"]
if not new_df.equals(df) and not changed:
restapi.data = new_df
restapi.set_data(new_df)
print(">>> end of streamlit run")