Created
April 9, 2021 11:47
-
-
Save jeremyyeo/b82c151a963307d722ed4d0be2daa509 to your computer and use it in GitHub Desktop.
Test dynamic widgets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://gist.github.com/tvst/036da038ab3e999a64497f42de966a92 | |
from streamlit.report_thread import get_report_ctx | |
import streamlit as st | |
class SessionState(object): | |
def __init__(self, **kwargs): | |
"""A new SessionState object. | |
Parameters | |
---------- | |
**kwargs : any | |
Default values for the session state. | |
Example | |
------- | |
>>> session_state = SessionState(user_name='', favorite_color='black') | |
>>> session_state.user_name = 'Mary' | |
'' | |
>>> session_state.favorite_color | |
'black' | |
""" | |
for key, val in kwargs.items(): | |
setattr(self, key, val) | |
@st.cache(allow_output_mutation=True) | |
def get_session(id, **kwargs): | |
return SessionState(**kwargs) | |
def get(**kwargs): | |
"""Gets a SessionState object for the current session. | |
Creates a new object if necessary. | |
Parameters | |
---------- | |
**kwargs : any | |
Default values you want to add to the session state, if we're creating a | |
new one. | |
Example | |
------- | |
>>> session_state = get(user_name='', favorite_color='black') | |
>>> session_state.user_name | |
'' | |
>>> session_state.user_name = 'Mary' | |
>>> session_state.favorite_color | |
'black' | |
Since you set user_name above, next time your script runs this will be the | |
result: | |
>>> session_state = get(user_name='', favorite_color='black') | |
>>> session_state.user_name | |
'Mary' | |
""" | |
ctx = get_report_ctx() | |
id = ctx.session_id | |
return get_session(id, **kwargs) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SessionState | |
import streamlit as st | |
from datetime import datetime, date, timedelta | |
session_state = SessionState.get( | |
date_range=[date(2020, 1, 1), date.today()], | |
date_range_human=("Last 7 days", "Last 30 days", "All time", "Custom"), | |
selected_date_range=[date(2020, 1, 1), date.today()], | |
selected_date_range_human=2, | |
) | |
date_range_input = st.empty() | |
date_range_human_input = st.empty() | |
date_range_input = st.date_input( | |
"Date range", | |
session_state.selected_date_range, | |
min_value=date(2020, 1, 1), | |
max_value=date.today(), | |
) | |
date_range_human_input = st.selectbox( | |
"", session_state.date_range_human, index=session_state.selected_date_range_human | |
) | |
if date_range_human_input == "Last 7 days": | |
session_state.selected_date_range = [date.today() - timedelta(days=7), date.today()] | |
elif date_range_human_input == "Last 30 days": | |
session_state.selected_date_range = [ | |
date.today() - timedelta(days=30), | |
date.today(), | |
] | |
elif date_range_human_input == "All time": | |
session_state.selected_date_range = [date(2020, 1, 1), date.today()] | |
else: | |
session_state | |
delta = date_range_input[1] - date_range_input[0] | |
st.write(f"Number of days: {delta.days}") | |
st.markdown("---") | |
st.title("Debug") | |
"All options" | |
st.write(f"`{session_state.date_range[0]} - {session_state.date_range[1]}`") | |
st.write(session_state.date_range_human) | |
"Selected options " | |
st.write( | |
f"`{session_state.selected_date_range[0]} - {session_state.selected_date_range[1]}`" | |
) | |
st.write(session_state.selected_date_range_human) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment