Fix memory leaked caused by RefreshService

This commit was merged in pull request #65.
This commit is contained in:
David Rodenkirchen
2026-04-17 09:33:19 +02:00
parent d5cd05c0e5
commit c349fe475b
7 changed files with 30 additions and 24 deletions
+2 -2
View File
@@ -20,7 +20,7 @@ from src.ezgg_lan_manager.services.UserService import UserService
from src.ezgg_lan_manager.types import *
# Inits services in the correct order
def init_services() -> tuple[AccountingService, CateringService, ConfigurationService, DatabaseService, MailingService, NewsService, SeatingService, TicketingService, UserService, LocalDataService, ReceiptPrintingService, TournamentService, TeamService, RefreshService]:
def init_services() -> tuple[AccountingService, CateringService, ConfigurationService, DatabaseService, MailingService, NewsService, SeatingService, TicketingService, UserService, LocalDataService, ReceiptPrintingService, TournamentService, TeamService]:
logging.basicConfig(level=logging.DEBUG)
configuration_service = ConfigurationService(from_root("config.toml"))
db_service = DatabaseService(configuration_service.get_database_configuration())
@@ -37,4 +37,4 @@ def init_services() -> tuple[AccountingService, CateringService, ConfigurationSe
team_service = TeamService(db_service)
refresh_service = RefreshService()
return accounting_service, catering_service, configuration_service, db_service, mailing_service, news_service, seating_service, ticketing_service, user_service, local_data_service, receipt_printing_service, tournament_service, team_service, refresh_service
return accounting_service, catering_service, configuration_service, db_service, mailing_service, news_service, seating_service, ticketing_service, user_service, local_data_service, receipt_printing_service, tournament_service, team_service
@@ -68,9 +68,10 @@ class UserInfoBox(Component):
@event.on_populate
async def async_init(self) -> None:
self.user = await self.session[UserService].get_user(self.user_id)
self.user_balance = await self.session[AccountingService].get_balance(self.user.user_id)
self.user_ticket = await self.session[TicketingService].get_user_ticket(self.user.user_id)
self.user_seat = await self.session[SeatingService].get_user_seat(self.user.user_id)
if self.user is not None:
self.user_balance = await self.session[AccountingService].get_balance(self.user.user_id)
self.user_ticket = await self.session[TicketingService].get_user_ticket(self.user.user_id)
self.user_seat = await self.session[SeatingService].get_user_seat(self.user.user_id)
self.session[AccountingService].add_update_hook(self.update)
async def update(self) -> None:
@@ -18,7 +18,6 @@ class CateringPage(Component):
@event.on_populate
async def on_populate(self) -> None:
self.session[RefreshService].subscribe(self.on_populate)
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Catering")
self.all_menu_items = await self.session[CateringService].get_menu()
@@ -1,17 +1,17 @@
from typing import Callable
from typing import Callable, Optional
class RefreshService:
"""
rio.Components can subscribe to this service with their on_populate method.
Those methods get called whenever a overall refresh is needed. Usually when the user logs in or out.
The active rio.Components can subscribe to this service with their on_populate method.
This methods get called whenever a overall refresh is needed. Usually when the user logs in or out.
"""
def __init__(self) -> None:
self.subscribers: set[Callable] = set()
self.subscriber: Optional[Callable] = None
def subscribe(self, refresh_cb: Callable) -> None:
self.subscribers.add(refresh_cb)
self.subscriber = refresh_cb
async def trigger_refresh(self) -> None:
for refresh_cb in self.subscribers:
await refresh_cb()
if self.subscriber is not None:
await self.subscriber()
+3 -3
View File
@@ -1,9 +1,9 @@
from dataclasses import dataclass
from uuid import UUID
from rio import Dataclass
@dataclass
class UserSession:
class UserSession(Dataclass):
id: UUID
user_id: int
is_team_member: bool