Spaces:
Running
Running
import datetime | |
import streamlit as st | |
from util import getYamlConfig | |
def update_session_state(key,): | |
# Get new value from session state and change key for save it in params | |
new_value = st.session_state[key] | |
key = key[5:] | |
for item in st.session_state.data_dict: | |
if item['key'] == key: | |
item['value'] = new_value | |
break | |
def page(): | |
st.subheader("Définissez vos paramètres") | |
st.text("L'ensemble des critères sont facultatifs.") | |
# Charge la configuration YAML | |
config = getYamlConfig() | |
# Vérifie si la structure inclut des 'parts' ou une liste de variables | |
if 'parts' in config['variables']: | |
# Cas avec 'parts' : Trie les parts et affiche les champs par onglet | |
parts = config["variables"]["parts"] | |
parts_sorted = sorted(parts, key=lambda part: part.get('number', float('inf'))) | |
# Création de tabs pour chaque 'part' trié | |
tabs = st.tabs([part['name'] for part in parts_sorted]) | |
for part, tab in zip(parts_sorted, tabs): | |
with tab: | |
for field in part['fields']: | |
for field_session in st.session_state.data_dict: | |
if field['key'] == field_session['key']: | |
display_field(field_session) | |
else: | |
# Display fields directly if no parts are defined | |
for field in st.session_state.data_dict: | |
display_field(field) | |
def display_field(field): | |
"""Helper function to create the correct input based on field 'nature'.""" | |
key = 'form_' + field['key'] | |
if field['nature'] == 'radio': | |
st.radio( | |
field['label'], | |
field['options'], | |
index=field['options'].index(field.get('value')) if field.get('value') in field['options'] else 0, | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
elif field['nature'] == 'selectbox': | |
st.selectbox( | |
field['label'], | |
field['options'], | |
index=field['options'].index(field.get('value')) if field.get('value', []) in field['options'] else 0, | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
elif field['nature'] == 'multiselect': | |
default_values = field.get('value', []) | |
st.multiselect( | |
field['label'], | |
field['options'], | |
default=default_values if default_values else None, | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
elif field['nature'] == 'date': | |
st.date_input( | |
field['label'], | |
value=datetime.date.fromisoformat("2011-09-20"), | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
elif field['nature'] == 'numeric': | |
st.number_input(field['label'], | |
value=field.get('value', 0), | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
elif field['nature'] == 'text_area': | |
st.text_area(field['label'], | |
value=field.get('value', ""), | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
elif field['nature'] == 'slider': | |
st.slider(field['label'], | |
value=field.get('value', [0, 1000]), | |
min_value=field.get('min', 0), # Valeur minimale du slider | |
max_value=field.get('max', 5000), # Valeur maximale du slider | |
step=field.get('step', 500), | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
else: | |
st.text_input(label=field['label'], | |
value=field.get('value', ""), | |
key=key, | |
on_change=update_session_state, | |
args=(key,) | |
) | |
page() |