| import streamlit as st |
| import pandas as pd |
| import json |
|
|
| |
| def validate_zipcode(zipcode): |
| try: |
| if len(zipcode) == 5 and zipcode.isdigit(): |
| return True |
| else: |
| return False |
| except: |
| return False |
|
|
| |
| @st.experimental_dialog("Fill out the form") |
| def form_dialog(): |
| gender = st.radio("Gender", ("Male", "Female", "Other")) |
| city = st.radio("City", ("Oakland", "Berkeley", "SF")) |
| zipcode = st.text_input("Zipcode (Optional)", value="") |
| urgency = st.radio("Urgency", ("Immediate", "High", "Moderate", "General Inquiry")) |
| duration = st.radio("Duration", ("Long Term", "Transitional", "Temporary")) |
| needs = st.text_area("Needs (describe needed services + ideal qualities of shelter)") |
|
|
| if st.button("Submit"): |
| if zipcode and not validate_zipcode(zipcode): |
| st.error("Please enter a valid 5-digit zipcode.") |
| else: |
| data = { |
| "Gender": gender, |
| "City": city, |
| "Zipcode": zipcode if zipcode else "N/A", |
| "Urgency": urgency, |
| "Duration": duration, |
| "Needs": needs |
| } |
| with open('data.json', 'w') as f: |
| json.dump(data, f) |
| st.session_state.form_submitted = True |
| st.session_state.data = data |
| st.rerun() |
|
|
| |
| def reset_session_state(): |
| st.session_state.form_submitted = False |
| st.session_state.shelter_index = 0 |
| st.experimental_rerun() |
|
|
| |
| if 'form_submitted' not in st.session_state: |
| st.session_state.form_submitted = False |
|
|
| if 'shelter_index' not in st.session_state: |
| st.session_state.shelter_index = 0 |
|
|
| |
| master_database = pd.read_csv("master_database.csv") |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| st.title("π Information Form") |
|
|
| if not st.session_state.form_submitted: |
| if st.button("Open Form"): |
| form_dialog() |
| else: |
| st.success("Form submitted successfully!") |
| |
| with open('data.json', 'r') as f: |
| data = json.load(f) |
|
|
| |
| with st.expander("Expand/collapse:"): |
| st.success("Client info collected! Please see the following.") |
| st.json(data) |
|
|
| |
| filtered_data = master_database[ |
| (master_database['gender'] == data['Gender']) & |
| (master_database['city'] == data['City']) & |
| (master_database['duration'] == data['Duration']) & |
| (master_database['needs'].str.contains(data['Needs'], case=False)) |
| ] |
|
|
| |
| client_database = filtered_data.to_dict(orient='records') |
|
|
| |
| with st.expander("Expand/collapse:"): |
| st.write("Filtered client database:", client_database) |
|
|
| |
| shelters = [ |
| { |
| "title": f"Shelter {i+1}", |
| "description": f"This is shelter {i+1}.", |
| "header": "Details", |
| "image_url": "https://static.streamlit.io/examples/cat.jpg" if i % 2 == 0 else "https://static.streamlit.io/examples/dog.jpg", |
| "info": row |
| } |
| for i, row in enumerate(client_database) |
| ] |
|
|
| if len(shelters) == 0: |
| st.warning("No shelters found matching your criteria.") |
| else: |
| |
| col1, col2 = st.columns([1, 2]) |
|
|
| with col1: |
| if st.button("Previous", key="previous"): |
| if st.session_state.shelter_index > 0: |
| st.session_state.shelter_index -= 1 |
| st.experimental_rerun() |
|
|
| if st.button("Next", key="next"): |
| if st.session_state.shelter_index < len(shelters) - 1: |
| st.session_state.shelter_index += 1 |
| st.experimental_rerun() |
|
|
| if st.button("Resubmit", key="resubmit"): |
| reset_session_state() |
|
|
| with col2: |
| |
| shelter = shelters[st.session_state.shelter_index] |
| st.write(shelter["description"]) |
| st.header(shelter["header"]) |
| st.image(shelter["image_url"]) |
| st.json(shelter["info"]) |