From 05fbecf3c834f10e69c70f806a8f5f70c09c89b9 Mon Sep 17 00:00:00 2001 From: enne2 Date: Wed, 20 Sep 2023 19:34:46 +0200 Subject: [PATCH] 1.1.3 --- main.py | 29 +++++++++++++++++++++++++---- pages/manager.py | 14 +++++++------- pages/user.py | 12 ++++-------- pages/useredit.py | 4 ++-- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/main.py b/main.py index f357943..954a48c 100644 --- a/main.py +++ b/main.py @@ -11,6 +11,27 @@ import shutil from fastapi.responses import RedirectResponse from fastapi.responses import FileResponse +class CallbackHandler: + def __init__(self): + self.callbacks = {} + + def register_callback(self, event_name, func): + if event_name not in self.callbacks: + self.callbacks[event_name] = [] + self.callbacks[event_name].append(func) + + def execute_callbacks(self, event_name, *args, **kwargs): + if event_name in self.callbacks: + for callback in self.callbacks[event_name][:]: + try: + callback(*args, **kwargs) + except Exception as e: + print(f"Error executing callback {callback}: {e}") + self.callbacks[event_name].remove(callback) + + +handler = CallbackHandler() + passwords = {'admin': [0,'sw1ng3rs',0, "Matteo Benedetto"], 'user': [1,'pass',1, "Pippo"]} # Set the locale to Italian locale.setlocale(locale.LC_ALL, 'it_IT.utf8') @@ -35,7 +56,7 @@ def manager_page(sede:int, livello:int) -> None: login_check() styling() - manage = manager.Manager() + manage = manager.Manager(handler) manage.main(db, sede, livello) # Routes @@ -50,13 +71,13 @@ def index_page() -> None: def user_page(userid: str) -> None: login_check() styling() - user.main(userid, db) + user.main(userid, db, handler) @ui.page('/edit/{userid}/{sede}/{livello}', title="Let's Swing Admin", favicon="assets/favicon.ico") def useredit_page(userid: str, sede: int, livello: int) -> None: login_check() styling() - useredit.main(db, userid, sede, livello) + useredit.main(userid, sede, livello, db, handler) @ui.page('/backup/{password}') def api_backup(password: str) -> None: @@ -95,4 +116,4 @@ def page_login() -> None: # Run main loop -ui.run(host="0.0.0.0", port=9999, storage_secret='5w1ng4ndn0th1ngm0r3') +ui.run(host="0.0.0.0", port=9999, storage_secret='5w1ng4ndn0th1ngm0r3',workers=1) diff --git a/pages/manager.py b/pages/manager.py index 9006c9a..e0ab15c 100644 --- a/pages/manager.py +++ b/pages/manager.py @@ -4,8 +4,10 @@ import os from datetime import datetime, timedelta from montydb.database import MontyDatabase + class Manager: - def __init__(self): + def __init__(self,handler): + self.handler = handler self.current_time = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(seconds=1) self.current_index = 0 @@ -36,7 +38,8 @@ class Manager: {"_id": id}, {"$pull": {"presenze": current_day}} ) - os.kill(os.getpid(), signal.SIGUSR1) + #os.kill(os.getpid(), signal.SIGUSR1) + self.handler.execute_callbacks('users_update') @ui.refreshable @@ -86,13 +89,10 @@ class Manager: ui.separator() - def onSignal(signum, frame): - print("Signal") - tabellaUtenti.refresh() - - signal.signal(signal.SIGUSR1, onSignal) + self.handler.register_callback("users_update", tabellaUtenti.refresh) liv = db.livelli.find_one({"id":livello}) sed = db.sedi.find_one({"id":sede}) + ## FRONTEND with ui.row().classes("w-full"): ui.icon("chevron_left", size="lg").on("click", lambda: ui.open("/")) diff --git a/pages/user.py b/pages/user.py index 8e23cf2..221815c 100644 --- a/pages/user.py +++ b/pages/user.py @@ -6,14 +6,14 @@ from montydb.types.objectid import ObjectId from fastapi.responses import RedirectResponse -def main(userid, db): +def main(userid, db, handler): collection = db.users async def delete_user(): result = await dialog if result: db.users.delete_one({"_id":ObjectId(userid)}) - os.kill(os.getpid(), signal.SIGUSR1) + handler.execute_callbacks('users_update') await ui.run_javascript('history.back()', respond=False) def register_payment(month, flag): @@ -27,13 +27,8 @@ def main(userid, db): {"_id": ObjectId(userid)}, {"$pull": {"pagamenti": month.strftime('%Y-%m-%d %H:%M:%S')}} ) - os.kill(os.getpid(), signal.SIGUSR1) - page.refresh() + handler.execute_callbacks('users_update') - def onSignal(signum, frame): - page.refresh() - - signal.signal(signal.SIGUSR1, onSignal) # Calculate last start date start_date = datetime(datetime.now().year - (datetime.now().month < 8), 9, 1) @@ -83,6 +78,7 @@ def main(userid, db): ui.button(color="negative", text= "NON PAGATO", on_click= lambda dt=month: register_payment(dt, True)).style('font-size:0.4rem;font-weight:700;white-space: nowrap;') else: ui.button(text= "PAGA", on_click= lambda dt=month: register_payment(dt, True)).style('font-size:0.5rem;font-weight:700;').props('outline') + handler.register_callback("users_update", page.refresh) ## FRONTEND with ui.dialog() as dialog, ui.card(): diff --git a/pages/useredit.py b/pages/useredit.py index 2a31054..d4c2381 100644 --- a/pages/useredit.py +++ b/pages/useredit.py @@ -5,7 +5,7 @@ from montydb.types.objectid import ObjectId import signal import os -def main(db: MontyClient, userid: str, sede: int, livello: int) -> None: +def main( userid: str, sede: int, livello: int, db: MontyClient, handler) -> None: if userid!= "new": result = db.users.find_one({"_id":ObjectId(userid)}) @@ -23,7 +23,7 @@ def main(db: MontyClient, userid: str, sede: int, livello: int) -> None: {"_id": ObjectId(userid)}, {"$set": data_submit} ) - os.kill(os.getpid(), signal.SIGUSR1) + handler.execute_callbacks('users_update') await ui.run_javascript('history.back()', respond=False) ui.icon("chevron_left", size="lg").on("click", lambda: ui.run_javascript('history.back()', respond=False))