I am trying to create this app where users can input a URL and depending on that URL, some other options are populated.
I have 3 inputs:
- User inputs a URL (this url contains a 3d model with some metadata in it. I am using an external library to access the model and the data in it.)
- User selects a Category. (This categories gets populated depending on the received data from the URL. I want to cache the received data so when user changes the Category, i don’t receive everything again.)
- User selects parameter. (The parameters are filtered from the selected category. Again, when any change happens in the category input, i don’t want to rerun the whole script, and use the cached data.)
How can i populate options on the second dropdown depending
on_change in the Text input without running the whole script from scratch and make it as performative as possible?
PS. Dropdown options are fetched from an external database as a
I am open to any help? I can even do a Zoom call if needed.
# import streamlit import streamlit as st # specklepy libraries from specklepy.api.wrapper import StreamWrapper from specklepy.api.client import SpeckleClient from specklepy.api import operations from specklepy.objects import Base #input container input = st.container() with input: st.subheader("Inputs") commit_url = st.text_input( "Commit URL", "https://latest.speckle.dev/streams/28dd9ad7ba/commits/c50598dcb2", key="commit_url", ) # WRAPPER🌮 # wrapper wrapper = StreamWrapper(commit_url) # client 👨🍳 client = wrapper.get_client() # transport 🚚 transport = wrapper.get_transport() # COMMIT # get speckle commit commit = client.commit.get(wrapper.stream_id, wrapper.commit_id) # get obj id from commit obj_id = commit.referencedObject # receive objects from speckle commit_data = operations.receive(obj_id, transport) with input: selected_category = st.selectbox( "Select Category", commit_data.get_dynamic_member_names(), key="selected_category", ) parameters = commit_data[selected_category][ "parameters" ].get_dynamic_member_names() category_elements = commit_data[selected_category] selected_parameters = st.multiselect( "Select parameters", get_parameter_names(commit_data), key="selected_parameters", )