noteneingabetool/session_ui.py
2025-07-25 18:54:33 +02:00

75 lines
2.5 KiB
Python

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