import streamlit as st import time from backend.db import DB, Session from backend.his_io import prepare_table, read_excel def session_ui(db: DB, session: Session | None) -> Session | None: with st.sidebar: st.title(":blue[Noteneingabetool]") st.header("Session :blue[wiederherstellen]", divider='gray') # DEBUG (select session) selected_session = st.selectbox(":red[DEBUG] Session auswählen", db.list_tokens(), index=None, key='session_select', format_func=lambda token: f'{token} - {db.get_session(token).table_name}' ) if selected_session: token = selected_session else: token = st.text_input("Session Token", value=session.token if session else '', key='token_input') if token: if not session or token != session.token: try: session = db.get_session(token) st.success("Session gefunden") except ValueError: st.error("Session nicht gefunden") session = None else: session = None st.header(":blue Session :blue[verwalten]", divider='gray') if st.button("Neue Session"): new_session_dialog(db) if st.button("Lösche Session", disabled=session is None): delete_session_dialog(db, session) return session @st.dialog("Neue Session anlegen") def new_session_dialog(db: DB): upload_file = st.file_uploader("HISinOne Excel Datei hochladen", type=['xlsx'], key='file_uploader') if upload_file: session = create_new_session(db, upload_file) db.save_session(session) st.write(":green[Session erstellt.]") st.write('Nicht vergessen, den :blue[Token] zu notieren:') st.code(session.token) @st.dialog("Session löschen") def delete_session_dialog(db: DB, session: Session): st.warning("Sind Sie sicher, dass Sie die Session löschen möchten?") if st.button(":exclamation: Session löschen :exclamation:"): db.delete_session(session) del st.session_state.session st.success("Session gelöscht") st.rerun() def create_new_session(db, upload_file) -> Session: new_session = db.create_session() students_df, his_header = read_excel(upload_file) points_df = prepare_table(students_df) new_session.students_df = students_df new_session.his_header = his_header new_session.points_df = points_df new_session.table_name = upload_file.name return new_session