Hi, I have an app which accepts file upload. When I upload, it calls a read function. Then from the file, I show some options as multiselect, when I submit the multiselect option, the read function calls again. I tried caching or session state but it is not working. Can someone help?
Steps to reproduce
Code snippet:
@st.cache_data(show_spinner=False)
def read_file(file):
with tempfile.NamedTemporaryFile(mode="wb") as temp:
with st.spinner('This may take a while. Wait for it...'):
bytes_data = file.getvalue()
temp.write(bytes_data)
df = MyFunctionReadsFromPathAndAggregations(temp.name)
return df
def app():
session_state = st.session_state
if "df" not in session_state:
file = st.file_uploader("Upload file.")
if file is not None:
df = read_file(file)
with st.form(key='my_form_to_submit'):
selected_authors = st.multiselect(
"Choose authors of the group",
df.author.unique().tolist())
submit_button = st.form_submit_button(label='Submit')
if submit_button:
# do the things
Expected behavior:
I expect to run my function inside read_file once. After reading, I show some keys from dataframe as multiselect, then user selects the scope and submits. Now it should not read dataframe again.
Actual behavior:
After clicking submit, it recalls read_file again.
That seems unrelated to the code you posted so I cannot help with it. When I fill the missing parts in your code and run it, the body of read_file() is called only once. That is all I can say.