Spaces:
Running
Running
File size: 3,939 Bytes
ef365c3 a3d26e6 8b93442 a3d26e6 92b1222 a3d26e6 c709917 8b93442 59ba192 8b93442 92b1222 8b93442 92b1222 8b93442 92b1222 8b93442 92b1222 8b93442 92b1222 8b93442 92b1222 ef365c3 92b1222 8b93442 92b1222 8b93442 92b1222 8b93442 92b1222 3a8ddd8 a3d26e6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
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() |