Skip to content

Instantly share code, notes, and snippets.

@jeremyyeo
Created April 9, 2021 11:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jeremyyeo/b82c151a963307d722ed4d0be2daa509 to your computer and use it in GitHub Desktop.
Save jeremyyeo/b82c151a963307d722ed4d0be2daa509 to your computer and use it in GitHub Desktop.
Test dynamic widgets
# 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)
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