from nicegui import ui import sqlite3 import signal import os def dict_factory(cursor, row): d = {} for idx, col in enumerate(cursor.description): d[col[0]] = row[idx] return d def read_data(query): try: cursor.execute(query) rows = cursor.fetchall() return rows except sqlite3.Error as e: ui.notify("{e}") return None def registra_presenza(id, flag): try: cursor.execute("UPDATE users SET presenze = ? WHERE id = ?", (1 if flag==True else 0, id) ) conn.commit() finally: tabellaUtenti.refresh() os.kill(os.getpid(), signal.SIGUSR1) @ui.refreshable def tabellaUtenti(): rows = read_data("SELECT u.*, (SELECT data FROM pagamenti WHERE user_id=u.id AND date(data) = '2021-05-31' ORDER BY id DESC LIMIT 1) as pagamenti FROM users as u;") for row in rows: with ui.row().classes("w-full"): with ui.column().classes("grow"): ui.label(f"{row['nome']} {row['cognome'][0].upper()}.").style('color:'+("black" if row['pagamenti'] else "red")) with ui.column(): if row["presenze"] == 1: ui.button(color="primary", text= "presente", on_click= lambda: registra_presenza(row["id"], False)) else: ui.button(color="secondary", text= "assente", on_click= lambda: registra_presenza(row["id"], True)) ui.separator() def onSignal(signum, frame): tabellaUtenti.refresh() signal.signal(signal.SIGUSR1, onSignal) # START conn = sqlite3.connect('letsswing.db') conn.row_factory = dict_factory cursor = conn.cursor() with ui.row().classes("w-full"): with ui.column().classes("grow"): ui.label("Beginner a matera") with ui.column(): ui.icon("thumb_up") tabellaUtenti() ui.run(host="0.0.0.0")