From a698948e68394b17ce18f7439c099d6474b0a11c Mon Sep 17 00:00:00 2001 From: sdp01 Date: Mon, 18 Aug 2025 09:56:28 +0200 Subject: [PATCH 01/11] Modificato menu --- app.py | 24 +++++++++++------------- views/api_configurazione.py | 7 ++++++- views/esecuzione_test.py | 7 ++++++- views/gestione_domande.py | 7 ++++++- views/gestione_set.py | 7 ++++++- views/home.py | 9 +++++++-- views/style_utils.py | 2 +- views/styles.css | 13 +++++++++++++ views/visualizza_risultati.py | 7 ++++++- 9 files changed, 62 insertions(+), 21 deletions(-) diff --git a/app.py b/app.py index c090f95..4a32475 100644 --- a/app.py +++ b/app.py @@ -34,16 +34,14 @@ # Aggiungi CSS personalizzato e stili globali load_css() -PAGES = { - "Home": home.render, - "Configurazione API": api_configurazione.render, - "Gestione Domande": gestione_domande.render, - "Gestione Set di Domande": gestione_set.render, - "Esecuzione Test": esecuzione_test.render, - "Visualizzazione Risultati": visualizza_risultati.render, -} - -selected_page = st.sidebar.radio("Navigazione", list(PAGES.keys())) - -render_page = PAGES[selected_page] -render_page() +# --- Definizione pagine con il nuovo sistema --- +Home = st.Page("views/home.py", title="Home", icon=":material/home:", default=True) +Configurazione_API = st.Page("views/api_configurazione.py", title="Configurazione API", icon=":material/api:") +Gestione_domande = st.Page("views/gestione_domande.py", title="Gestione Domande", icon=":material/construction:") +Gestione_set = st.Page("views/gestione_set.py", title="Gestione Set di Domande", icon=":material/list:") +Esecuzione_test = st.Page("views/esecuzione_test.py", title="Esecuzione Test", icon=":material/rule_settings:") +Visualizza_risultati = st.Page("views/visualizza_risultati.py", title="Visualizzazione Risultati", icon=":material/bar_chart:") + +# --- Navigazione --- +pg = st.navigation([Home, Configurazione_API, Gestione_domande, Gestione_set, Esecuzione_test, Visualizza_risultati]) +pg.run() diff --git a/views/api_configurazione.py b/views/api_configurazione.py index 30cfe72..8ebb92f 100644 --- a/views/api_configurazione.py +++ b/views/api_configurazione.py @@ -116,7 +116,7 @@ def delete_preset_callback(preset_id): st.error(message) -@register_page("Configurazione API") +#@register_page("Configurazione API") def render(): add_page_header( "Gestione Preset API", @@ -283,3 +283,8 @@ def render(): if "preset_deleted_message" in st.session_state: st.success(st.session_state.preset_deleted_message) del st.session_state.preset_deleted_message + +if __name__ == "__main__": + render() +else: + render() diff --git a/views/esecuzione_test.py b/views/esecuzione_test.py index 44b9130..0c2bc25 100644 --- a/views/esecuzione_test.py +++ b/views/esecuzione_test.py @@ -22,7 +22,7 @@ def run_llm_test_callback(): st.session_state.run_llm_test = True -@register_page("Esecuzione Test") +#@register_page("Esecuzione Test") def render(): # === Inizializzazione delle variabili di stato === if 'test_mode' not in st.session_state: @@ -165,3 +165,8 @@ def render(): st.write("**Risposta Generata:**", result['actual_answer']) st.write("**Punteggio:**", f"{result['evaluation']['score']:.1f}%") st.write("**Valutazione:**", result['evaluation']['explanation']) + +if __name__ == "__main__": + render() +else: + render() diff --git a/views/gestione_domande.py b/views/gestione_domande.py index 8ab7ef9..71e1b02 100644 --- a/views/gestione_domande.py +++ b/views/gestione_domande.py @@ -106,7 +106,7 @@ def confirm_delete_question_dialog(question_id, question_text): st.rerun() -@register_page("Gestione Domande") +#@register_page("Gestione Domande") def render(): # === Inizializzazione dello stato === st.session_state.setdefault("question_page_state", QuestionPageState()) @@ -303,3 +303,8 @@ def render(): key="import_questions_btn", on_click=import_questions_callback ) + +if __name__ == "__main__": + render() +else: + render() diff --git a/views/gestione_set.py b/views/gestione_set.py index 3879006..3a42389 100644 --- a/views/gestione_set.py +++ b/views/gestione_set.py @@ -18,7 +18,7 @@ logger = logging.getLogger(__name__) -@register_page("Gestione Set di Domande") +#@register_page("Gestione Set di Domande") def render(): add_global_styles() @@ -350,3 +350,8 @@ def render(): key="import_set_btn", on_click=lambda: import_set_callback(state) ) + +if __name__ == "__main__": + render() +else: + render() diff --git a/views/home.py b/views/home.py index cd50295..5e5d368 100644 --- a/views/home.py +++ b/views/home.py @@ -3,13 +3,13 @@ import logging import streamlit as st -from .style_utils import add_home_styles +from views.style_utils import add_home_styles from views import register_page logger = logging.getLogger(__name__) -@register_page("Home") +#@register_page("Home") def render(): """Visualizza la pagina principale con le funzionalità della piattaforma.""" @@ -100,3 +100,8 @@ def render(): """, unsafe_allow_html=True, ) + +if __name__ == "__main__": + render() +else: + render() diff --git a/views/style_utils.py b/views/style_utils.py index dab2af9..d075fbd 100644 --- a/views/style_utils.py +++ b/views/style_utils.py @@ -18,7 +18,7 @@ def load_css(): css_content = css_path.read_text() st.markdown(f"", unsafe_allow_html=True) else: - st.warning("File styles.css non trovato. Assicurati che sia presente nella cartella utils.") + st.warning("File styles.css non trovato. Assicurati che sia presente nella cartella views.") def add_global_styles(): diff --git a/views/styles.css b/views/styles.css index 733b435..15f7c2c 100644 --- a/views/styles.css +++ b/views/styles.css @@ -12,6 +12,19 @@ background-color: #F0F4FF; } +/* =========================== + MENU +=========================== */ +/* Aumenta la dimensione dei caratteri nel menu laterale */ +section[data-testid="stSidebar"] div[data-testid="stSidebarNav"] span { + font-size: 20px !important; /* Cambia 20px con la dimensione che vuoi */ +} +/*Aumenta icone*/ +section[data-testid="stSidebar"] div[data-testid="stSidebarNav"] svg { + width: 1.5em !important; + height: 1.5em !important; +} + /* =========================== INPUTS E SELETTORI =========================== */ diff --git a/views/visualizza_risultati.py b/views/visualizza_risultati.py index 15ba664..225007d 100644 --- a/views/visualizza_risultati.py +++ b/views/visualizza_risultati.py @@ -20,7 +20,7 @@ logger = logging.getLogger(__name__) -@register_page("Visualizzazione Risultati") +#@register_page("Visualizzazione Risultati") def render(): add_page_header( "Visualizzazione Risultati Test", @@ -388,3 +388,8 @@ def import_results_callback(): st.markdown("--- --- ---") + +if __name__ == "__main__": + render() +else: + render() From 5098a3f8e59ee747d87a3eb4875a9fbbdf18355b Mon Sep 17 00:00:00 2001 From: sdp01 Date: Fri, 22 Aug 2025 13:59:33 +0200 Subject: [PATCH 02/11] Aggiornamento CSS --- views/styles.css | 128 ++--------------------------------------------- 1 file changed, 4 insertions(+), 124 deletions(-) diff --git a/views/styles.css b/views/styles.css index 15f7c2c..760057e 100644 --- a/views/styles.css +++ b/views/styles.css @@ -1,25 +1,17 @@ /* =========================== - STILI GENERALI LAYOUT + LAYOUT GENERALE =========================== */ .main .block-container { padding-top: 2rem; padding-bottom: 2rem; } -.main { - background-color: #FAFBFF; -} -.sidebar .sidebar-content { - background-color: #F0F4FF; -} /* =========================== MENU =========================== */ -/* Aumenta la dimensione dei caratteri nel menu laterale */ section[data-testid="stSidebar"] div[data-testid="stSidebarNav"] span { - font-size: 20px !important; /* Cambia 20px con la dimensione che vuoi */ + font-size: 20px !important; } -/*Aumenta icone*/ section[data-testid="stSidebar"] div[data-testid="stSidebarNav"] svg { width: 1.5em !important; height: 1.5em !important; @@ -34,8 +26,6 @@ section[data-testid="stSidebar"] div[data-testid="stSidebarNav"] svg { .stSelectbox div[data-baseweb="select"], .stMultiselect div[data-baseweb="select"] { border-radius: 8px !important; - border: 1px solid #E0E5FF !important; - background-color: white !important; transition: all 0.3s ease !important; width: 100% !important; box-sizing: border-box !important; @@ -43,34 +33,17 @@ section[data-testid="stSidebar"] div[data-testid="stSidebarNav"] svg { .stTextInput input:focus, .stNumberInput input:focus, .stTextArea textarea:focus { - border-color: #4F6AF0 !important; box-shadow: 0 0 0 3px rgba(79, 106, 240, 0.2) !important; } -.stSelectbox, -.stMultiselect { - border-radius: 8px !important; - width: 100% !important; -} .stMultiselect span[data-baseweb="tag"] { max-width: 100%; white-space: normal !important; flex-wrap: wrap; overflow-wrap: anywhere; } -.stMultiselect span[data-baseweb="tag"] span { - white-space: normal !important; - word-break: break-word; -} -.stMultiselect .st-gz { - max-width: none !important; -} -/* Consenti testo a capo nei menu */ div[data-baseweb="select"] * { max-width: 100%; overflow-wrap: anywhere; - word-break: normal; -} -div[data-baseweb="menu"] * { white-space: normal !important; word-break: break-word; } @@ -80,16 +53,12 @@ div[data-baseweb="menu"] * { =========================== */ .stButton > button { border-radius: 8px !important; - border: 1px solid #4F6AF0 !important; - background-color: #4F6AF0 !important; - color: white !important; font-weight: 600 !important; padding: 0.5rem 1rem !important; transition: all 0.3s ease !important; box-shadow: 0 2px 5px rgba(79, 106, 240, 0.2) !important; } .stButton > button:hover { - background-color: #3A56E0 !important; box-shadow: 0 3px 10px rgba(79, 106, 240, 0.4) !important; transform: translateY(-1px) !important; } @@ -100,7 +69,6 @@ div[data-baseweb="menu"] * { .stCheckbox label, .stRadio label { font-weight: 400 !important; - color: #333333 !important; } .stCheckbox > div[role="radiogroup"] > label > div:first-child, .stRadio > div[role="radiogroup"] > label > div:first-child { @@ -115,15 +83,10 @@ div[data-baseweb="menu"] * { } .stTabs [data-baseweb="tab"] { border-radius: 8px 8px 0 0 !important; - background-color: #EAEEFF !important; - color: #333333 !important; padding: 0.5rem 1rem !important; - border: 1px solid #E0E5FF !important; border-bottom: none !important; } .stTabs [aria-selected="true"] { - background-color: white !important; - color: #4F6AF0 !important; font-weight: 600 !important; border-top: 2px solid #4F6AF0 !important; } @@ -133,14 +96,12 @@ div[data-baseweb="menu"] * { =========================== */ .shadow-card { border-radius: 10px; - background-color: white; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); padding: 1.5rem; margin-bottom: 1.5rem; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); } .page-header { margin-bottom: 1.5rem; - background-color: white; padding: 1.5rem; border-radius: 12px; box-shadow: 0 4px 12px rgba(79, 106, 240, 0.1); @@ -149,12 +110,10 @@ div[data-baseweb="menu"] * { .page-title { font-size: 2rem; font-weight: bold; - color: #4F6AF0; margin-bottom: 0.5rem; } .page-description { font-size: 1.1rem; - color: #666; margin-bottom: 0.5rem; } hr.header-divider { @@ -169,7 +128,6 @@ hr.header-divider { font-weight: 600; margin-top: 1.5rem; margin-bottom: 1rem; - color: #4F6AF0; padding-bottom: 0.5rem; border-bottom: 2px solid rgba(79, 106, 240, 0.2); } @@ -178,7 +136,6 @@ hr.header-divider { FEATURE BOXES =========================== */ .feature-box { - background-color: white; border-radius: 12px; padding: 25px; margin-bottom: 25px; @@ -194,19 +151,16 @@ hr.header-divider { font-size: 1.3rem; font-weight: 600; margin-bottom: 15px; - color: #333; display: flex; align-items: center; } .feature-description { font-size: 1rem; - color: #555; line-height: 1.5; } .icon-large { font-size: 2rem; margin-right: 0.75rem; - background: linear-gradient(135deg, #F0F4FF, #E6EBFF); width: 50px; height: 50px; line-height: 50px; @@ -220,26 +174,23 @@ hr.header-divider { =========================== */ .welcome-section { margin-bottom: 2.5rem; - background-color: white; padding: 2rem; border-radius: 12px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); border-left: 5px solid #4F6AF0; + background-color: --backgroundColor !important; } .welcome-title { font-size: 2.2rem; font-weight: bold; - color: #4F6AF0; margin-bottom: 1rem; } .subtitle { font-size: 1.3rem; - color: #555; line-height: 1.6; margin-bottom: 1.5rem; } .getting-started { - background: white; padding: 2rem; border-radius: 12px; margin-top: 2rem; @@ -248,7 +199,6 @@ hr.header-divider { border-left: 5px solid #4F6AF0; } .getting-started h3 { - color: #4F6AF0; margin-bottom: 1rem; } .getting-started ol { @@ -259,74 +209,4 @@ hr.header-divider { line-height: 1.6; } -/* =========================== - TEMA SCURO -=========================== */ -[data-theme="dark"] div[data-testid="stTextInput"] input, -.streamlit-dark div[data-testid="stTextInput"] input, -[data-theme="dark"] div[data-baseweb="input"] input, -.streamlit-dark div[data-baseweb="input"] input, -[data-theme="dark"] div[data-testid="stTextArea"] textarea, -.streamlit-dark div[data-testid="stTextArea"] textarea, -[data-theme="dark"] div[data-baseweb="textarea"] textarea, -.streamlit-dark div[data-baseweb="textarea"] textarea, -[data-theme="dark"] div[data-testid="stNumberInput"] input, -.streamlit-dark div[data-testid="stNumberInput"] input { - color: #000 !important; - background-color: #FFF !important; - border: 1px solid #AAA !important; -} -[data-theme="dark"] div[data-testid="stSelectbox"] div[data-baseweb="select"] > div, -.streamlit-dark div[data-testid="stSelectbox"] div[data-baseweb="select"] > div { - color: #000 !important; - background-color: #FFF !important; - border: 1px solid #AAA !important; -} -[data-theme="dark"] div[data-testid="stSelectbox"] svg, -.streamlit-dark div[data-testid="stSelectbox"] svg { - fill: #000 !important; -} - -/* =========================== - TEMA CHIARO -=========================== */ -[data-theme="light"] div[data-testid="stTextInput"] input, -.streamlit-light div[data-testid="stTextInput"] input, -[data-theme="light"] div[data-baseweb="input"] input, -.streamlit-light div[data-baseweb="input"] input, -[data-theme="light"] div[data-testid="stTextArea"] textarea, -.streamlit-light div[data-testid="stTextArea"] textarea, -[data-theme="light"] div[data-baseweb="textarea"] textarea, -.streamlit-light div[data-baseweb="textarea"] textarea, -[data-theme="light"] div[data-testid="stNumberInput"] input, -.streamlit-light div[data-testid="stNumberInput"] input { - color: #000 !important; - background-color: #FFF !important; - border: 1px solid #E0E0E0 !important; -} -[data-theme="light"] div[data-testid="stSelectbox"] div[data-baseweb="select"] > div, -.streamlit-light div[data-testid="stSelectbox"] div[data-baseweb="select"] > div { - color: #000 !important; - background-color: #FFF !important; - border: 1px solid #E0E0E0 !important; -} -[data-theme="light"] div[data-testid="stSelectbox"] svg, -.streamlit-light div[data-testid="stSelectbox"] svg { - fill: #000 !important; -} -/* =========================== - STILI FINALI (BORDI INPUT) -=========================== */ -div[data-testid="stTextInput"] input, -div[data-baseweb="input"] input, -div[data-testid="stTextArea"] textarea, -div[data-baseweb="textarea"] textarea, -div[data-testid="stNumberInput"] input, -div[data-testid="stSelectbox"] div[data-baseweb="select"] > div { - border-radius: 4px !important; -} -/* Mostra interamente il testo selezionato */ -div[data-baseweb="select"] * { - white-space: normal !important; -} From b451cbabe3e35f42bae7c7a3f2ff4bbd2191eb37 Mon Sep 17 00:00:00 2001 From: sdp01 Date: Fri, 22 Aug 2025 14:07:58 +0200 Subject: [PATCH 03/11] Aggiornato file app.py Risolto bug che non permetteva avvio corretto --- app.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app.py b/app.py index 4a32475..1fc5d3c 100644 --- a/app.py +++ b/app.py @@ -2,14 +2,6 @@ import streamlit as st -from views import ( - api_configurazione, - esecuzione_test, - gestione_domande, - gestione_set, - home, - visualizza_risultati, -) from views.session_state import initialize_session_state from views.style_utils import load_css from utils.startup_utils import setup_logging From c3a32fa964d12ef125e1d9200efa08a1fa6cdac8 Mon Sep 17 00:00:00 2001 From: sdp01 Date: Fri, 22 Aug 2025 14:25:38 +0200 Subject: [PATCH 04/11] Modifica stile bottoni Modificato lo stile di visualizzazione dei button --- views/styles.css | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/views/styles.css b/views/styles.css index 760057e..5656c39 100644 --- a/views/styles.css +++ b/views/styles.css @@ -52,6 +52,8 @@ div[data-baseweb="select"] * { BOTTONI =========================== */ .stButton > button { + background-color: #4fbdf0 !important; + color: white !important; border-radius: 8px !important; font-weight: 600 !important; padding: 0.5rem 1rem !important; @@ -59,6 +61,35 @@ div[data-baseweb="select"] * { box-shadow: 0 2px 5px rgba(79, 106, 240, 0.2) !important; } .stButton > button:hover { + background-color: #3a9ee0 !important; + box-shadow: 0 3px 10px rgba(79, 106, 240, 0.4) !important; + transform: translateY(-1px) !important; +} +.stFormSubmitButton > button { + background-color: #4fbdf0 !important; + color: white !important; + border-radius: 8px !important; + font-weight: 600 !important; + padding: 0.5rem 1rem !important; + transition: all 0.3s ease !important; + box-shadow: 0 2px 5px rgba(79, 106, 240, 0.2) !important; +} +.stFormSubmitButton > button:hover { + background-color: #3a9ee0 !important; + box-shadow: 0 3px 10px rgba(79, 106, 240, 0.4) !important; + transform: translateY(-1px) !important; +} +.st-emotion-cache-15yv26i > button { + background-color: #4fbdf0 !important; + color: white !important; + border-radius: 8px !important; + font-weight: 600 !important; + padding: 0.5rem 1rem !important; + transition: all 0.3s ease !important; + box-shadow: 0 2px 5px rgba(79, 106, 240, 0.2) !important; +} +.st-emotion-cache-15yv26i > button:hover { + background-color: #3a9ee0 !important; box-shadow: 0 3px 10px rgba(79, 106, 240, 0.4) !important; transform: translateY(-1px) !important; } @@ -82,6 +113,8 @@ div[data-baseweb="select"] * { gap: 0.5rem; } .stTabs [data-baseweb="tab"] { + background-color: #EAEEFF !important; + color: #333333 !important; border-radius: 8px 8px 0 0 !important; padding: 0.5rem 1rem !important; border-bottom: none !important; From 45712f4597139cc18a5df287d148692f5e6553c4 Mon Sep 17 00:00:00 2001 From: cola-marco Date: Fri, 22 Aug 2025 16:36:42 +0200 Subject: [PATCH 05/11] rimosso blanks e cambiato view in views nel file yml di CI --- .github/workflows/ci.yml | 4 ++-- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2454 bytes .../api_preset_controller.cpython-311.pyc | Bin 0 -> 8892 bytes .../__pycache__/openai_client.cpython-311.pyc | Bin 0 -> 4570 bytes .../question_controller.cpython-311.pyc | Bin 0 -> 7805 bytes .../question_set_controller.cpython-311.pyc | Bin 0 -> 5949 bytes .../result_controller.cpython-311.pyc | Bin 0 -> 6553 bytes .../startup_controller.cpython-311.pyc | Bin 0 -> 1130 bytes .../__pycache__/test_controller.cpython-311.pyc | Bin 0 -> 13968 bytes db.config | 14 ++++++++++++++ models/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 233 bytes models/__pycache__/api_preset.cpython-311.pyc | Bin 0 -> 4941 bytes models/__pycache__/database.cpython-311.pyc | Bin 0 -> 8660 bytes models/__pycache__/db_utils.cpython-311.pyc | Bin 0 -> 4359 bytes models/__pycache__/orm_models.cpython-311.pyc | Bin 0 -> 4503 bytes models/__pycache__/question.cpython-311.pyc | Bin 0 -> 10817 bytes models/__pycache__/question_set.cpython-311.pyc | Bin 0 -> 15871 bytes models/__pycache__/test_result.cpython-311.pyc | Bin 0 -> 12450 bytes models/database.py | 3 +-- models/question_set.py | 3 +-- models/test_result.py | 3 +-- utils/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 131 bytes utils/__pycache__/cache.cpython-311.pyc | Bin 0 -> 3760 bytes .../data_format_utils.cpython-311.pyc | Bin 0 -> 3346 bytes .../__pycache__/export_template.cpython-311.pyc | Bin 0 -> 1794 bytes .../file_reader_utils.cpython-311.pyc | Bin 0 -> 13403 bytes .../__pycache__/import_template.cpython-311.pyc | Bin 0 -> 3515 bytes utils/__pycache__/openai_client.cpython-311.pyc | Bin 0 -> 5499 bytes utils/__pycache__/startup_utils.cpython-311.pyc | Bin 0 -> 2388 bytes views/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1200 bytes .../api_configurazione.cpython-311.pyc | Bin 0 -> 13255 bytes .../__pycache__/esecuzione_test.cpython-311.pyc | Bin 0 -> 8789 bytes .../gestione_domande.cpython-311.pyc | Bin 0 -> 14578 bytes views/__pycache__/gestione_set.cpython-311.pyc | Bin 0 -> 16904 bytes views/__pycache__/home.cpython-311.pyc | Bin 0 -> 4080 bytes views/__pycache__/session_state.cpython-311.pyc | Bin 0 -> 1688 bytes views/__pycache__/set_helpers.cpython-311.pyc | Bin 0 -> 9389 bytes views/__pycache__/state_models.cpython-311.pyc | Bin 0 -> 2785 bytes views/__pycache__/style_utils.cpython-311.pyc | Bin 0 -> 3019 bytes .../visualizza_risultati.cpython-311.pyc | Bin 0 -> 20523 bytes 40 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 controllers/__pycache__/__init__.cpython-311.pyc create mode 100644 controllers/__pycache__/api_preset_controller.cpython-311.pyc create mode 100644 controllers/__pycache__/openai_client.cpython-311.pyc create mode 100644 controllers/__pycache__/question_controller.cpython-311.pyc create mode 100644 controllers/__pycache__/question_set_controller.cpython-311.pyc create mode 100644 controllers/__pycache__/result_controller.cpython-311.pyc create mode 100644 controllers/__pycache__/startup_controller.cpython-311.pyc create mode 100644 controllers/__pycache__/test_controller.cpython-311.pyc create mode 100644 db.config create mode 100644 models/__pycache__/__init__.cpython-311.pyc create mode 100644 models/__pycache__/api_preset.cpython-311.pyc create mode 100644 models/__pycache__/database.cpython-311.pyc create mode 100644 models/__pycache__/db_utils.cpython-311.pyc create mode 100644 models/__pycache__/orm_models.cpython-311.pyc create mode 100644 models/__pycache__/question.cpython-311.pyc create mode 100644 models/__pycache__/question_set.cpython-311.pyc create mode 100644 models/__pycache__/test_result.cpython-311.pyc create mode 100644 utils/__pycache__/__init__.cpython-311.pyc create mode 100644 utils/__pycache__/cache.cpython-311.pyc create mode 100644 utils/__pycache__/data_format_utils.cpython-311.pyc create mode 100644 utils/__pycache__/export_template.cpython-311.pyc create mode 100644 utils/__pycache__/file_reader_utils.cpython-311.pyc create mode 100644 utils/__pycache__/import_template.cpython-311.pyc create mode 100644 utils/__pycache__/openai_client.cpython-311.pyc create mode 100644 utils/__pycache__/startup_utils.cpython-311.pyc create mode 100644 views/__pycache__/__init__.cpython-311.pyc create mode 100644 views/__pycache__/api_configurazione.cpython-311.pyc create mode 100644 views/__pycache__/esecuzione_test.cpython-311.pyc create mode 100644 views/__pycache__/gestione_domande.cpython-311.pyc create mode 100644 views/__pycache__/gestione_set.cpython-311.pyc create mode 100644 views/__pycache__/home.cpython-311.pyc create mode 100644 views/__pycache__/session_state.cpython-311.pyc create mode 100644 views/__pycache__/set_helpers.cpython-311.pyc create mode 100644 views/__pycache__/state_models.cpython-311.pyc create mode 100644 views/__pycache__/style_utils.cpython-311.pyc create mode 100644 views/__pycache__/visualizza_risultati.cpython-311.pyc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d474a57..0cb8ef0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: run: sed -i 's/host=db/host=127.0.0.1/' db.config.example - name: Run linters run: | - flake8 app.py controllers/ models/ view/ - mypy app.py controllers/ models/ view/ + flake8 app.py controllers/ models/ views/ + mypy app.py controllers/ models/ views/ - name: Run tests run: pytest --cov=controllers --cov=models diff --git a/controllers/__pycache__/__init__.cpython-311.pyc b/controllers/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7307ac0678add1c04bb6700eb5151878ebf4ddd GIT binary patch literal 2454 zcmd6n%WoS+7{F&8$L~ktXX+%4lQ@sf%WZ%{rK&e>hy!py-(|FTC+=1=UbDMSn_G_j z2XNqkI8Y(}4E}*2h_x3z17IO@rZ#SMj z`aR3oZzROe-1y~X$71Yj<}zTeGL+Qw^R#S zY8jT*3aqGASXH;-wpxQV)rPj&la}jh12)tqY^n}))D~>1ZP->ju%mWi*X+qiTkXM~ z+J}9000-(24pDEpS$U+o(6yN8KE4yD4RQi`BG#NR0N+aioa zFz}CFkhzavkX<{g3(|L7J`6-CqEJ@@ae}XpxHI%7%7XO5Xd*52MJ(_y&ba65%Ilhe zql7M>I?{8UNQ}?veCV7`grX~?n66bLjLo>jum_?SdH%pI=#mNT%MmW3BGijhms7>q&qUFnP)|IGl@QZ|p{|+e;%(e9A?U`9n{WVn&E7JFaGu;$V-)O>4>#RxJw4;7AV{X*BULdHnDCpccXY)Rem)`5x(xDTW zO(8$=1Agj>C%Q8BOLoRlqs!|dz{Zax4naBg8Y}AKe8+N}ZGCL(hPvDr0})Vs&LDgu z0$mn345JxECKwGk_1sSCJk=+5R5Fu>v2hxrP%ju+`Iy&O)0n0uaZtEFG_zq_I`=JCk9^n9CzpvAryMB*zotA#T?+yC8KK&o_>6P%e3Zbi$fu6DOFRG)P6NA+08KZw) zHeEJX#mt#D<^N}OG!>(Jg9dxn(;JGYD`w8ZBje%vNU%@V4-vY8Lli`#;j9%ZyUyYO ze}v`6LC7oTsi*-8{OF Mah|46@Bk<54~em`=>Px# literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/api_preset_controller.cpython-311.pyc b/controllers/__pycache__/api_preset_controller.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..825200e3f2fbe680cff424b39ca4135a336292a5 GIT binary patch literal 8892 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 literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/openai_client.cpython-311.pyc b/controllers/__pycache__/openai_client.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71c50f8e08b133375b97d11dccf96f42922d7e62 GIT binary patch literal 4570 zcmcgvYitzP6}~gGJG*P|dNF?Bx5vg5ZxCyOaZCW2haWY>UejXQVhWS-&Uig$ytBG9 zYs_km{3B8w6e(0{gw;~jMG@EmDfCAq{#1fgtc`KWXVz$Df!hw5DD?C=gz)~ z)KpaI-JNq^=bZaG=R5b_^Z6I;Y&CPh=&J=z@<Ht;qM-d|4h=tOTCQ2ok+_s41^VpF;tEqW8QmE3$r#i%FQ1qq>BJh>RsJtVTIS z;!d7D&54rC#jv^{i@-8AHXi(j%qJ9}Om-qBMNghiu#uR)|B#w!oYnQ1cBH3Ah{-_} z`UE)`R_A*b-ZWj%#9xuFneJ&pllVAR!gOw3By+;Y!1t^kmU{~&k=CM<_FP&kY(l<; zI4+`Yt<&AdckQJ3gUGQUH=r(d1_1z5onbDbgU$d;~BSJ5JK z0bQj6Y~sKmmIO}Xu%zj-9+$PS#KogrSdpcu&SejSoZO5YiDN-mgNfcr=n-^zLFGi5 z3xha0+cJJliY5duJSz(e_IU?GCL4}xx;no>V`7Y$98RKV7-JQLMbHdp!YLpF>JqXV zg+@s!*Ls8txJ*`2BM}LkuB!r$%F&4F)O0Mz%pF6+BPY*~P4dH`p|caGLz9>sfaw`t z3`;Q`6q-(n3>I({$2WIMGc!^cRwD6v3o;pLF|3g(a*$qjfZ4@*VEH;$6-B~YPu2wa z?0SQ-Yi4ys()qGhyc5Lz@M(VnvWzSid21|0J8QSxRUcN}s4{kqrQG9b_qgF6&-iOr zbc=R5YquLX!z-@+;@;&ums5NC(tG-#`l$Qy?BaU`@dx-$BYNzr1Er}d9UT8!n|a9rKlKF!N+ayvuz%PNh)~X!<_et)D_#t z@!yj)@g>{@enMy4v|8{jTkKU*?ps==$mj)60dIAP&WPh2(#dGKlmwr9z?S>e5|d;! z0Jl=vNY<~Jxx%d1$gzJXmCs9`9T?iaKyIdxyYA7`Kl-zKdOo|0Q~R*idB}cJxpIf=TII8%KAV*7ZD!8U1Ls5&VQF$7$o&)z0pjV44MOar!RoR=jkf2$0792>83W}Ua0Fq#c zGAI$~9?qE%2^S^ZTol5E7L&sAj2s5`K*DKp_!li&u#;$?y**1`0QMXV80>q`c84ceq-(R3>6RS9n} zCLKIrI^Yg4Z#r$u(a7RBZW&iY{?cI*CqODJ2(ltfD-xe&=4VvQ7fk4w zqJ{-U8wegF)(F>t7!>mg4uL+6kQZO0uhB9x+AhNX(a@^C7XNth-t{}zQ+xZdXSJWG+eSi-wOS-@#J!n1;Iy5%T@;&@m$ z8E{aD_lgh~CDReX>Xnz&{%?qN2OK6NM6a2QB1LfvG(h-{!Br7%1?^D79Y8d~$eqZV zM@8|V6Me5`A8!(sp8$CQff!X*?<|t-hSsg-wo)rFhNhsJYP*;Q+I%tHe9>}&$hQ@! zv8A}~Vrjekyyb)~dP=tPIU!JLB&EhCtCC3WL@n*B@!N}kxc=Mg>)}-U!F2nh@-O{nu-dQ%K(aTUxb@FMT?R>hO zw_L!TX=uIewwSz}t-+ppqA?!{u@sI&L{;l9=S>%RhLPtNn|=A@UR!XWW7+qao3|ebJdeq9x2V@-AV?II z6ODqR@cahKdY*kLa32GUiYw9p{xJv>sM7uh1QtS38T7V+-nQI`@-J7B-!^JA%KsTp z)5@;2r)l+Y%F~thbS<;nI~taKnVO)1c35s71+OF^tD2pyhaV1Y%-O|PNhdl>O;Q%~ w2GwjKAeowayOQ})V14M1bJ_B#;V&Fd-Y7EJoLMqOIV))k<;k*({Ooo98w?e6i~s-t literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/question_controller.cpython-311.pyc b/controllers/__pycache__/question_controller.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..019cf3e46208b0284dd73b946f6f93760fdf2641 GIT binary patch literal 7805 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 S_U$kjX$D;$#@I!e1N{%X{yP@{ literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/question_set_controller.cpython-311.pyc b/controllers/__pycache__/question_set_controller.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68b4e9974ad96322b2258c66547dc62b77a25836 GIT binary patch literal 5949 zcmb^#TWlLu_Re^0kDqm(&O6g2eYhzuZ75|S6xt@O0^I-&Wrfwn44z5qGJbGp(nsX1 z@)3!&ss3%8CJ(f)$ydR8p(7fpQDCKfiN@&ZD&xoS{j>(t6LpZou#UNwuZ&JW4zV*!F*a% zYTbHLQ4Kk*S>3Zanvol3O+rWVd|JI=d8lg4(`>4?rBLDFal!Lo0Kg4m)QpCZ+t70t z9=m{IxP=!$AR}$er}dO78S{pbmeLaNDJf}5$z|lMqDu2dT1zi1Ks_gEvXqijXVrL& zvs#mnN%sYLfRq0^x=+sM_oZ@KgXT01)VI&k2~${oAfCTu`Lvv@FfGt15Vyjk!!aaF z5vSRQ8gijFKxlEgG&`E6|6N;(Jweemcz0KiU$y3Ekvs<5h+LStrVZ0Y#A z&|MOGO`*3a^p*oHOMkRgidLJ#S)GF7F~z(FmETfKfxiuScWbm9*;+MBE$5Foa)W9% z*u07dUdI`$1-@@#v&AX+k#S;}mwercWccsbx93ozE)`x<$e33f`bt8?a=+7l&Gkh>KG_TQHeTA>R6;b%oK-)xDUs-16U#t zMMrTZVZamyio(ESO0xnAy2q@Hp&+%X2IDZ<|E@t6j`)R_CUuM$@>U)xx%o5Jopy(QtGDI6?1f7@rZ>7d+{p(;sOS)I$#w5m60!3%RRJGuuB>0|P-cmtA$ zts~ANXCQX9G)JRmM+R;VAL6Y_v_a)yv z$0DCSSm0MZ&iak-jl2|i#Z^y6R#DE!%8EG4DZ;YYyb4gd#{sv%FS;)idP?yakvge? z!L3>hj3Z7RBT2P1rZIIM6t7WB2ML)KRtT&vE(aGq1s>O|V{XoE!PCrV9e>eXa24Dz zi=g;!2{Yha4D|EWGD7Hwi(Ug=d9|!=b83xm#b59?hbHhBTkTHZ@!i=Hcaxob8eFgi zkSfK$OO)WE_b=X=>iYtBfn0RGOD=G+(89}aQZ+AA2!MFdSiXg)4pN|MVxU3|@|apm zlvgP_vhxrmFb=m^0 z%>{ZJMn2^}29XqQnH0#xhCK8N*XS`;IIwGeS-i||#A~)+h~Td2rUmi%GY!4~l^f(N zEcNH;B3Iy6q5XJKNb`iB@K?JqEwFr!vy-9Wf)p3@%g3L!IK|ee9a?_%je}cFNVVWc97jPk(m$&P$~ohs+&^Y6F{x^D&@) zAOZN4d!29~KS(d4^q2YbO+tRIYv$hwWd8*ApW7W}rKLWEav%UBx3aT%SOqtM%Y+sM|G%{9v zgSI?cZf;Jc zFduRr^RfMC@_e&Nkd{v1WXBL3$9W=^eA?_)Qc&KhOA@Ycpp-1EU(&^ zi;hkAk^TuValiDRAz{ExtBCvD{`KBisdv=u9W9Do>#ZZD)}3bS&K2*E`(G;u`+j!u z2mHSf03|WL61=9ZzE%-Quz!TKwQ|>qBKucdd^G$s0RR-y@XCpm6M!5Y zxS@Tb{VjVvyKqGe%Eflp8!Q7?J7s2#jZVOWb}u~{_i9E z*W#tf5i@e+7Z)#ui^0B%pY+Gd(Ou=

oei#pjOrE0Fsl@cAD-43c0+g@oMDcEGwA z{%i0`u-GwvFI5tcn&Q!-c=X4FT*&XjEGl4tL>j z7Y+mUc;j#%4)@`3U%28Sz5SJr0P$5+VH z0KW?_1=7L)phF+X6p_cS0o;B`Ao&<&@o~gbh)|VYp@)=Y<8i-S`8q=bI-3%-Wk3_ z*M`5maA&VMatI}Q{@w(8Z3IE`>~j^@7zalTK)HMS>d318_n6tem-XIv`&Ncm^p)Mq P?^WCm7DL?tSeW}SeIS*v literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/result_controller.cpython-311.pyc b/controllers/__pycache__/result_controller.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ddd7e472cbd822947b124b4874ed93fefd10b1a GIT binary patch literal 6553 zcmcgwTWk|o8a^}Q%S=3Wd(u8{m0m2eOSng0tX;X@8JdZ10%~TfEN7 zS|Q<}NSo4hleSb?RhOn}S7N0;@URbPwJY_}wnnlw5>lkquGBYIv{J>>{%6LCXB<#> zx6)1~zyEX2e{TQzFW;HZoz4aX&%Mo`UmbKJ^bb;4e%LDWbTfs}JQ9#V#n34ErDN0t zJxWu09W!bX7{L;=PS{3mP{#k8g5xe-GakdEAXZgCwfHJ+T|_?`Z%GFx2{jUltplX zl&?;zeq>s7iLNo)G=+aOc$^uo}X&PPET5C0eK@T~@xXa@sBrjVK zRGCjZXRS%qIP;3))Hs^5r0Fy*Ftu6#>zQn|@oQY#VqQ;e{3&{x!YO&h=2q#^nzkDB z)RVU647;q&AW-HR1WRp>99NU8arL{8qC0lMD*I~^f=ymiD~(yQRMtL53-(+5lugqU zYnX$tN!GZu&Ah6bJlF>fHq51l4~KCy5)MQII7&=5EJp)kAe>CbNUeB7jLVbZSTsP) z6GsC{5eL9rK}0juSR!!pV2U!ZQd@~ByO6v(1HR(F(I3*x5{xqYTKB$K|t-8j= zxQIb3iFha$n@~N5vhK&=w32JyQ0yR1obvOO;#O?vH;op6}XQXdO^m2WB1R zfg|~rGYigAOR(4yT-;J<=~G(z@-2Pe?3%SgzlD=UUw5AGehOnF)xI3+oS1A169-hS z;zUxusoKJld^0Jkj3i^#CMRN1NmeaUDH_KR_mRqJ#u69AcU8Nb2ni5IRf|rqBoZ;z zO6>4vkj2F3bUo6-m}-Y^QmD#+u|XuQhE%A;Eku?$jzoF|-T^fS0>8k`P*5EPwc#Mt zKoUe!FWBafprwCuP1CJ2t(l=EyQhNe*8V5n_3v$&+mf|cY{?|8UN;rmPc!6JX~?@WOoR`}r(f1=2rDDbBg{#2enwdCPl4CDCrdBceHGMb-SwoY?Y+x$m$MCI z39X8+U0=iT5+5k?f!vw`->vZ7i_HqZy~OV=@_P&XK84?x=l4}-T~pz$T<{aQg5c** z7VYOJh)ZAQ-Z`hf%-pGhdxrwAb0;j!;mjPvB$B8N)uSgz;r`X6C~00&J)Gy~u0`l~ zn;{N=4LJRg>}jf2!t^*g57^@tN>e#w&{!4+JYsh9;kw*+hsiQyl)&6#)5sWy>*c0s z*^rm&!vVOzHMQ+XOpHfJbc`n^q5(mSYSB-KO36e#dL;^hF%ESrp|jT%=7=k3VQvJN zc@%|Rzuh`T8MAg8f=(?eoA(86hK&3^J+tXN`hv#9WHAZ%Ur=}>`Jq+1cbm%K#IGfi zvjYLm)}J-(C!Q2ZOe6 zng}N)f@L5Q>q_JHLz}L%wioJbS)>noO51=y?8x(P>F*;cd#U8ySafduB$8|Y@any* z`R=_1=YZlISdr0Gg$fQDw`**<(UavW^zz9q`PxgqEk)m!#bX6upW^GQ zSfS}VVgTP0k~vvnk@FI@vh>H-^5@=EMn<8cz`v#NZ)J`=ad>7srw_~=$Xi;pote&_ zIDrOR{|e4*c6{B{jc5G;gbg4TvT-diNIeh`R!$uRSDt#5@Y7J$JWrg8A_xWsm}YLD zVjz$hKF1C8pN?Q2kIasn(oBw=!>T7; zH#>!9;zlr>X3V33pV?BoR|iEM3`PkU3}~r14lvRj8MTn5p(DHw)`7i*ke~qRU2_2v zByfNb%^4W*GR=QgCM*beACa`_j?qnoNQPH!I-IH@FNtgud;}gnrgRI^kY{=!AzA$qkGg59`yAV_wJ0RIwTQ!np%5LAh{jNRV(p_)| z6?ZUeEjRkXFS%iA!FRv;qvm|uuEN^g%G%v}W!c|W@^=>fow>;8%B7iGZXL>q;TRh&-YfdZ-Fn}zXWTTvJgu(dKtOoyx{t0@KoqyxN4cLRj`^f#gsj5 zd;W-mO|aL=vM-cn1+Gq(OLIblerv$A;DDP1Kh*#}XMh)=@9G09cGglplnkFQK1M=g zx&f#=Z3pT}vx4_yi{MLhAEQq=!GEs~`hdUYUgX-72Sec5 zYg1d#Vlf%U;Xq6bB$6q(^AOAv1I!Z>Bl4BRyBY%e|DhdB@)_Pr2uZU>c!PIBMe1b; zHn3n3pbc4JD3K%(^tt%vRWiyhLWuJ5ZbGy`MA9(c14QM*H^xH}z!wn{UxDZ%%2yLY ziaEXYkjg-8nya{seGRGIhhXlP93fVPJ?`8WCU)>Q+DXXxQjNaHy8k_#||~#|R<2 zg6pakW{=9iQ140vVOIeoyFV75xFUoHQ{6wQ)~aL#dP}W9GAQTC4JvIrN^Skcw*E&= zg|>rA+rh__(l(UQRsLF#R+;PKO>$$r0ryC3zifqdgOw}w3^ZT=mCgg| zb-Lij<8*z;ShAiyyaY3vyz7#SVh4x zpg_qopc_V$YL6wx$D{Fa`1Elz3BQ=Qw`xm<<3d7<}G$`CdTUwX7pC~C9uE^TbJ zk^W8LWHbclOAMp-ji~xT1-@^bgh@rLvLP+JghHx~ECcM4TozSs7_4dplkZaG`-f^F z_(;1uXuwFb5d0dn=wXt4HF?JF2mCY{69@5iD3XXFjR37M6h)PhE2I6DQFGq>E+Joj z`CUT6y!kDo-n{uOqpf-KyTq-_HY?n^h5iE9p>Q1;TgBE&xfTxRIzBvJLBKwYJR1J< zHI04z>fbJDOg$N*IBM+zzL%~bU>@PW=uH0XYxxUrC}-c)s_RKhBegE){cHn#grU|w x?06`B9n{!*($PZgE4#gOe1#$0wjE#V+>({cwr8bm_pQqnE3{P53y7xYe*?-AsFwf$ literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/startup_controller.cpython-311.pyc b/controllers/__pycache__/startup_controller.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..565b2f8438de54abf44ad9f063a84baf1d56534c GIT binary patch literal 1130 zcmbVK%}X0W6o0e3*<_8ewV_BVgdh@05vABe54D%JP-yYcLMeM$*4;^5JDW{sCxwcZ z9D4972uktbMWywhNg#(ZAQXy+-WI%h>YIG1E#%U-JHLG&vv1z}y*bI{#sKAD=49=& z2JlN6Loo)*#Ya^3zz3f&u+>*%B-Csz)NMU9Y=bDD&QhUin_=2chZ#E)TDC<%0}AWC z6I3pmJthFBxcXv``v%R?33{ul6^2fzYJTdAVc+)28>pDSm4Bt8%Uq2L=R=dmB8cj- zoV;l|F%_}QDi^15lZm)u$lNnpby0sB)vG~G=7V}50+$6F)bU;6uDUUmc^0|8}mp#|s0RL3ZEjY8Wf zoE0B*ic8(%QtQR}-I*O{*EuWP?-b^{h5565ac6mVIY}F3GXaFw%VZ43=eFOsv*rDF z2yLT$ff=DPDbvHrXPY8m@j|bGe_E9Jer#BG&*CN~xWS5=l(g_xzQU_Sxy(3D-3_VZ zNK+kw9>WhjA@x{rX-2E-)Dyi1zX8vyRFepona5$|HyM4xi)gBw7Jo-bbVA4vm}vE$ zpYXgr`c1SH(GvJSn1HeA?WwMHZ~sxpn(bP%Ei*AKGPnQmP(OTonC(u_CxG@y==Jgk DF4ZGA literal 0 HcmV?d00001 diff --git a/controllers/__pycache__/test_controller.cpython-311.pyc b/controllers/__pycache__/test_controller.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05c9ef1819821613db149efd5faee4bbc91d6959 GIT binary patch literal 13968 zcmb_DTWlNGl{0+5DUo_nw&>Bz5*_Q|M;uvE?8uUA%aNVLa@t1Sl%8-#%BXzEGegH= z$*eZ$?y5zw_3ox?2UP&Io2Ck~1^m$hY0+Yvc+n(_?t(N1Ffo7t0gEn@KNe|#z+ZdL zo#Bu}ONmqL)$q){bKmEld+vE${mk$8P!QI8e)d8sMp6HRiE6NF5&BabO;I-}j#{8N znzJP7lx4v}W89jwE?CLiwqS#|Eoo2L7wja@o^+&~3(k~l!Ig3^xKo}5Ps+RCP5Bml zdR_lQ0O~lB!Bo>iQ>uBPITcz6kvwNIoN8HUNwqGtlC&$?mTF&UCvkVOBNbVQ&=en8 z?yL@Vq0>U~w&gw5G{5&P81p;u)51a*H^BM6Yg>rI+Yj%3+#uHsZ-$F;t?=&V4sf0D z?%^Kdy5QZ*9pw7q-M2(>`+q_&^mEpEDmIimbvm2Q37NFOtnea}WSJ#ik|E7A94|03 zBp8e)A?GTa%*rel<{4RJQ-aJhb93j1KfxizXw}Q6(;1n?+R_C`yEsbV4iyvR%0q^!2!fa4-b#D&yKMwEFGhw^k*n-;|VnH4_G3h_iz z;M20|5P3N(rtkSyxZ!D5W>3S+_=JvT^0EK~(xE>cgvbp_HWq=RmW}vZkoOKLjsQ?g z=Z?XkWI@gfQi5j$Mig*}fSwv=v$BvBayd55Wf1iVHt_;K9J7c4XhQWSGb|TplgT)@ z_%`(^HhZskgk4z~No3Npm`NsiQ5qo=u6-C@c}ew=iW(9mF#`44;3qW$Sf&2xZB@M8 zC2z0d?Je4R#di4m|1#Ud^H;O5`amtBkYMp=Oo>eR{^=Vt^^5!>4EKdNL4b&(CF2r1 zAf^VZxz!o%g|E0V>Sxqj^7bp<{-Uj))KvXIS%5yCi!TaE{$6mu%mdRqVoCU{!?6IkmSWA*BIsw0+X5 z*VQxQEa9T!ek=n&=@fufsxnBqT8qxTTY-*ZWV94Gqy!EXU5EbY?^gVWZ#`D>Pb&V& z)ze#n&hMpPO|PCQdqdYx-#o6g^cU;4mlrTA3qV4^r|*Rc|Hl1w5O){upyyQE1vn;l z-blkRklom5<2Jz)5=h^Y8=H}ko3lGJ(lj}s^g(GS)FP0$AhW|4fS(fF2KZ~(LR`)e z%*JSO0MUYby^2A-L<0s7LWv11iu(~bsI5b>4QzT#wxf#eXtDZee8+V~KWJ1d;6e3k zhfEyy#-gxvFMtQ2hA21>pGz3r0UAbbK={nZwnp^i>5Y1h1O>GK!iME7XyYBDodzCb zaZ|FrS{hC(gEJw2*`-aZxs89bnR_T$)2DhV8OB%*%SOD95=RR*nFwH7?uMgUs{YN{ z^9`-il#FYn2hL$0L*Dj^g>x2cFWX+EU!<;CpQT=;^VHuA$#|scAy3KGD7?*M7CZ9P zhPy7?h?@B>XZbe4q!@dEIk?PYY?y)DocjvRdGgecs5dMH`>vSx$}Psg8fL)x@^;R@ zZdsyttsUTk=2`DrvWaUpm*hh0wt~Y=S*W~q*;^gMvd@V5t1&JjP1%H&yFOLAkdYrzozq5p!SO!h@{sJOxzS zSL;VczNiNo1v@<~T7il$72FR%0d4X_)mjvlZ&>kVlwwHu5yiFV-LUpH^UQ!^>gHW9 zQ#7_^u9tU{-Qa%N{UR+RFVzDX_k--d4%4_BM%6HG+gBQQLt72w-eDKVI&;4`14pRH z!of{snw5+MOdfTS%a^OX6vUZENty7|tf*@vpoK71ey@o%7i;ncBW03AyaowWYki6I z2xkK`n+Ews$}pV3@ThL^%vExtLzN_d6|@0zlxNceye>EJ+TpG`*%cxFZT=;dQeAwS zTgeD%`E84M7}i2{JO%ei(k zR3s0?ry*~#xyOjm#*@z+j15Iln2WZ|8mcu7)}R1fZwW>x0Iu&@nIR^3TyFz}D3QMk z+9?plgETeH5Pc=qA>vk4tsowYcr2;S5R02t&9JtlQzB0UC(@(pNM=B$7F9bTK(Pnw zdIU*G!$i{w(2hZl5LQ(G^vvnWXXY-&&p$amGpE`TFR*~&L?#6qG|{+KM*`ag{6ojA zEQ?|{G$lTY?fEWd)2N7(9!2EvBC>Q5IlO9f@_LnQze1fMymV5As%xD+_11dhEsRdk*F974s7 zZD7Plxtfa3_BV2ygTI_A?Hg0}jY0C=v;ThK*B43?bIQbA@u`b)5vcnGeT`{%7D>J-yu=z1!S#r@3e2k)NM0HIFOJ%k6!4+XwHo4{mn7Yb~`;DD4yFw%)sK19#d6Hhs4erM7XUZM@>P?{QQp07YAS zB@na^m&1pyAA9XlC44{$A1a2=;&b$j7Fly`g(5cx0poHhbW{l)U2~R$Z54`kkKbI{ zVAq$G=%^AMBOkUx(c-?bQs}r6I$rc0hjQ1iyqZ&j-AXWaH#l-9I8q88Qi7;ue7@z2 z{xtB*K+$^=5r3ct4BT`7HC=rA;zwuxa7LN?tD=v?hkag)?64?%-Z*me%InA0kCg&F zN}y+xF1lj4GF#pjY<#!|>Uyw!IRBCR4{qh`g5E*=i#w2BA6p+Q1^Sdg-)3*oHH01D z(htL1Isw%B)7WH?dM_9}6|lY+edv_i`o7x^@&9;qa`^NC>h}lQXAfCFpeKW8o2(x; z`62OP*JN<^p!K7Jc1Wl}&^y591;z?(7pQ*F-Lh;_PbLfj8@e*oggFrG|2|;Wqw>~W zg!(U26l}XH3btL_{4zzso*wuDMWMCekPT52#6Ek2u;2h8$5C*+?5K(SoD)T8&XuPD zy7Lx*o;REY=dL64%7zHrs1krc?bHS8-EellK)qYZ9RzAFEYMuby1n2cVzqr4*Nuc_ zmk~2m60R4-Y8Mf!-EwO+AB9S;6_g>fSnbJsK&TMC(IXHVXXs+GCSEA;mQMCfN~?JtL`aS)bI6#Nf>p}jk`4R|sz4z$~q z_i_#{`nQ(aiU4iyd!u28RMkULLSi z8orzc?PB;s_A=BaUC)CL2qvVJmQg0zl_1~V0E;V(o1hEy zIM5X^rKu9S=A^44<4mrN^iY%OWiZOK@I7MwKC`$8m=~@>R<;XHLJhI{NSFVADC485|utG&&j^XP(Z29+5$n3KRv1 zf{{B#G$RR|PcW+B@y;_xstl@Y@cc>nAXX zDqDJqt(GSg1G`&(X}qoj&_Sho!ZY_l7C0fN0kaL2s!LBusj-qq1UuHMqmTMpGnyWZ zCJ+O8h%5~^-yu^*ovnu;sb`!y{_w%t$2wF%R?l4B3c$|Mhl)-?jZ9>=r>=4hFWBs8 zT~6KXAq!UBlvkT184ejufk0wP5XX=M9!G$tgeCZqKx_)1+=IAy0f6dVhJ6*!JiiRG zcg(I;MQOgy00F*7O^c0_Z7LIGRRBaZ0{n#IDZT82keD;lvpaMUET#3-Trlvas;e$PFD3i`Db@kFji zFH=?3hbNMm1e=sj3>#&B1Kmp~*nIvm^)YDg#n1_OHpADC+&oYW_i4#`NPH%_P6I<^ zlM3l7t-xV0TRp6DOoX61A9<3={q*?=n zFN`yva4_neb$EC<*Q*!9RjsoC)wKsEpU1KI0lnnTCL?o&HmDHmBsL-u?Hj~KB%Z?9 z6aqB+h-VSZA~=WO2?TQp3`>qUjma4V=K-iTBw^K#u5L-S!o<}e;$RvPw4=3$P`>yi zHt-aHSWvU@d;>o`i(mu+igM!92reR+M{o(jGYHV2quG_faepN%h@iLv6-naPFax)n z6a;`wqZS_54L%K2BxbMoltLxn(;0AW2ihujcvmO{4yt{B#c3p6ROdj&Z6vYC>gmcj725az zVYDgl?b$eA+;h0%b)fME02*(aqJNq3#^Qd|Y`lRFTfWc_=Dt5yj7*k%rxf3*qVE*3 z=NvDE#+A@`(KlWOLs0i?2b55s5<0l%+-i-ywy@zWwGJw+gKM6O#SsA$Srx4L!D81G zuHWOg{E#YzPAC9_CzRj`G#bs&TcN$huBmqi0KiiUO)H`4qHnqkW;Ry@%r`;ByAO>w z7m10k3JoI;Tl_}6=wsp8!6*cly4hPVzAOLE`mX$o0wlDj6gZ~@&J~|}y6AcuSGnF8 zWkF+96&Mz}`QIM>9sR3Ee)EX(=o7`(d3>NYiIiNI6xXGq>k@d%zq$?Tncud&oA_1a zHxcFd6Gh)M_&hbQMRu4E8o9pE28Hb6t=MD}^i5mTbG_EzGsn+FtRF-=A^yP;FhN&MnM9pannFz)_CEdT0g&!*P;T(} zfA@hdSvA@S3U+}iIP#Wh>bZ}>DrDaP6Y~9`{@P96Y1RwPDRf{;^s57TSIxz}0+zIb zJMZ48pMlYd*_{k^XP~a(0*AWRf(I;Z$Q|{Ncjv8UXKcX>B@DX>+JN$&ycZnifSq^X zr-gzq{VlMrg{o1xw?OG{yPMl#{nTU^xf$;ji@psX#5o1=l@=CezFf%E?pt zrUtrc&NrJ!od3esP3;=acr%{3rgaCgp_%FIL?I-jz@mqZy4>nFu!=Ry1GQ8>WX904 zan%8AQlWfkC)>I>giTWsBgVY^&8ykUGs$R?-+S``kyVYcFa?nKyA@nfEIy+ zD@Q!kSLrJf(u;mW>z-!5W^rtcT8!|X7?N6n@_J_ zdOflp*_bpwYZoQa@KdL0pq9ZAzb+A&iNYd&3(8yoZ!2->)dW72*K*DM&kpschWa_C z|Ll1G`SJdF)y-aAiWB`L7d)do%)x?%#x2zfK=ay$!5S1d4hK?PQvD*!v0_|P`X%rp zUV%PTH+mq!sR<6&Jf^)8M3a1+xE~!*_=OCo26TrYn8V`9WJ(RxG!v3`SNoF0m!T2y zuK~dIVz+i>3r;7}w%Ct(Mgi5MWlM0A){xo_*?s^#!HKNlCe}!as0>8RkF|=pJ5*Qo zI<6+a6K}6m_mYceutZR&G&ZgoO^7p76L3-1)^7E-fXX=eG zrq=xBp^-J`b_-LXV(tI|Yt!YH?z=7hcUt;?n%M07vGAr)Y8h2pM%QM_;SLZk{gHB0 zN4b6PYlUL_flbTW*>ZT#jT8TLq7?2`!o76`l=g$g_H)J2b8BZSwurxNiy67)Dvm!< zV&)WP?z+Fy;cIT&>K-k3FdKuL=ZlY?2idHr4YY-xw(IAvpZgrV!X4ce%GC^>(JI(t zdN(G2?0D00eRjLMr#vuP-ak+t7%UIQK#1>wf&j2`^^d3S#-AW}I> zb@i8fA1Zebm!pH=3GM+@0$4lq!>OCLf1G`7w&aTzeNm9zoA)S9Be$HTrZJ^yY|Xyi z!E8mk*Z002U60<4jNXZi77tCAA~Q;4rW}dh{EiZNsJ!Q3xouB5I&wF9prDrc=PJ5@041ml$NPA_jaVm=%yX!-cWt3vrp+9Ep;ANIuBR;&L(I|18&dfpEXgw zR#YGWLsejC4-YPWgTB`kT65R_2wuVW8-j?G0#bfua^#GMdhc-4l+E(KHFT=Y@_s7~ zU*2!?OwsoDnf6l?_V*vL@9f(XFwBH`U+}j83_~p=42P8i5 zc+Q5bAG91f>$iUBq#^#H-wrV5AQytgz0fha*;~hBaBsoEgNLz*+Ywkj-p~`H2*_9T z@xa#s{D5W}?JM3Tf_BNVfLu*80gM{?_^o;qgyfU6gT$W2LOa#L+A*KTmPkI~O(aGb zl!O%tm&#%cS(Qj)WSkg_?N^=gIG0JljTBEjzL>>ZMDe%?ngS&*15llKaR$t+8uN6( zF@gy^&qWluMJECm0`#+r9sqD<1@B8qs%3>!9opp_?K%uPipiZAHAL<-NyB(H>;FkY zIJb6*IH>1V*{XIn*ztOrq}g=Ph@-l}=sZX6^=P)1X>1-PySkM_PhZ3G;grFM1Ji87 z%ytAF0PeXapxfd&EuC*)f&YNQ; zcc0?!TXj?%7P=17Pu9(W>{G=nh<{Vp W@RR#s(&F@5fcfZP)ro&(`Th^YSG2_d literal 0 HcmV?d00001 diff --git a/db.config b/db.config new file mode 100644 index 0000000..f69b3f1 --- /dev/null +++ b/db.config @@ -0,0 +1,14 @@ +[mysql] +host=db +user=root +password= +database=llm_platform +port=3306 +ssl_ca= + +# Per l'ambiente Docker, utilizzare: +# host=db +# user=root +# password= +# database=llm_platform +# port=3306 diff --git a/models/__pycache__/__init__.cpython-311.pyc b/models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96cf87a77d16f360e22402889de3c4aa6f05f135 GIT binary patch literal 233 zcmZ3^%ge<81dF#%$uI%Zk3k$5V1_b2>j4?l8B!Qh7;_k+7?>DR8L}8*ic*=D0okkJ z{3zxW#$X0brk5ZEewr+|*mLsJ(=+qZZ*iulmiPeKsYSOq;^XrYb5rBvZ?S=7Q;SwI zdJY!eDK*35BB#m~PL&2W5G>*VDg*!`A~&l5 literal 0 HcmV?d00001 diff --git a/models/__pycache__/api_preset.cpython-311.pyc b/models/__pycache__/api_preset.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0e4f398c91341641179750f453efbe2ee9131d0 GIT binary patch literal 4941 zcmcgwU2NOd6}}`TO4Oe%$DtR=P88d*tvORxFHH;Ai0hv;bNrKLMjtA)5Ll6M48i6Z1#Ao+<_E`3kOs&@2Mic6U;);*0b)QP1fL8Hec01v#07#p?Of6# zMceH%VAv&f_}z2Q<-PaZbI&={m*H>#L0Rwo@*2k=^bcIA7w;Z;u?Aoj@rWlxl*Ug| zB=TgM%u{KKz;#OW7sa%7tLC;kcWndD^FVQr zx#2q?01UUxBEb`PP?;Ft$Ip^*X5eyLH-TnR7kUH9p3lfz)Q9LZfcSlh)rnmj*3q?N`TW9souFW%g$MN;F-rli3p~vFu zy?Wy0W>`OwSTEP2OtfVO0olc*M!DYi0tP{#CahM&pDV};SI7!Ra86J%vLMU3V!`kU zw}k8sMUe15NLa~+PlhRTl59}00&sXfTh>~)yr&lldlAE5U+Y54!S%O+g#33P74&U5 zu7$hRaE})5c^)2k79LQ;XSMLz8j3KHKlyaFW3{+aynpraM{3WY)-$NG?`Z5h&)KnO z?3l`4(AW#l*@V>zOuXe}|9%&a7hj$oy z`SRsqY=i!D%?TggNd9W!lL^%HE8f zl>i?*F0%mN!Sp=#Wp%!T>3Qtl>U;;&^Vs9n`3|P%u@kKG9Zb(-6Rz`ZeD5}_wqbwj zGN9WAz425IDM_cTOuMzWN&K2{b3mV4@aCgV9|yVZ2BHv&FZb?Y?)OG5Xi0h&j?Z%9 zO)hbxkbnfNkS!+oT*7i!32;j(S5U(z(hO?t0QQ0!vj`_@-kuf&nZPW12w}#G8Z5Ll zx;-fdjD=3ezldS2iB|I^y1C!&J z*uL4C%n8g(05K>?CJhSwxj{pgB!CtZ3|)(y57`EQU~RM2-cinM=E zEI7(^KrD!N{$coc!;jDX@$}bc)c#See^iZ+Y4Ne=@yTcLNi{yL#iyUguRM!iQRA~( zeD>~?ZtC_yFDO-w4`}g$yHnrBI@Uxr*006-A7`JOR#U@TYFLd8*ANx%Gs!ZIqt5k} z>-SGTp;h)RjeTpG(vPq;L`3`a*7)ko%FM>k)Ye|DwYS>Z`*It?3<`$dB`oUd{xzer zgBm-y_W~yRE}@?|wf@WHu`hnE_ocMHq2)2H^_1R~+#Ckpl-}95nF27WCwewR04DUF z(^}8lfG+E&`n6N%0L?7VY{N7rS0?X=s)_S(Kfd|o>ch{!`rN9it;1UDaMir^(2?KF z{AxxGwQHgFYN)-|54xC)lF^jOaD_rq;S|VtW#D?RLedJ36Mt!jAS+gK*}R}!EAkSy z2&oH`H!v~Pj~%n=qb*gNpAwj0S1bPuNTuQ0_6I8$D;Jk8>Va@&qB5~G0S=|=!MEyR z^+>cbU722**2B$}smj#Slpc&!E>$iqUDBfsV$DY?mn)Z-E^m9IHL}SYS?1Ru8}6+k zzz*4=5Z!X;BU7T*3AjeKc{^-bzz@c22p$fxyI}5s*~RPaSnH}Gcx-f=4~N*&(CBb2 zU0@BsXT47>&cXj1b4JkqTSSm0Y@2%_M!8*rW>c|7K>k$Z#OyU8f7^^{Mw9hXmBM}T zeOc)4sQ!tz$NoQdIgT`Y+#oQ71F1_*(Sr&0#8V6BuJ4pTu zkQzl0gpMK=^V&wq>S4Ez+N$nbM;%r7y^Vfcb>F(X3avU5yW6HQv9-5VrdwmWD|C%U cWUxjK5une5WC!zhF#*k!!8^zHNt&AfH}3WNn*aa+ literal 0 HcmV?d00001 diff --git a/models/__pycache__/database.cpython-311.pyc b/models/__pycache__/database.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b34b4f790ec63df68330df4ab99e8e7ac92dd0d GIT binary patch literal 8660 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 Ii)`5c06qJoX8-^I literal 0 HcmV?d00001 diff --git a/models/__pycache__/db_utils.cpython-311.pyc b/models/__pycache__/db_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a11f286fc6d202bbe29c31ba20c536c7450753ce GIT binary patch literal 4359 zcmbVPU2GHC6~5yc+hcqD6C5@_Brs)RQ!msJO5 z?~L=~O(3fFAs{4pXuFYiks?*1w4j!^qG}&l)Jm&;=-S9C)~Jz?s(si#839rhsZ!6K ziGL<6+p5fBP1i4QPHIR zWF{HtyHr<(on#p*V^uEWo^)qClOC(jsoo4f$!C0%J_flEM(3@6qBe2h27}Noxa~G6 z$nFo(WDvCY8z8z>8$gpGnUTV9M`RCZw8&nd+hiVSRA$Ce%=b0bJr-k3?mfwvj=9WW znqbMmNt~Thve@JdJZFG7BIC3w5y?x!1mNI%0QU3Uh|1>mNOfAVLS zwQyzumf8UVyL}9c1qtVnxIyA^NI++`HpTIjy)u6TEZ>6LZXcuT{32u20uI6jM)uwI zJGB;FKD6LktrcYA#I zdKn!+IydW@V^5)3hC!zg13!DjsBb<(dl318`w+Y)J~@f3s2uI;<2T zJz@@%CM$*2p13%qLX^l149K`Ck~z&FIF-T>I~WH42$80ylsw=Lb$h>PyDsBwL6KBN ztmzYNGvd~)85okWsO55buu=EFrfjK7@ZVU>5oHGKPARbPbLW(_0t;2*F`vm!VS~`q zYPwS}oHf084yPdy#7%|1fw?r!(Y-J|sx~!+iRr_2kua7AGZ{QUh(=;=lTDwSGI^qD zMlw%S(^G>{h;G(oVV+KninMLC^-8&1Z$^W#=)H0(nKu+wkLTvi2%xVH>q*u&mF$K| z6aw^h0NN!~^&p?btn{tSeDcF0e-^Hr(VLUEciH^izPmG@ZpuH8e%ba#TXFP6@zndJ zp)=*7Gqz5ZMeg7;4+`yAIdtcAF_xCaQ?aY+4+hcsP3U!RX22sbp#N zY>rbGJ+&Xrnl}HK<-*_rkSdQN(W;O0MIi|5)iA6M zp8AjA1bpUgP3%UW?f70|JA0oG0Dpfwm+0``?_eq4#ZbQ6;&=N8I@$aC6S0Bq>|eLL zp_2v!^;S>Qe}^;m5i;rnaKir4oJ`NxQ>HUbE+V5T@fdu=fD>F->5+e~Ic=Ty)D#-r zA_HmMRRBL1U68n&{;Q_DHF4{1n89w&K&wq2HD)YqNe2va79)$S5pB}mlFlI^yBF9k zrHU6MyrT^8fyD2SfX-@D5^wy29FPTPIRFVN2=hbD^RN3M<+n9vEpT#Jj@)j!0Y%EK zdZ8jYb`k2kZH4_~G+h~aMNeZfpY4G>C1nc|O=KC(&;S_6N00Wa>1mvqj~^@eYOrFXsNStJSSyxDmL9#S|hXsB6Kl?o*_aj5fY>%L`j&E2#^h?m(Wm7C=nQ-wPjAz z)MO5TEvICsOu_0BoSsjsI3}3hTG1)k9^@nf7;g%PEq~s#dW5dkwMamIcUe;4}FS zmH8n%Z2Coh0D@QG*8dG;2?2ca;iZdfE#2joS4%DX%PsqtJ!|3UuZ~>0aOJ|o@ZJaE zy`^wZnO^a7_~0^EiMFlmD@FG%^ObPh)r*%emcn8=EK(r*ex+?kap!?j+kxdH6+Uz| za5-@8NQv(*^W8cH)Y*%&zh6E77|6kubBOufF!l2Ss59uAAd`I&UX!{;q!S zwNE$YpO1fe;)@f-<3BCFFO`N<<>8dAQ^eCnMK5E+?m|xR39zWB2*6nB+*#@9u6nts z|1kmrxD@p-d!PA{5M4U<1Ok8@XhQde-cP210Gc#?5IEm-K#e+{KolcJ6FMxQ+gsjF z$x+rjEy4L_3okp*w7~In?@LAR&b7{0ZVnbZ`%0aC z<<7q4@LHg=6zD1kx{6#EIS6z9-+0M@f+_vccF}?JSR+W^E6@DnlB^%!?5U{JdP(w-= zL_9FjIt8W=_WY<_=K;)Qr3}Cfp-^mt$(xk>E+vO3p^#vm3~MdFLzYL@;o0Edgr(_&G%n(_KY%vdzuxg}UfD HVy*W-t9l6z literal 0 HcmV?d00001 diff --git a/models/__pycache__/orm_models.cpython-311.pyc b/models/__pycache__/orm_models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a76012f03aa52e9473cfb7ef2c44e0ae8a8cb84c GIT binary patch literal 4503 zcmd57fM7H-?+_P_H(FpfhQLb8GU;6y_Lvm^uptXX~nGf9R+@2px)x(J4D+tb|{ zP1uVMbBI(uhy9bWlQXi~3McNb69)jRBr+u#+$Fa@Kh*^!a z?egcUdS6#nyT148_4lz@Sb*!>6W>4hCMXF1#zy^$?p5BDJ%aGHpbC&FY!IG#PODi#3P zPb!6imR(UEXY)CleuWFWJ>p^HR@Ssef=s-U*VgnL6PGL_n_FdMnSN<8e@4qI77JX@ zS#*^eES$+3G`pI+N!OWwS-GcCMs6(Kxjo`z;sQ)SRTk6vue?$lFKSQ?mXObx53+?< zxSu%bWyPc{@%b7x(IlJHlIsnViP+4luZDp9xU=4mBr}~=m!El9q+n!q#aNdg!8#)Q zjI8=NT5lkA1s}40`S&VshPa%m05TRN@24PO$p<1JTn^rrP4{h+r(W1f_|`5-qyZZ2 ztv3Z4QvI{g!Vy4p;&z~gA8F$Uf07?<e&=GHWg>mi`#btR`N zti#Bfg}iAgvSL}(R2c4jK&AJUHO*q76$K=fH?j(g*JoLx7EJWa%R(ky$-@}NI*Z>^ zRvyWPd|?e_L`_Ce2DeALSx}a9icV#jg=JaKt7{t8qcR9d(e^AcS+;OdwWbk+1skXX zBZYtgj`>W>U>&lon3P1EtfaWJ)5mYlL z@`jGshPCB2fVWVSy1>y7Vjytry7=AFd6o0u?63;U0||I0|<&H3p6nH%`E#uvpzec&Iwy zBwTJ8qYp_0wOCUHm(d{pM>y{7kxt_zHclaoAdDisL$t;i8paX0P(Q?4L!LMqm#1+W zYkU_bu!gJTfEDv^0L@w)d_OHFe^ZWC)aRet$r&d(<0fagFb-{w*<=QaLuPhP|90!M zYVfcY~fPX{U77JJ40 zSlyC-NbPYwu+NRPjLU`BBsP9#s38zrn8lXi*j%J0gi(ykQ3#8cZ1A?(syd?^{vQ^y zvO16yy}$x{#9t;i9Id9gvsjBDoWmK2nq9G4^)`iO1eB`z9YC|*PQ0JqQYXu&w?z0D z&%)bbCw0b6ohfEEGNm({H*InTibKxq#WtsZ((RvYgtbYVOgdz;dUT|`ur=fyop6s% z@X&d6^D~=FKyf%irRFfW>~|~f&%a{+(4vF(+@YbbmX!A=_0`I4&lwKnBrR(|EjH&n z2l9~?Zbut8ysz=j7H$`CyPGr~+21=uM2?Y2lC=QuwcB$WQ+%GL{KH7Jw zy@bW-OS^sPMy`^!N!lUlYVUBlzhXJP<8JSG@pl_%OM{y*@;DTSjMwH}a|Wi}f$8GS zQljjC(r=S#C=Qvf9vds`Ti2XpQ|_^;;*FA6GM_~DS5>RjTp9nSk)tdi%W8fFa>Rg^ zUtPs_9MM`Yz%M^5S=jtsQ);hH2El)qCyM-h<$J^TBZLNgW#*xe#T)meA?@QCW$nPm z)0hR}2HgR6&$xDI%!3hLBSkXp+wdB(_(Y92rNPB$OqKLlrM z3GbY-00YD33+6uocYPj@rz)Jch4VW?yvRR0!V$Z<>k?1j1Oc9?w{XK#hl O6wW@4v$vYKV*d+L`WsLH literal 0 HcmV?d00001 diff --git a/models/__pycache__/question.cpython-311.pyc b/models/__pycache__/question.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4fd0c8a07a5f97b0211783344c39fcd41a4faba GIT binary patch literal 10817 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 ZSpK|O87A9C>0WiL>K!YSZuO>8^S@xXR;d60 literal 0 HcmV?d00001 diff --git a/models/__pycache__/question_set.cpython-311.pyc b/models/__pycache__/question_set.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e36a78cdb70bcaec826f006e2b9d68af3231cf2 GIT binary patch literal 15871 zcmb_@Yit`=mS$D4_!OTasTcL2Oj#2BP~wLi+i{fGmhC99_iN+0@R+VIW_>ik8 zKR9GVSp*nOU~H>B?y)BAY&eU=%^+?-gGmDc1_Pv%nN5D|0#!xREabBnK{s7$ue#miH-?)#p)_uTKEd+OINmxF@q?zUfF`pFK8`VV}lUY3gI$xAdv z-Jv*&qm$Gu-kBtwVrH3?Y1TyJvnk1@%(Lc{W!93i&RSEpSzF3JYfm|59VDJkw#~MY z{LWby+}Wf%<(c)6ICIjQ^3D2)-;!)k`DgvaZ%qbL!Py}3+maor&e=}lw&+pPQ2)ia$e&0rB+@*z$o+bym>E8M z_Kh=ITlESRAc#mf@VUABGUIZeDX%`9_}nBsf7h$8)i{%u+h5b*K4jHTH_JILFnZ z`uXe7hD3UyA$}e*RkPZz#f3CPi_=kuW{btr@f076X^vPdmEo3>=y%2-Z#-FvvBqLt zW)6axMNYHh>p3Yv9?cVr#nb5wbPhTsLcA%F&I&f*hh`G9!l%>|WYix+&%_rOpMkRZ zr1(s=XV~en#T!BZQV`+;k9Y~la>H+f-7m5GH(Z{Z=OwlqoXmEs?Sb37B(@)%%=W9@ zy%LK~W_#6vZ4!%4X1A$BBNB^FW=B+a`|7@%35o3lCld-DVSBY|!x(ZwC|*y-U@|t2 zAs$8$N0TvtJ~Dn_I+=OPeN)rKw(>UK)G$ie%6PJKX5Pk8^_Y2vv%JSPO-KiC=Q=os zH*q$;%~(=BCzNEGw{Z6N%uTtSkh_y}KyC(dH?-o1OXIBbHm+?`X)Y)Y%Q8be%Q-i- z)eZ43Xrrg0Wp3Vk8Q&(kpq=f;J~YOHi1Hg_=gsw!pnslCH3pzYFXRcr`|!*&_0)AA zXKaD5u}0`gJM`4QsoV}IH^6r`atxlj>ZRtaFwZeJ%LO;(?&ho@0lMm<2}FR#Bsh)5 zIRtXf!}0TR5CpOL_*^z4+|caRnILKwfzK`pX~QtI0QXRwJsBgbTeh}pP}Jp`-}vf_ zwbessy-tm3#;F38r;1fU*_e>Z+Ut*5vhG$&fcomImT{;Tv7MVPW1U4{+~&)era*J_ zdsLpDq>SNn46MiSGp>0wHA6+HJ(S2^W3HRtp{~(1^$tbDkAs*fGd)*h5mbx<$q)Z0 zC|&MQ3&4P%K2x9@S(>NoOa*_9k&Cc?=ncDEV_9<(?=$xx?z39_FPNLpLL*EXWoQM) zlUDTBTVXHIP#Zk!7vyxzP{I&AeM$>ayfGRx_N+!<5wS_(urLg_KRS*iLBP*tQi~J0 zebu!P2HaRO18Z(PnH)Qk%*@4;;skiADI2^yp%AeL$TB7MAJSckUb}KPTYDtJ@lz9N zgaF8k5_SQJvcf3(v1tvVjIbX9G+JzIrEmbka-%=Cc_WZooCUH>l__h$-9VgFu;UMH zl&@Fq?7E#*yL;|-to0W6s-)?q*YE!Yv|8>zr1T#uTUlTGV+zPqBxRGKAkwF(P4Hr4 zZHcs)ji={$t!;tN!fGUnu!w0^{yIOml;wpsNF<;XgH;(=85cy&1e^sl0;{y1mc@0s zvCEpR`T}x+R{f4ZapM01vP^yF3MsB3*)^=Vh9A22K5*@oUHcW+{xW5^yT7oi{+>H8 z-g@zq1HT!QBZrj8A=!Ue@gIKZKlZ?XO!iMI{>g{_mmm0Fmi@0N{#RBe%S^4SPO7KB z?1IO~$j7IInPw=J6kR8ev8Ja;>S3*X-+%votKfQ=*bY6qceL}E!}OJdJ?6H4<)eX4 z*HKI?!HILVIR&XL@W=V^T)-k}<2VzxGqK+x6l7=?mS1Qi&4hAz?zRP)>{n6eGR z=Q0a*lFL|Lv4#t)@pw0;0l~>GPz7_|G)et*f5DPxTZ_J|yIw}#Via2iYu+jZ^X4K- zq)k`eYU~$H-5k%N#Hd_(CQs$f&C;e|gO)T1>uPF>%G;XDgOoU|H(kb_l5I>2k(+L7 zEpqb=N;{*-MTQb#hf<>=a(&Gr*VsG|e(e?E7o`Q9D#AV>jq^(vDZ`CZYYw&%Zu@-BAnDQQ&isF6tz;YV6VytlMU!`-!X&4q;;s1JO(% zD+C=l$Fxb}vt7ZLMNAn9DLeRGGOh16mhCI3v~Rl_=(sa=Yif;`14Bw+ND2&n|HwaBd~1E^%WabXgzP_|_)n}%s!spU zUw!}8HCA@^Db7C0*@q$1?@!ClUd7ofIeW`KsJ={9$z$|Atv%KwntVhsRWmijwNu`X z6_<#^?{|TtIIZtK^*G*ICc2%l>ZGIe3}cbkM!9TXU+$d5!?ro3qjq}3n* z@=e&Lz~))eZ6~N_Gwwlrlc(Rc=IJ~etBI{V^X^MTI58FBv{k)M=zQhcQaCjT%xYQ? zCM|?h-VAN1^#uCbfFJ8Qjhx#`xM06pix-Ufl!mQp(_9ozLLFrK>GKU|rEm%f${b+| z2(0z^w(IkeOhDl*hMh)o2FWxK5xdbe`<50#5yBg1pC0xi=Gd#xzAdMei%cn4$DhCT z{D(g)U6uU@6#oI35B^S=KCVvH+flYcqB2z_kJ0zE_E?W7+bC~9@(ifG;Z^pwUG;<{ z&xjiATxHbI2uxI8l#tcqYH#GDS3h|5H*M=Pa_=Ff_t5GIGN0*SRPE~d$o_%7xLxiV zRk}u{uF>z+!3Y%R-ZULU)drCkY~89BEhTf(kiDT7m|pAx-rXBGHevc*`%%1oHNhTd ztY4dHpa#5bfrJDjxc}VK5-|6lFfExp18XAIL7t7uR*x@&p>_%tFl{-agQIz_;%IX zdB=Ury_S`|LyC7u@(yhpY<4K4OjQYBcbo#%$9hC79~o>vl(d3Otw#@=es`EXI$`~a zrh#g~D;0gB7)ub&I zOou^R-!o5AtMpGd&I6n+SPIrgh?}=&p|t8{gp0y_BY4eQiw!BOIY1@Ba3*6uW8DA{ zx5~*j=PcN_Ol#hh*0E(;%cit#>7cPM&28jN1v~s5@Ndi8#J)V!dZKaGyoIynp!>g~ zIQxf9iZ_7Fzs=i)Z}JY|-}1IR%{8cpT2IF;ikZq~Y}4i1I(U^5LU}XP3aUZe0JLt| zX1JYxm!mmH63!Y5PCN_9JE2YXyd&Rszs;zZFSzn9;k7(lse}FTb!3Cp*28wG2JZ8= z1v+nszXSel3pD4v%Nl!Ea2s;gZ~@>7_X5MY?z@d+sz9fE{uCap(l>whXMGdBe_|_s z_oGIXCvSss<^9lX7^7eKyNfhLagavSPqVs^i3aub%^6& zizQ}nEb^M=YCH)7TN{A-pps+~j!njD?XL$4KgBK#APJNF5CwdTdW5$y>?cTikQ~KW zJ075rV-w9?J1`-~B>Hacx@NheuL~@0-tZ~QUx!n#D{$x`UgHJLaV1uHEjLKjn*Cb5 zauTCiv2-DGP4qxrRbW}U>$|&POyJ4rX?RJTm>X=|?6pktHk2rS3_}MrWlm~faK)x> z8(MLyf#8ZAlw&LI@A`(Nkt1^73rgP$W$HOQXvBd0&6$-Gs|Ox=y4Qw38InCCiU**h z-4%Y+*|T=wqr)E@E^?(~a_AW)^o-p3tkU`HDyw!6eAM$nPjRXw$lZID?!BuPH8hB6 zrQzqkXqQ7rl+ck?o7xxoX!e8IQrr3)a^FFv@8GIq)$tt``-{K2{a08_2s8F!%7InK z1_EHl)vbEF?s#r_r0}by6YEDmodS>UWbbLkds_0Ih7=o~V3`_lb+3(*8-Qmiw5xPZ z3GICtI`klP=wBjoXhK1E0`{EX)WEi4Tn>z^POE|N!@$Ucz(|Re1G|;LZi%=u%LF^1 z0b39YHTb*~KCBLns^MXE^jUS=uCm=c*zuSG@)XJH6tKN(uuOS_d)2PN;_H9!UbCxR zLl3)lKIqz6nv}ctC|!G`u04;o4Sl?8V`OJ>Ufs2~bWq)YWc{!@cCd6F3he7IQ$QY@ ztdSm2(M5XJtbg!QyPvr~rS^@jTczHEUuMfDW_QnH3dmC=Qdbll>;<|Wsg0tW%xPcQ5`s8}nyxZ7z*l)Ip{w%J2 zl`HQsrr?;rB(q02XQvG9!qbpV7jU!5AO&hL!TUuBY)Zcxp|acRnT9A~d%?5iTXPd0 zdGelLQ6DzJP&~HdyamtCJn2FGevQ6H=|_57mgghowQuG*fHNm)A%ZlQ4%gv5{9o82 z`O$Qz;3Y8JYaG)BUp89rOWp?{&qQFJ<$mBEY!5zzzkUJe3+6_TgI2Z)$%VN%pgJ&v z2*<%3CXvg5cPuwDrH65RLQl_M&7?D7I6dM89^ha+jE8e^9R}tcCz5;$AY>*S5za$> zOQ^;Qr-{u7Nk>4|*QF|s1W=UVGF8l%iH_9|JZ2ApUA18wYN1U_gY>8Q8Y{gdhOQgdl;m7;I)x5w07}fO4WzvuWgTcsggB zsyr_}Pbxwn3OoX~0wan3oYXUS>FZBP#}O^^Y5r=w3c|yL6+9y5puo=qCc9JzWVl8} zEduVbgbpN~NN`pQ-AE8kMuWmdxM?iDB+c;_VpY-uA&yDrkPx-xN%Tc9sTqu85{m?> zYL*#ZNbsV-W9%pr0h3q&YQph?W=isD0d+B&{lxV-o)}zdZA;liQXHF$&t2k$tC$C^ zXrk?ch<<`|v*>HlT4G}aaQ3=pgU;zoGV!6Af{v33IyURb*j7cx2zIMxLmJI%9RN*R zFpIE?s9l;cFFfk7*B7f=J>hmK3ti9k86aVs z&Vf7mTlwNixpSw|xpU=Zb!gYGPyhGR>!B|$%0ow$p`(&>aKj%WC4X|bbm?DAa^#2- zIYI)yeEFN{ucqb6bIRm7W8E`rr;72ve^m<1=&n`W-}(Eb{(Zkaryma+^I!b-Whrn` zcdhbncskdPJPhr85ZYNf`P*ZkPknLmAJ2S#Mh+cQ&`n7mbQP4Y24W?f6o~1rskq0; z27s?Vz><3&c=xE@?b66WOauqaKpwj+E<~EDcTn{Pp+wc&17Oh={Q24U&#t{9J4Y1f zh~ymE@BowATPQC zy7d3CD}2hueB*MQI%58&Gj!@X^Ec0#!LPYMqJlXHSOv}}z$O!*PVGXdOf;DvfaeaF z!z_Cm!5P=2%m(-jTFxYm#wx8(zBsl~kH(qrTZ|?#G}Q>4Tf^jLohdA~)|@!WFA6;F zvbpdz0gqgT@O(yqbuG0Bi^au6GLgM8=5SP{&6{F8e3;m-9=^~ZRdlOUUbsNkoFpGk zFJ(Y&qnlKcl_fD&D`Pr0G7W1qsB4gMSY0{+iwRbp9BIhH>kIeN3^1{wt}#7HY+lHu z2Y3-y>XuRmlNs+1y_y`Kx>qmZIwrNR}OqMRBaPR~ZDx zD?icAI_v6fw6Too%>i|Vx4B_aMp&s9XELE0hwiY{J}|iw?FiZKk$sNr)1Bh z;+d3ellsv-IqP7ir=vXrT2c#WJ|*-a!L?KvL;`z7O1OrEoc-Y@O>-g!NX(`9?4=AR zyo8Z>K1mi+0pA%p`Vep~)OAJz?hXWmwqzL=5c&y!jRdv9n)%`lP{#?#A7Z7Yw{RFA z$GJ(+n~X$m$Ham2B&Q z^|{ZxmC@(P^OqvI)k&=g%-BncaGT*Q2FNO;gfh0dA7|IBh;hs{@hZ@w+$5Ci1iq>brZS zY$kqKY#kn*No(8g?kbr|GwVa^;^$Gx^Soj|Qnu=;sK#5Z7CrD4hE#NxHakF*w8pN@ z6eDYI-*qegk+KOxEA^ols_X2&oh)0)gN<_ZmF>h!)oHDG5_C~7-Df^QmzdJN`_}bs z>u-J@mGK2&p!5>F8T2&LS`p0=`q;t|H3$FNh2s#fCy0yc=E-Q_4hFw0-(Wt=nRpA2 zrpV^jX0l+&%D%_WqEYe>rh{@EkQNM;;VX&%tW1WpLON%~Al}~~M5>Z5H(T}TTZ!hq z6qx=aco&yyl3Y(;{b=9tM>%s-tnKY=`al-(X`~se*fTuL28aRHmjd^N(1$$*G8O#Ro33xrx{G4;+w@ zWOtl}&ju2(4?K)g*|0*7ZQ2$97b`2En^;v|sh-)wnrJ5>mEGAqv|d0YqeXCcx9NZY z7r}aj@GDGCq&3QQSW^EE1J;mWA$ojm4<%Y4Oh*^`{>53{pWu;kuH{PJm;w&|DDiD5 zW0~5p9g~bswH=j=Zlia{+O*ueOX=Mu*}B!v@ahfJp|3c<^YlFQ?0VqYReDPrKl!aw z_PnWh-jr-_l5t=_ci3Vw)^U;kYfHljpaF-m5Lmg2m}=A2^#0*=8SS!vOxkAS%l9pK zKAva5CTVYhU9rs5AaB52v2KRhoZ|;hSJ}(hFLJ>Np!seSMun5#eR&g%I!o?_H^71y z-a$N^UCM$^W78yt!GHs@ay(@`sjCe-TXkLK-_pv1~8OAL+(lgI;4MD}b~Jlj{;GE;rM z8^OMZ!QltNVL3Re1V_tehztTqdIvsU21N?sI00G`QO2^5k zBk~CP?jS+Mm+&DHlv~Z9{BJP~i5dBUE8TMKr?Q;Ha&Q`G9$gcPk-OKRFXqwG{&jYJ z=8MSs+n>9Yo!CD!oIDzd&1Qa!F77X}06-(9x9_`^$a7$S3W3s*GrFe*4YK9eRP{RHL?T7~S8D1%d}LsBcJ z+Iv>znK6OFr+ zt#6O@xTpH9R)U^k+S*UUu-;78#!6$4G5l#g@)%8Z?~=N9%3ZsauH6z9)Eyc8{|~jU BL{k6& literal 0 HcmV?d00001 diff --git a/models/__pycache__/test_result.cpython-311.pyc b/models/__pycache__/test_result.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92515e187a1160957055ecc790348d4edbb8cfc9 GIT binary patch literal 12450 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 literal 0 HcmV?d00001 diff --git a/models/database.py b/models/database.py index 6332a93..e5c0513 100644 --- a/models/database.py +++ b/models/database.py @@ -123,5 +123,4 @@ def init_db(self) -> None: class Base(DeclarativeBase): """Base class per i modelli dichiarativi SQLAlchemy.""" - pass - + pass \ No newline at end of file diff --git a/models/question_set.py b/models/question_set.py index c0e34b1..ece7030 100644 --- a/models/question_set.py +++ b/models/question_set.py @@ -291,5 +291,4 @@ def gather_data(self) -> List[Dict[str, Any]]: # type: ignore[override] return data -question_set_importer = QuestionSetImporter() - +question_set_importer = QuestionSetImporter() \ No newline at end of file diff --git a/models/test_result.py b/models/test_result.py index 307943b..07972cb 100644 --- a/models/test_result.py +++ b/models/test_result.py @@ -193,5 +193,4 @@ def gather_data(self) -> pd.DataFrame: # type: ignore[override] return TestResult.load_all_df() -test_result_importer = TestResultImporter() - +test_result_importer = TestResultImporter() \ No newline at end of file diff --git a/utils/__pycache__/__init__.cpython-311.pyc b/utils/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..222148061fd55980441515170a9927c9fe9d5b1a GIT binary patch literal 131 zcmZ3^%ge<81dF#%$pF!hK?DpiLK&agfQ;!3DGb33nv8xc8H$*I{LdiCUt;=+1qJ%0 zC7C(J`tk9Zd6^~g@p=W7zc_4i^HWN5QtgUZfyzJz74rj$56p~=j2{?aL=iJk3;=g2 B8h8Kz literal 0 HcmV?d00001 diff --git a/utils/__pycache__/cache.cpython-311.pyc b/utils/__pycache__/cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63b5e07d53a669b7f123d8895a240561c6aef8d7 GIT binary patch literal 3760 zcmd^B&1)M+6rWj*Wl3XMkrgFPVtcLFZmYJ)Nt~EMjYGktBAs&!4qmT`+^eki0DM8CMnZArN}F$QV!)qJ|8k!eh6gD z43~%V!@g|DjFhAKsLzMZSefU!&kvg;<#;|$i9!sjM_xpqg7xR{wjMoZ4BZ$FdaH`g z@3W`SeIAHNJ~5y(a-ZdoyraGNfW72^y-~0?_Kx-v1NKq__KtwPqXW_;NYew-F_0e9 zLn|bkdV?`%sf?PUUMOnC>&6b1Va?J@Mf(cKBVX1H%Pv(b!1I7#F>IXj`PIu;g<<)f z*jJ!-&9LgG{RR^a>+ti^bos0fEBP`^4@Ph>#l{zPB*T zq_=;MtN~1Zr1z)|&<=xAAk_2rr_QG1jr*WxlX=G zg2^tOb=r%eAC!%;6|zGF29i~zk~<^mEen4#HT5<%r`2k6b-QF*bAD2DwL5QPi)P8P zi`8;%>27AtunV`^skL&8X0@o9))Fv*N*pX%lRz58;q$GwmHGbC=Gh0AH!gQX`=9~w zNTsC9VZB<`D!L{UqGZ*omaP>u+cqpsMvIzltW`xx+kv_it7g4iv9e5rVX};vRZTBw zrYV)0E~Cqutz8mY+1ODe)1f0yf>t{+F@`hZJ>H8cka5&m0@5I_eRm(<_S7@3dd^eN zfwL~3_xOBcd3W@pM_+}>K=dZ!NrY>4m&v*6JqAS5B^q`Fc!$+5%@@Ib;Cs9lDa$Fjgc2NE0%f5GA^6;*tEl@_xQNWCp|vtu*v@sjBDLcX~B3J@uJmAg_?ij z9SY)E$YKY?=N*o%8^mo<3&as0#NtDkBjYtu{kEhVqToY1VpQ~6wN$a?F#hqTaYqi7 ztGZ!IZX4yAAv8En4H<*;wP06o8Wk&megv%jCG-=0p@;>Tg{ZME0m1zn9esSqQ_s5U zJis4%E14gBp{71emhD=M*s1BJXio2$)O7%6)b?R5{gejdmiJS0)p^Q zy<+N1rn)TSv5dnqd;Fx!$2~sou<=3ocTOg(A)HKIr_mo>Usg!qX%yy29-O=deYJnd za;y?y4K7rc_zbksTPq0!JmqPRXIwt*aa^T;hima5Vg9k$?_44n4IIQRbFt6CX_wD> zeAZ#JEyN#}(bamTXjiMICGhx@9IqEeQ?o3?5_k!d;Tm3GEPv;g2_N)UF4*B)*OgSC z6t^;e&zH&e$U%(-E(kf+mcvyjNU6a5w~mG>5rkDcDOOFnRV+b+pEy{#E0 z3U8d)JnPW3OVb`rH`De19FPM)Q9P;8iLGnfU!%E+eiEZ}X7k!Z7zC!DL@0f~ NWgZwDJe2r2{T-NZ5IX<> literal 0 HcmV?d00001 diff --git a/utils/__pycache__/data_format_utils.cpython-311.pyc b/utils/__pycache__/data_format_utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb940506c89877bb019244f61594a8b5913c9ce4 GIT binary patch literal 3346 zcmai0&2JmW6`%d&heSCRWy!Q;YAMH&+1OO03h^Pb09T9!qk#<6%0);(Znz_5mE|ry zyOb@L0$d;mHc$~a4Inm95GHVK7Vg0adg!I6`~#%0h=>IY2ncfMZ4I{)+6&{QIW6a~A_XOA2SVsx<_pyM3eJfmFpI3yB`PGmj{yd5j zz#N<{ynI$4o~Q%?FRU;(Q8M&zYRz(zcetzimcysjoaONEsHWuzE5(9_oxxj0Y+9MHI??MN!GySZxmm-#IX`-}6IVS2==r_!@9>YdSw;L9m6+;)51>8p>RHsdw+nlB!8**^;jjIgcd;YZ^!+FY5}H3YbWmEN!Z0 zv88+$;sK|^VF}ujOk~|s%^a3;A7ZMPGc-fjWhtA@$rfHWh$?5Z5;h^KWC=^ADoaGg z`GN|=oS}o>^2}AxxK)JH3=b5}%>gP-Nx!AhXB9nspNV?cbj!FX72&+RTqww3`nsk{ z*VBFFbd1E%*QT+C^_(FYL{W9wGTJCzosKr8+e6k(73GrRLHgpx>TP&0&HF*yUDZ>DIenmMCDAZFI+ z2evZaOscT;B0R4EJLQagVd3tj_F|8mU?Q`r;@hct&B)1`xsd9qQwlH(AnqX-i8EqP zJPV^pw0yN}{x^g|gXP6fmp)m#pRP~>|VHq{urWRG2H z#wNZR`(ms*Uc-&poE@8U1uhYG5fz*d{yCh9l7o%_(Qa)yY(a5C-6V7PoKe^!L!jb_ zYpSN{vLl)Xv9RLs8l_-SHmxm4KFTJJSkzT;*9oc?CiLQxJfYO^u7sPi>iHE zfY@$U_g?}e^pWbPB0t(T4++_=ZXE>r{(mSX{-;k?7=`uYAFKIO>3+mk2JKiSmZpF4 z8eEf)r-3ysOQt;hav{lPy$c7vFPfC^f&M#LOanHXZP%3>>pHNrhVxi&)37YjtbpRt zE(xvjVX0Wh0HP|{>_vFDDVbIr7+2-V5(>VzR}77Z|ima8tL2iPuNDd{FXuHza7{I2FzCC}!IP&}!beWufj)$)fz z%dNuFV$759f%|xr^Z2!oOa&*bnyL>GCJb zKb|>TQT~$LOExFZeRb!HJGIc0*~a9X_T-z*#Q8_3zd2od{YkNrxMC-+xB>p;u!}%E z53sV7`?ab<#cku5epDjvPs6lUPlB1RrPg3)0xmrBGhdnQZYdV6$O1@bEx(#mUo55nabhH0W`z4L3LWc}xUt~kM5Xbz8je$nNi zcPNC*vpe&ZkxH&QSL13oYrzK#_4pfhZ1zd|pV5C@uMb?Yg#}jtT^ISq!YC7M4v*e9 zE9q*qnya4PTdt4&!XAFz7j?799sV~N(t2L$ ze!2Q`<9CaYzi={c&TwEHw_)&tFcJ`EFf%byGcXMtTZxt0ft@;mqvv+wrlp{idV!ag zgK}C4Dh4sh3SrJJVJ^4#;fw=#hb^cwcijl)Sm^<2c)d@*<7p?MiuVv%v5#Xh4d_Vcd47AL&R-Y^U6o13?adAgb_Nh6hVwINu; z26eVon0M|L&ch5=7S39n(IgrLqd%k2jN_XyeL*-041jGiBe1y5D$L%s_rY>7*%LV2 zWmV?Ar7y8EfSN1jZ~uq@#?X3S-b!c==rlx%5h_JB))>I^lxK=cej4}~aN$a>x-ye4 zL=YL1FbKghL~k6U1&U?B>1OZxeHuk#J&CzLN?jzRgfnpFk8&${v-KOM(aw3YmZK;C zdX8qa`>+vL~j zmE#>`wph)V*v~}fGrlP@0qRXj^GL><9E$t23*dzh#1u?SdAUa=1tpjH#PKJS zHc?H*uG5ob>eJYXGE4z?V-?M&`|+MX_CP1SyU(97sJ$iC9lCU{GH@Kff!hZVH}bheRAW7 vTHBXX_(u6{@s`~TMm?l}Vz@V0pV;0BH25X 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 literal 0 HcmV?d00001 diff --git a/utils/__pycache__/import_template.cpython-311.pyc b/utils/__pycache__/import_template.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e4e1d5b0f1a12361bcd9d695445e6e852cb7d70 GIT binary patch literal 3515 zcmb7GO>7%Q6rTO@+Uq)L2o0s7fo&TaIe_~E;wPdAQZ-dY2+$NHj9@d}9lMLxyYB36 z+FB`!pofYJh)a9mkW(wv3kQ%mR&e2%AWK9mRjLFWxVZ|4(i88^+G{&$`B~e~vu|eJ z-@Ny|xjrzEC-8i=_xhQ?a)kVfFP$fo45W=qFt|c&QYN-!%dS+D%d&)H#Z}4*{Hv~7 z%ak)Ut*i-t#?97p$QA2FAP9JeG5Nl=fTZ^c<_X9 zspD+p_oFTiz+d4sMU%sj3h%*pm(`dTQqH!7q8);K-hgM88G#>$zJ;P7K5WtVe4}sw z!a|+$fSDM$g$08dz+gOZg3yGRQedGb&V;llo4pF1TXF;-FWz3hoM--lE9Al5hwBkpkx0&2-=R0)Ah zC2$zh#n}tzkQ#k-G$WY%Belb`3P#NVQ00iL9hq*ehvC>d)Sb z@_*2-F3IKzd@*v1*{s~FKr_)Dc&S=F?-)m zvJL9gw|%4Hb8l0w1tBCB<#v*EeUQM6$w|-mFy)ifMS%?J2}&mL7dZ_q?m%TsP6BGU zZeN|0x+a`R^E%a4=OEG+DUX$dX$`ema{!;F5K^Xk3(7!mozNG#jwYZoQN>tc%xh4v zu#H|8nA?%iTY)|1yhTA13t=`D_)PkwEUc(0qg_!c7q!p8j6tC|p@;!2t;jK4R;^-C z5+h2+99XgFFhEu7j1vWZkM@(IG`FZuH9!HUW7G!0TcoZJ!a3qZh=D-0|Kj9H>I7`F zmQ?V&)Q#9NM39t)y5`{o9b=Jkr{Y-DfMgOV1HB>Q)Pu9>Zy6Mm(DpPb3b};we=>+w z500^sd%4DHKELov;}JMmkx7=1*bXhrpMrIbgGoLjRuLC^yF{!yUd4~~W9Kba$95a*EFI>% zK`LfqHDGRqoA7Ky|DwdUOy0pjvE|EYTN8Io>KinJk;h@ zxL*_9tMNny&hz@=OvP@df4eH0GTZQ4zXFr==A3FHm#P{PjwV(29hv%Dz z=kF-;z~G+*NJ|inJTiL4{L)-GwKg)@9GSd4)84td>(DpPuN9`6g{jrT)cVM-Uq<%- zJhFdfac!j394RI1UjOX%^`YroLp!gkS1T(YtqmP&4jsCaQBVbtmLNH@WAySHcW-Tf z6jXv~y%d!FQrP`-VfX6Tt2g(p6=s@+nbpF~tzlriyf%EKIeg^iv%t6uPb-7FVGukD zj(##dIz2{y7|S2ssr)eU)X`z($Kec&`#LN3PSIJh=fa&&g6oLfczPCrL8Lw44S*hI zy^DzluoYn;JCOgF(2)6aU&9u@3-*hX4X~ve1|LHPM!m6X)6sMj=?F}3=s@65G@=h& zRyW{<@KGTD!OSCXB~aM`FassyUC?7LU`6nfx z`%K>fjK*V|P4B_xX;{GbAlVCKuBZz4Id)h+fCNJdT$C)vJzPD`nI__ZX~ucetoe52 z;<#X%XCvyiXR@Yg`<7{Py#MgWkzj?0sB*MVcp%g#;l{f?M}kHKp8{Dh#3&I~{{wh6A-ap}W^oBNmfbXQ^@T2&n46Yz%~ zS0cFSfyW%LTyYjL2byWD(9;%Ifh8P`weUh6*h%#8av~xT>wrnK0;TvkGKY|$f*2wO zJr=|o$ij0Gfw>20D?6g1tdo7K_xrAs zJ*yA?-quGi?`-O$S6^Jy$D8{2vewdGk|3H}$rtl?ko#wM>byjt;`6(gv-lB?{0+^$ BldS*% literal 0 HcmV?d00001 diff --git a/utils/__pycache__/openai_client.cpython-311.pyc b/utils/__pycache__/openai_client.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7d82704a72fcab3b23d60f25e6fd47a27ab3071 GIT binary patch literal 5499 zcmcgw?Qh%089$ODCE0qhEi18Qxuzp$wwgpv>bObTG>&6COIlmWmSkN8bP7Y#iV|7W zj+EmFa$yt!>J|l-0vlp<9qJWXUeFH9J{0JO4QSRsU{oNW8UX{wh63$38cByBpY|N} z?i%gTp*v9z@8!88pS$1ld+vDK?QTJk-rI5e;=kPp{fiW;$!dYZ!+(OffzBZb#gIfv zbc%{maA#8V91~;aY%v=}>TM}@j*D>=qLEBpvR8+Z9k(ciK7@Zc#helwYmr-Jm&6^0 zD#;#mTO|i6(dfrWa$ZAHi|o0@KtK4GQ_L&*q*l3Aa>1X@!T6F}=4Ls`bB&F)Igt}d zost*Y+G_1YyQ*oETf3`6p;?F24!znFNb2~2igifz85H*CM$T!;R8qUjXJpJL)0&Kh zL=wxqsHFLn%#WWw$xCvQ&tPRfDS^uL^i1R{GH5hR8_an6s$rW>s#=&bxKkN9J$^FB zB{JHc{fgn9oH{;!Zu)F|=G5fWbguiNre)OUhKGerGNOR0kc^1R-0=K9qphkr6`eeN z>SXk+SbJ;8RA=#F2NZ4~8No`R7%fpT#(?;lo-5cI3flE?b(I z&QoblbJQBqBCWO7OL>&1KeF8ddp@k$bOwcx=Bn!qAUw9nG}%=1xw;nE#O9gbqTg+L z_h!qq_Ii&z(`;pPDbKu4OWY#!8gqrZf)hq6S`G7odf*WMvvrt6SYF^IR+X4|*mK)-KG!FQ7;+-E1LcQ6Rx}B~|93_1os5 zsSQR5yK+DIX%j^WJOnt1hrkgK(qssCkX18EI(Y$h13b7FiI!?MRS*0MDW(Ri2#Oe< z(=t|-w2(^Xa=>la4{w+Y4^34dMm7`;&3qa*6lz8mle0+?)WbQ}+9%}Pt5 zf`Umr%=Hdch^8K;D;x&b^Q%g&>pp&Jy1-sUB6th-e7E^W|B z$zW5;6&c@U3_7ycu)!{I&R{L%sKjWVU$VIOiSuwmPRk1!d?YtUXjqsRk}2T=Y?;c+ z@mU4OYY;k|QbZx89*G<#XoSsR2C~%wPQtkA6o|)PqAwAUHlq8sS)w$0XvMb5-gMmd zeBdeYdyD*Dy=yO!aizVkSkQJXL(7%<b$$RsQ*Zz3)XfvOqaQ>I1N(~u`}N>{lc}m$dYgnbXJOW` zi5CUUa3s?Zkh7v@FyOJUJxB>zNj7W=tXzIV?fHtp9k$Di07n8QC8u#1Dj?2h;B*0- zh}}@a5fCa-W3 zdPD@|f+QE*X4+wpuRW+cxM@1dQ#o|bWMR@a$h|4pcxA6XJ z@4j|NEc887?0crrGg9msxhFj6IiU9(F#X6M`1J|169o@K5iV<{n~+E%pG9bAAyXr? zf$v9X_j-XuYD5SmvJ*&zZhGDiNFqNx@?!)8%~TNrCg)+lUu+ZnymJ%METsc z7sd?J_<6WlNXAFVLmIG)$DrbSg7#%HmH@&6E$0VbtBUnt|61RUt=_9N{xX0z1b_np zP_=SA$?*Zx4*g4Az3(|praF=}re#d7yBbfiEM_4tE7hnU4m&aVM1Tq2tZj06d(M^V z+OQE~HtgV;f~H}EQx&Yq5)OcN*p7M9shoV8C{RhvhD|$3<&As)cM8Fe{}iy^6|%OURWCnS{r4lbL8V!b>D>Us$3>RRLCaX z*5^D*l|td0FMJ*veGnQggbox#2bNE*1^QQq?>+m;SRwFIG4Rsz@wM=y?@YT zp|C*+?GX_hjQ45JBLrgkl*yyckcph`j

_CS6_c^_{y+777~#OOJ@yU>qUn4&u5O zrfTq6-S^`4vFl@ho%v);cfAP4bP+R-TE()6rpC{YwCyv7aU--y#1fPZ?VNG=mB+LRumCzyG zy4I0r$@-O0P~YlWN8Nh!weAcoZ!bCnD+deCfueI@iCg#gF1eRg9reOhK)t1|5goN% z59tW*BLy^KaugLMi?gL%32#^}j~d$@9TXfaL9D3O?T&bF^6n)o`{{A(wpm0FKTrxh zW!j&odQ1eOvkmA-($PUAOtRWl zXIG{cHmt#i6j}(S;2d)3$)Ti&^p<0frSu>dL&ZSAPzvo$!RaNZzS)&zD@|u--n^MN z^Jd4$!Xp`Ch1(+>_5tb~J4|^#u!C1EBQY0Ud#9YKu zN@`vWc*W96(R?)ERV!AC=i{YBJ|Q6)5p=7obpYw!mJoUfEiCyYNK>s5mX>9#kscf+ zy(ChF+h8f6F_36DzNzN>a0(|jmHZJIeTZ<^Cc@oB-Hw1xXic4I93yGal!SHtSh|if zJ%0;PHY0Im-t=xlA75B46Ffx=9t=`bre`jhE}6EA)Fv63C#R;bOx~DXFy?Yo)3dy{ zHJr{)&F5ya3tY9x3bA<1a*D<>wFuW3@hZ$N$jw`b4%~~xwf6Hsw$Pfi(c`sEM=eTCRX$98nLz^La@-Lwlg ziSAZ(&$M78SU(=<%2qR@r%bot(GtnH`Wb!nRNy7sY>!LCbH5 z_r2PPDysGr0eL1!qm%4|B2*BhRYc%|(9Z+2g${@PRvQA_AbZ%_fxc@8yFCR==bC1~ zyNufr3< z3!>~_0kQ?zK;)6Ud;_4Hj}V2ZSiS_3fQz&_CEzrWssR@TP7@rC0^notK*_RMvAhr$ z)rmI#1DgfNakxM)!%KiSQLq5!o}Mccdva!+N6j)dZj)6WBQ`EO)b_Yqa=>}K%OfS& zW5R1DJW(>gFg)irvE3}38Z!)mQN!Q~!+_-#OYq%>@p;9xnv$qtV5eXhOr$m5V;H7w zJD%x5EL>QuE?bW2@d%vA24TfP0N9Wi3UU&fE8OKD`s&JsnsQ+;+3U~xvm3MZRG&ZR z&uz@ryHfr&|Jug2dfz}z5p_oysQ0G*oS)l(=I6pAgyN3CXfPpyv%drcAPTfq4j}q+ zP+|$o+W^;xZOD2;TeEoLWj70sU%co{La%55o|Q^VuY7sXJFx5(A;-`_~;)E^$&b|aqIFomun~Ae)RrM`rK~% z+>`#1Cw(XCgG2R!p+=Y14S69XsunmsBQx={&1PODPU?=~GKG6$e*QX>R%XoxV0$HBPSAmcMV&?xd8VO*KXUdgdHVJd)P zkoJQ290E-k_<|>%$1a7SzRcbQsmN3AFwjOslB7CH`N3C5aX(9v3Ft)pYL&bo(A z*E(w*y;pl#-HQ+18QhHz-8;V%AK8tM_*z3l`q=%opU*Z>QUcckxt9*QNABZ=AFDr2 y?VP(BjB5*@9IQFS>9TaHfjUVdD)l$ef63jMr(*Wmfv7(Q2Y%K-(ETq7!u&4=TuJr- literal 0 HcmV?d00001 diff --git a/views/__pycache__/__init__.cpython-311.pyc b/views/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0004b71527028abb290ed5f2aff5c2b87dc9c5a2 GIT binary patch literal 1200 zcmZ`&-D?v;5TCufUUJRFXslX4kh550UQ*w*P)kL95VQ!QXkN}WyE#uTcVX{RX=ove zU@D4z5d$jp#V`Cb{09=qLpTrwpL`4SMSOBLX-W%rZgys8XZH3tGrOPD>2W}MKlS$8Y5D-CYwG^-okBQPy|Mp;*lajt$IpDEvgl*s1Z^0KVZEQZeB| zG08PXRah3U_2`oQC{cEv44ak@$!ZVT>Um{^WApH_Hj8vt(7aLAN4&!KpZ2{97kY(z}i zX_d7mlrhC;<|u%t4i@E6W85geaNTcRc z3!%9_EyNl|m114+s3!bf;3TkvI5uCRcthU8+AcUtAZ8d@Q{DknKB%iC!d{JNW5;~7 z2CzbQcYr{Y*xUP*tiaCn*A&^66~M&R#d_-cCMH`NJD1{xqPM%DlPQPFcvk$%PHp zo?IAm^V$zH`+D)kVr#ZzPIt}ewmJPHd!lu(lg)Lrxwe_>ot%1=UT2-;@m}U&Gqs67 zggg-vXd|r)^#GBOcRMy59$g<6KWW?Y{@b=lp=a0_72idi zv2E)6K|~|GtRea($geOsW{||+za)ak`=RbvSdjk#0uoms^wTH@carHsp{ykn8Iya;T;D0o9&j G0P!D4(`!I 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 literal 0 HcmV?d00001 diff --git a/views/__pycache__/esecuzione_test.cpython-311.pyc b/views/__pycache__/esecuzione_test.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b369f3593d9e2cd57033012499274e6e68526c1 GIT binary patch literal 8789 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 literal 0 HcmV?d00001 diff --git a/views/__pycache__/gestione_set.cpython-311.pyc b/views/__pycache__/gestione_set.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..604e95dcb4c71164f0d3f9f7911a872fa1c75474 GIT binary patch literal 16904 zcmcJ0ZEPD?l3+JKL`othN}?o6qNElj+oVKOpSCPn*0=09PGo1~kBJ-))n>Qpb|_MA zQclbz?|eWO;|#ojvztYX+Zd<4%Vd>_cSkeG;Bvq&U|?ne1G@_}jXs!YKo}1W24?oh zfxi6cXoRf0lypPH?RKW2toWWET}(Y zKJ(k3Lgo{KAs8}3EGutv*#Koj#JFl&Hm#bM&8rp56(qJ9BbHU`vQ^HTB9*IE%T=q@ z%hht(9I>t1m+f-CB2u$jyIi~KSaz(|E!VBqFV~ZVfnbSi4JrYw^K+6QzJx#Jx7-Nr zR>q>QWvm|%p98>`Dj2cc#E?sbuktrov*Ir34J-Gf6F>So8|VuLc=5!YacD8IF#`!cqgbx)$RTNJlV4MLicN0enXXoLL=lDGErHm(67Pg(DzHN|6X{n znbrP3=y|1)4IJ_Njj#vh#y_&ZX?On*d#+Wev*BAA^M^e_t(++0-!+R0rRNw)00yht z##6dJ8lM41)>wqo>j7vLj;Ub)$m%_?+0=S~K?#w6WwB`(0J27fd;x8>Doj~y8V11T zP$6G{txkn0i%r7-*y>ft7hu!uN?B|g2EgXr16wiQK%bOfS!^1H#6cCVRM*l(ieM^Q zwC3{iA8b|u0NV0WXqO7jSj*$PLGV8<-*QdsdrccA{^`qLnMw_q*l1NpFMjK#JWVD> z3$1%#cdHN^?P{+0t;eY6|2%QYl{TadDe?x%*S`#Z%5aRh(~=^g*MYR*WzgkqNy@;O zOKs5|Z{k>iVy23zW^51apMw?nQnLhL6SX`+Tb zQhPHFeNPgltgg^AZPJa}rS+>%nPB9G2hPt;KqdSszqGknf>UNa_H;$6qF9F07AQ9s zjb=?*%5$|yt}O+5vk|d6rYU8)=26GLLBy;~v%V%>nX(r8@Czw3e^588ZnZb#Vp=wO z)Kc-gbS8g8Fs=8E`q`1hT~qWw?t!_j3@n$jZtN=_Ma}Cab{_CvT6za|$8=S?nsKM9 zi?!%)i2H`LEoCduw`-bifP6a{^UI)8wh16YH;4TyRZKgK+)-F99QkGVHV&x0i{B|* zsSZ5o)a%49iPct^p_s0)LC;N@H}-T*%D$_gR~?t}=&5JAck?mv9Tl1&QnoAPgPza9 zkZI?}Z|&h)C#%sxFmpheZ?XU^;omv|y+N8*Bt2S#-y4i`##p2Q7dBJI#qy$ApO zDh^onR&Eb3?V1Lq$B7cKC;bO@(O;LU--8F0dT!}U>4rV~ zH8I{)18ANPG!L|);4h|~d-iE&dP`s%Q%=CqmuiI6f8UgD(yeJgr9aig9ApA|&OncT zq~N~krION|YJS<;=y4bHD%F51aAz~>)KONjQUiL9mDu)zR1TKH=||jyzJ8ShC_CZ3 zWJiP2o)YS?j{C_xamE^`^LA4_ehd>8+;$I$2GflhGBJ1%s6wj3@13X9j#%p z45Vxy_UPB{!GykCqLGD>jxm#ZT*z}~>cOa^ME}&0ru>*2PaETBkn!z$?JMaDbd(b zP4Z6Z;nJO{PX1=9jSnTRt1w_6+L$+B*KwEH@Dll=67fPGy^mjh9fR5#n|U)up{;<3 zjTYr#4nj$bYRDzcPV0ERX9TH)J6gPgS=7(^|F7KuD{%VvvI1vHsnX4IT;(nE)(hc| zYH;6SmYB0)19R@ddA@}g9Ov0scYLjW1##ZtrdbtRx13|(bI?_Q3*&&DNJlzlI96T-w1Hk4qQ zpb8V0?ATq66~~WDHmxbhT#>4I`aLh5td4awEmi)Db_tERlGu{hRp@|3=9Yljk0nEDU>vUXLUs z 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 literal 0 HcmV?d00001 diff --git a/views/__pycache__/session_state.cpython-311.pyc b/views/__pycache__/session_state.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9824153084342b707af8723a2ec991f287f6c96c GIT binary patch literal 1688 zcmZ`(&ube;6n?Y%wJTLFtr91s#9kU#MJ<&~-9sCUG1QQjwx$r;gNTv0+KDpuYFC*V zxv`Lo4>`EdLn##Hkb~*LN%5tBic|y*1BO5^?M+~M$tiC}Ue#)vw=?g}4sYJRdEfW; zQ9hpql!tFVy0e`C_*1{ck~~|SR&mh-AAAx(b!rQ(A$eMA6` zagL>$@e|bclRmkf^i%hfRmacxX|!3N+=P<-w{}}E5%pSw${GuqWL{7c(vwu#KE3U= z11VIRQ`zQWeG(QA=}%(XaN0rDgDxDReNm2Z>v*!g1{-hPvHXF$6}U9t3x5g+v&G?TaRel_Xw>)F zgT%pCCw6vdU;e|s_Pc%U@Z-l92XSNdj*60z?ohJw0QvFJn%_TS;62Mwg>FJuqo zIez%oedNR%OyfUIPChTsp*`)nN92Um09`VDl7OGMX=W+e`RLOS5%L1oLD2sXWCI(U z;DwNliCr$)%DIbmmWZ!V`FL4FRD{YPj|}@WUW@7KDw~FWD`KHksb+-iQaQx6MY)H~ zK~=Wt-K)uH8{wF06n(`doTu-j`V5F^mW|iDAd<#{yEoaF`$>AeAZW^#;il}CgB`0PVJyNcuS(!tWt-ymQ5x#D=|yymZ>`+6y%5?;8=_3aGnFtI$RciW6pf6PVA zlJhyL%P&ie&!KBUyKkUE+9sWg=@GdfjevpNDRHFr{2 z7!-=bLh-;pu?s(bGO(`>?W_HGj8f=h98LCEP))A&Qch)psL^0yLpefn>NNu*kj2R_)(Cb8+S1U-NSeK)JGOwGjUywVF!nkhqidSzVginEU+-=G$Yq z>}6z7JD@B4ZA?T%FLWG8z5a&T$rTzT-}z*!hN3;XF& aIztv8EQ|on;RnY2S6!GPScjJ=lizdcO0Dz& literal 0 HcmV?d00001 diff --git a/views/__pycache__/set_helpers.cpython-311.pyc b/views/__pycache__/set_helpers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3a1780f739e44ebe3456ecbd322875ba32e6b95b GIT binary patch literal 9389 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 literal 0 HcmV?d00001 diff --git a/views/__pycache__/state_models.cpython-311.pyc b/views/__pycache__/state_models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1cd9be5094028552e7a2ba46d8ab7765e1ba04f6 GIT binary patch literal 2785 zcmd^Bzi-<{6h2XB$+CXg{aiWFnSdsMbDW#? zxg_Tj+?$h9oJ;y#nsX`crKJq#GCnuYxq0p_NDG`>^tnaOEpaa^EpaaAb6L*a<6a&X zzU-wgnEjPfXBW0&v&&D>7~+$vXtQR^FcqB{VvCugrid-2-q00MZHRSd*$qQyqRJYg z#cUi?ji#cjZ0E#Vu#{&^hGE%i*J{kNF4y25qEfFn3{%JSHA5GD&e-${lksvBCP7JF zCS;gt8s_EJXK3KIZ79rUqP7(zZ89D5s!YRjcD(%f#4zC!L@;~2xK%8UX^kcVQkxP%>5^>;1fIV>O!CNBE{0OjTEza7X31y^hlgBf6 zH$FT}b9{8DY2_-MbIWQxZNQBJIRlLY!5!XK+3}V}@nMckpiF)(8$m6BlueeBAD<8= zN-C-vDs?Hyf|a!ODY?ns2@W%40@WCnV$Q>3=HjMSVg#xP(gTr@DO1O;XQ%mJ?q6a1D*xF?j^%lBW9WSLgXdt%zg|k{FeADc`*zHhpR14pV-*j*}dT(#V6*6 zz~Y;o^((-2G!lvQNv6X;1G4Fiw|=7d8Ie=X?TNU XeWbn-R*@fIp&LAdX z#u>;+8!Ox}2)Tuxwi%0NFOeCW=72>yLq85and%hTee+{_>y?tDwrR~s$F0|W?zw_Fk(zeioSt?9=KIW9 z4kdWGLT_e)WlJPB}*=re^`!Rn5tGd-$nL(&E zP5Ss?#I(^(#!qR>cKk}wK|7Y(N2yckxaNnmuF|Gp5v&0<2hQF|e&n;L;ziNkie^f3 zi=3T{;$rtpT$t1^M`LU9P&zt&(@3^8g2%Z_BZiBv z3@gsDDB@m2xRN{GJjl4)U5oM?*MT!hJy3oYRi?_8Q0h;tYIP2htJNf5hrb0f$+PqD zu_&?OVzesRd6}4zOsoZ0oTcHpASs-4MZkkv*-R|#u3Cr3Bm-*Xh1h%`Bc)=;dGz!l z`0*jV>2!0|^yl@D63Y)E96Vw>Xa~`wPXNp0p+%n9`OQ0De0=%iwbJgj(t(xQYU!n) z2UkmPEx)r~D1CPE(~GNx(Y3;8i)3@mSRWbxePrKnBl}iI_OFfX|9s$%RlGdV+ z?BVMTWgS-L5+_g+#&^$(kYXxfkXm1I*B6KtmS2{Xs1jt#EMbho0 zEuECyH1#2?Nw*TerXy&Q@0z~ZKJY1BCiKF_f3d}7OS|1Zf9~n+unmh#l zE^R!%g}O&!;K`>935gGc2-TL3I|`GQDheZJ*K~t&0l)2W#(<`?(=(EIXqiLz3e;KeQD*% z8^%eaX`gP|udW;bbng#Nw+d}0&Dk0zyPj)pvvc{s3E+W(RzGN0^E&Ah3sQU3esl_h zD`d$KIqet5H4|Q7UNC!$#hFgwP#*Iw3V=?`*~cd40=&eE%ROG=z>=XKsBl0A#oz%j${j}=5SYp4iX-Uka|)!hl5DuF)a&e55JQV#?#!)XA3A395spu9eImpwNR_7xvXqE+wENH;q`gKY?iT#NY1>FRyV@PeMoj&*A`-|w2 z%CD#}!z4GfDS?(vp%N?(KvU&XQm9sG=%FMQ{1B-;s3msPK5%KDNeZgw`Fu95p>~bQ z6QE>5mD9k*uTf4FFB56}s|=oGAVdeWb{nCVwQ22-tjUFtHhgweRPa>=O!Nn!l`#yX zWoC>ld<0M=MrnCiUF&3|*}m7wXtV#mYma^Y)S5kZ_2pH2_nN(XIp50K1~U-YT^u!y zQj2uJ8Z_XEfU8IJR($yo9|!a CrT1O{ literal 0 HcmV?d00001 diff --git a/views/__pycache__/visualizza_risultati.cpython-311.pyc b/views/__pycache__/visualizza_risultati.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a65a8279bee96b80d16d23ec569289059efc8bf6 GIT binary patch literal 20523 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 Date: Fri, 22 Aug 2025 16:41:44 +0200 Subject: [PATCH 06/11] rimossi altri blanks per test flake8 --- views/api_configurazione.py | 2 +- views/visualizza_risultati.py | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/views/api_configurazione.py b/views/api_configurazione.py index 8ebb92f..d98374e 100644 --- a/views/api_configurazione.py +++ b/views/api_configurazione.py @@ -287,4 +287,4 @@ def render(): if __name__ == "__main__": render() else: - render() + render() \ No newline at end of file diff --git a/views/visualizza_risultati.py b/views/visualizza_risultati.py index 225007d..6ecec90 100644 --- a/views/visualizza_risultati.py +++ b/views/visualizza_risultati.py @@ -358,8 +358,6 @@ def import_results_callback(): st.markdown(f"**Risposta Attesa:** {expected_answer}") st.markdown(f"**Risposta Generata/Effettiva:** {actual_answer}") st.divider() - - evaluation = q_data.get( 'evaluation', {} ) # Assicurati che evaluation sia sempre un dizionario @@ -388,8 +386,7 @@ def import_results_callback(): st.markdown("--- --- ---") - if __name__ == "__main__": render() else: - render() + render() \ No newline at end of file From 945f562e829e6c4f91a2f330f8d6867455a44da4 Mon Sep 17 00:00:00 2001 From: cola-marco Date: Fri, 22 Aug 2025 16:46:03 +0200 Subject: [PATCH 07/11] rimossi altri blanks per test flake8 --- views/visualizza_risultati.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/views/visualizza_risultati.py b/views/visualizza_risultati.py index 6ecec90..d1e656d 100644 --- a/views/visualizza_risultati.py +++ b/views/visualizza_risultati.py @@ -20,7 +20,7 @@ logger = logging.getLogger(__name__) -#@register_page("Visualizzazione Risultati") +# @register_page("Visualizzazione Risultati") def render(): add_page_header( "Visualizzazione Risultati Test", @@ -384,9 +384,11 @@ def import_results_callback(): "Completezza", f"{completeness:.2f}%" ) - st.markdown("--- --- ---") + + if __name__ == "__main__": render() else: - render() \ No newline at end of file + render() + \ No newline at end of file From 9f4ad839fcdf69ebcdf0250468e743a5d6dd1480 Mon Sep 17 00:00:00 2001 From: cola-marco Date: Fri, 22 Aug 2025 16:49:01 +0200 Subject: [PATCH 08/11] rimossi altri blanks per test flake8 --- views/visualizza_risultati.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/visualizza_risultati.py b/views/visualizza_risultati.py index d1e656d..595c8f1 100644 --- a/views/visualizza_risultati.py +++ b/views/visualizza_risultati.py @@ -385,10 +385,10 @@ def import_results_callback(): ) st.markdown("--- --- ---") - + if __name__ == "__main__": render() else: render() - \ No newline at end of file + From 4c85dcc14784c6b6abe7313ab892b5763543b635 Mon Sep 17 00:00:00 2001 From: cola-marco Date: Fri, 22 Aug 2025 16:53:00 +0200 Subject: [PATCH 09/11] rimossi altri blanks per test flake8 --- views/style_utils.py | 1 + views/visualizza_risultati.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/views/style_utils.py b/views/style_utils.py index d075fbd..0008be7 100644 --- a/views/style_utils.py +++ b/views/style_utils.py @@ -25,6 +25,7 @@ def add_global_styles(): """Aggiunge stili globali all'applicazione.""" load_css() + def add_page_header(title: str, icon: str = "💡", description: str | None = None): """Aggiunge un'intestazione di pagina stilizzata.""" load_css() diff --git a/views/visualizza_risultati.py b/views/visualizza_risultati.py index 595c8f1..9b2c833 100644 --- a/views/visualizza_risultati.py +++ b/views/visualizza_risultati.py @@ -386,9 +386,8 @@ def import_results_callback(): st.markdown("--- --- ---") - + if __name__ == "__main__": render() else: render() - From 2718c6d9fd5694cea0f37d261dea5821536c4604 Mon Sep 17 00:00:00 2001 From: cola-marco Date: Fri, 22 Aug 2025 17:08:50 +0200 Subject: [PATCH 10/11] rimossi altri blanks per test flake8 --- app.py | 4 +++- controllers/__init__.py | 2 +- .../__pycache__/__init__.cpython-311.pyc | Bin 2454 -> 2454 bytes .../question_set_controller.cpython-311.pyc | Bin 5949 -> 5915 bytes .../startup_controller.cpython-311.pyc | Bin 1130 -> 1096 bytes controllers/question_set_controller.py | 3 ++- controllers/startup_controller.py | 2 +- models/__pycache__/database.cpython-311.pyc | Bin 8660 -> 8660 bytes .../__pycache__/question_set.cpython-311.pyc | Bin 15871 -> 15871 bytes .../__pycache__/test_result.cpython-311.pyc | Bin 12450 -> 12450 bytes models/cached_data.py | 1 + models/database.py | 2 +- models/question_set.py | 2 +- models/test_result.py | 2 +- views/__pycache__/style_utils.cpython-311.pyc | Bin 3019 -> 3019 bytes views/api_configurazione.py | 8 +++++--- views/esecuzione_test.py | 5 +++-- views/gestione_domande.py | 5 +++-- views/gestione_set.py | 5 +++-- views/home.py | 5 +++-- views/style_utils.py | 1 + views/visualizza_risultati.py | 2 +- 22 files changed, 30 insertions(+), 19 deletions(-) diff --git a/app.py b/app.py index 1fc5d3c..4e06acd 100644 --- a/app.py +++ b/app.py @@ -32,7 +32,9 @@ Gestione_domande = st.Page("views/gestione_domande.py", title="Gestione Domande", icon=":material/construction:") Gestione_set = st.Page("views/gestione_set.py", title="Gestione Set di Domande", icon=":material/list:") Esecuzione_test = st.Page("views/esecuzione_test.py", title="Esecuzione Test", icon=":material/rule_settings:") -Visualizza_risultati = st.Page("views/visualizza_risultati.py", title="Visualizzazione Risultati", icon=":material/bar_chart:") +Visualizza_risultati = st.Page("views/visualizza_risultati.py", + title="Visualizzazione Risultati", + icon=":material/bar_chart:") # --- Navigazione --- pg = st.navigation([Home, Configurazione_API, Gestione_domande, Gestione_set, Esecuzione_test, Visualizza_risultati]) diff --git a/controllers/__init__.py b/controllers/__init__.py index 1bc3006..3d410d6 100644 --- a/controllers/__init__.py +++ b/controllers/__init__.py @@ -2,6 +2,7 @@ # Gestione dei preset API import logging +from .startup_controller import get_initial_state from .api_preset_controller import ( load_presets, @@ -65,7 +66,6 @@ calculate_statistics = TestResult.calculate_statistics # Funzioni di avvio -from .startup_controller import get_initial_state logger = logging.getLogger(__name__) diff --git a/controllers/__pycache__/__init__.cpython-311.pyc b/controllers/__pycache__/__init__.cpython-311.pyc index a7307ac0678add1c04bb6700eb5151878ebf4ddd..62c2571bab0d4d244a72a716c7dd042a6b27a698 100644 GIT binary patch delta 521 zcmZXOyG{Z@6oz+kcY%d11dQD8x8*9B$P3upA592>jaf5?%k0u=tgH>0gvwqk8(u_X zLwE^a!I>=-b#mq}&iCj1|2n#khMo;Wm-uTxysSclQ(2lEOjM$v3My)#p&$GhfB*&| zh&t#Pf)Iuwj0PBJQkpUMJRfn04ZS^ z%2vW-n7sALCVN!t>{YotqgC$T#l|BtUJ}kdm+iRr*r7F! zXkCaYq#>j!L}6EIyc^*Msk@vH$Fr$RXM|XkDje^QMss^Or1XQ zX48HAt`4#^A@K1x{&V3|DY0`c!Y;Lp>9yM(@{}dnkNH=aJ!x^RC2F_Xhjts;O1-z= Pv$^o=KA)aq7&N~Cui$EVyeO(sVX z@hrdTVab|O%cl_?i>}9A%VQ@S{aPuLuDDYU#fx$v|3^;6TB(Q+`BJo0P5jD6CCqcj z;}dH><7`f;!&q~Zo~d;as3mcu6wku~&TWT!{n*JI&!?PqA{XmLD=b8{822ByZ*;|% W`m~y+GKmryucguU{G>I3Y4Z7%g5Z<@8H~!mQ$KG|4)-kaipoYXsq6At&qco+^78Fud6ln$8uKb?URNgqu zu0>BY66K1B-ho5!fW!sxxf1lq0ku*&u;Rc44uHhZ0U?ACGi#fwz?1#y?acSh%zHEM zR_kU2_TmjkWEEcvlv$=|duj>RDuP>6tfI+k(K6{FPiXkL;(PCSOPsr1ba8l=b&*Y~=+y!NdOwQ5-R_`oQ(tba`+LImhL%={mCpc4j5PX5`uY0$Y&%{Bz8ZxAJvn z%Wv{eENxS;BEs(n%9qvEk6!t7?QZqlz3RDx(e*B(FPh*Y^me-e6y&q|4=7zRw%H~5 zrm+~Ga9v+Q7En*{c2CGZjd|qM%x(6v1asvPy2&Ps5?;59{#D|x6EqQqx43Ztw*1`O zWG_j*a0Y{3EVw5hM>nSK`Q9G)A`^Cl{az4yt`~+P@Zd>wZ#4^%;qHjgeQh*10nll{ zls^?-ty6-i@Q=&o9T&XU;WRNe3C_s9$#UZq(GucX8&+@^WDqW6V`*&+yKBp3)7Ib; zdQJ{*Pgd0|ow%uPZ8hui`_gfCUN)@y^(fa5@tRs~uYE;84k>V!AWsn2MPmRoq|wxn zibLbMogVmJ=*AYH=>?N089dkvy`3EaQQCF)JYTpjTp;)J1oSjui-3j}YRVcS4N=_w zxY)QS_ut7M>8Jf3?{~#IxX7b943_0z){E1dca;D6{jAD;dqKWypJLkJEBi8wAK~A1 CRUM81 delta 1304 zcmZ`&O>7fK6yEW!owe7yUdLVsC-?^&C`Q33PzXXPAOfvgP!j%vv=!P|nQ<`M#bI`> zpkCm>p;9jmbAz1Wz|m4U(L-qMdwRb0c%*ru1YhrOJgk8E+*@(Omr8?i@- z6qA^AV+ShWV#P;9lAge~vFuTrV96U}TjzF+4&77io&U3{V9n7SO|lYAv2SD+W2NF& zlr-2uV5yy;+P%14PD)9M=4l#2l1%=P4-%1r7$?P}gXAjJA+8cdd|Z}74Je>WGi->J z80095Zpsor6YZ;AkR(U58-jyE20JJz4naygHn6o7It;05;uSekl|$`9kNH8Td-D?U6LMR|0 zF9M9*j@tD?tH0Fh>q;G>zEggiL|Q}UqsYcqgbAMoPKWw39IDl7Bo?L?Ico*X0Uxh` zW2cyoHxp5^vRH|~{c=;Lj56C=pJ?=!>6S(fcy+OsXey{7Otm0hC!X(%R0u~EABSWs zJ7q50%)STA2gM&l`-yd5eOTAv7#i&Ma+e2A&~@4!mo*6A`+PkJ2?#5YN*`$?Sc7EFWF2iSk2~1+9+j^DMCc2F{o< zN3IChI6y4%z&N2#0E=V$p^?YM8)G+cQkgk2FTT$l+KWOB63Q*t1^*G`ohdGpEUA@h)=~M5j!LjEgn1Ts{V*nT8n}&JsM!t<5>{c@7m!@yfh5k2;~b?Q&?_ z;jI;Z1{u=`Uq=M!Ou#s!_=Y}^_-QoD?Dir*3_CvwumBH^>lD=UQ+6zV6>L-eC)si= zg?DVkW@Z|7@q6wVIVaNj+8rLXU+V?Xo#tX|@jBya;PGz}bcCo*d{&OrAC7ELVGdeO zyUV>+;6xUlL5hi#BwX}-cWH_7P<5P}Esr@4zliSh2sq7r7NH^?2gFI@I20V8m}AA! zQw;tI|Eg17m-bwCf-is<=gOZHf8}S(SJtJ^{{D%H8EafDTXFG&HAR&EQ)_`l)A}CN C^&9K} diff --git a/controllers/__pycache__/startup_controller.cpython-311.pyc b/controllers/__pycache__/startup_controller.cpython-311.pyc index 565b2f8438de54abf44ad9f063a84baf1d56534c..32d57795798bf51e066e4d86b2e442c620b30595 100644 GIT binary patch delta 169 zcmaFGae{+)IWI340}w1}Uy;!;kynzjXrj8Y9U}u1Ln=cSCrAbaQn{8fGBB(LVhD)h zPGL#qN##xDOJkCR2{NQHrLeZJMDb6YW5>um@wU}w6~;bBM#0IOnGzTUCW|n8PEKMr wR22lOU&&A;1f+@tfW$8jo80`A(wtPgB3U38WJmFW$vc>nCabVGv4E5T0N>dmTmS$7 delta 194 zcmX@X@rr|YIWI340}#wnTAooikynzjY@)icQ!Zx|CnEzBLn=cSSQexrm3tW@1H)<{ zhJYxZ6qZ!pRK8UHG$u)yAVV5c3Tq2Xl)%Ipc8n|&uUql*7N?e!7R2Y|r>AG;ZRTg3 zz{n^xc>z-bqu^vlW>2Of&dKh~CaOX}16DE=2?MDjK_Kyq!zMRBr8Fniu1F5Z1zB3W VYVrc+q{;W0xh6BQII)0~0szv)D0u(? diff --git a/controllers/question_set_controller.py b/controllers/question_set_controller.py index dd46d39..ee0ff4e 100644 --- a/controllers/question_set_controller.py +++ b/controllers/question_set_controller.py @@ -3,7 +3,7 @@ import pandas as pd -from models.question_set import QuestionSet, PersistSetsResult, question_set_importer +from models.question_set import QuestionSet, question_set_importer from utils.cache import ( get_questions as _get_questions, get_question_sets as _get_question_sets, @@ -15,6 +15,7 @@ ) logger = logging.getLogger(__name__) + def load_sets() -> pd.DataFrame: """Restituisce tutti i set di domande utilizzando la cache.""" return _get_question_sets() diff --git a/controllers/startup_controller.py b/controllers/startup_controller.py index 9908827..99e0389 100644 --- a/controllers/startup_controller.py +++ b/controllers/startup_controller.py @@ -5,7 +5,7 @@ DefaultConfig, initialize_database, load_default_config, - setup_logging, + # setup_logging, ) logger = logging.getLogger(__name__) diff --git a/models/__pycache__/database.cpython-311.pyc b/models/__pycache__/database.cpython-311.pyc index 9b34b4f790ec63df68330df4ab99e8e7ac92dd0d..eb5c296679142a86c142be1b3752eaf516a53338 100644 GIT binary patch delta 22 ccmccOe8rh}IWI340}y;~U6C List[Question]: return Question.load_all() diff --git a/models/database.py b/models/database.py index e5c0513..d3b9dad 100644 --- a/models/database.py +++ b/models/database.py @@ -123,4 +123,4 @@ def init_db(self) -> None: class Base(DeclarativeBase): """Base class per i modelli dichiarativi SQLAlchemy.""" - pass \ No newline at end of file + pass diff --git a/models/question_set.py b/models/question_set.py index ece7030..8cb06bf 100644 --- a/models/question_set.py +++ b/models/question_set.py @@ -291,4 +291,4 @@ def gather_data(self) -> List[Dict[str, Any]]: # type: ignore[override] return data -question_set_importer = QuestionSetImporter() \ No newline at end of file +question_set_importer = QuestionSetImporter() diff --git a/models/test_result.py b/models/test_result.py index 07972cb..0ed93c8 100644 --- a/models/test_result.py +++ b/models/test_result.py @@ -193,4 +193,4 @@ def gather_data(self) -> pd.DataFrame: # type: ignore[override] return TestResult.load_all_df() -test_result_importer = TestResultImporter() \ No newline at end of file +test_result_importer = TestResultImporter() diff --git a/views/__pycache__/style_utils.cpython-311.pyc b/views/__pycache__/style_utils.cpython-311.pyc index 93ce415cdf9dff9c516fd87d9e19b874552541f5..f44c198ad49b17fef944658f1fbb91e0e7acf006 100644 GIT binary patch delta 78 zcmX>tep;M&IWI340}xoWugJKvkynM8r7SbGe6lI?1V-M?$C#BE86`KrWckI&D7X0u i+dM`_-ObG$OBfl=HfwNkFfy`DHsn@d=m2< delta 78 zcmX>tep;M&IWI340}zyjt;o2vkynM8rL-h7XR;~t1V*0C$C#BE86`HqWckI&D6{zq i+dM`_?aj>`OBfkVHfwNkFfy`CHsn@d Date: Fri, 22 Aug 2025 17:20:18 +0200 Subject: [PATCH 11/11] rimossi altri blanks per test flake8 --- app.py | 4 ++-- controllers/question_set_controller.py | 2 +- views/api_configurazione.py | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app.py b/app.py index 4e06acd..cd80f3e 100644 --- a/app.py +++ b/app.py @@ -32,8 +32,8 @@ Gestione_domande = st.Page("views/gestione_domande.py", title="Gestione Domande", icon=":material/construction:") Gestione_set = st.Page("views/gestione_set.py", title="Gestione Set di Domande", icon=":material/list:") Esecuzione_test = st.Page("views/esecuzione_test.py", title="Esecuzione Test", icon=":material/rule_settings:") -Visualizza_risultati = st.Page("views/visualizza_risultati.py", - title="Visualizzazione Risultati", +Visualizza_risultati = st.Page("views/visualizza_risultati.py", + title="Visualizzazione Risultati", icon=":material/bar_chart:") # --- Navigazione --- diff --git a/controllers/question_set_controller.py b/controllers/question_set_controller.py index ee0ff4e..a89801c 100644 --- a/controllers/question_set_controller.py +++ b/controllers/question_set_controller.py @@ -3,7 +3,7 @@ import pandas as pd -from models.question_set import QuestionSet, question_set_importer +from models.question_set import QuestionSet, question_set_importer # PersistSetsResult not used from utils.cache import ( get_questions as _get_questions, get_question_sets as _get_question_sets, diff --git a/views/api_configurazione.py b/views/api_configurazione.py index fcffd6b..17c9012 100644 --- a/views/api_configurazione.py +++ b/views/api_configurazione.py @@ -289,4 +289,3 @@ def render(): render() else: render() - \ No newline at end of file