move db error handling from per-page to base page

This commit is contained in:
David Rodenkirchen 2024-08-29 13:25:20 +02:00
parent 140d1cb1db
commit deae96d8fa
4 changed files with 17 additions and 8 deletions

View File

@ -1,3 +1,4 @@
import logging
from random import choice
from typing import Callable
@ -6,10 +7,13 @@ from rio import Component, Column, Text, Row, Rectangle, Button, TextStyle, Colo
from src.ez_lan_manager import UserService
from src.ez_lan_manager.components.UserInfoBoxButton import UserInfoBoxButton
from src.ez_lan_manager.services.AccountingService import AccountingService
from src.ez_lan_manager.services.DatabaseService import NoDatabaseConnectionError, DatabaseService
from src.ez_lan_manager.services.TicketingService import TicketingService
from src.ez_lan_manager.services.SeatingService import SeatingService
from src.ez_lan_manager.types.SessionStorage import SessionStorage
logger = logging.getLogger(__name__.split(".")[-1])
class StatusButton(Component):
STYLE = TextStyle(fill=Color.from_hex("121212"), font_size=0.5)
label: str
@ -138,7 +142,7 @@ class UserInfoAndLoginBox(Component):
else:
user = self.session[UserService].get_user(self.session[SessionStorage].user_id)
if user is None:
print("ERROR")
logger.warning("User could not be found, this should not have happend.")
a_s = self.session[AccountingService]
return Rectangle(
content=Column(

View File

@ -2,9 +2,9 @@ from __future__ import annotations
from typing import * # type: ignore
from rio import Component, event, Spacer, Card, Container, Column, Row, Rectangle, TextStyle, Color, Text
from rio import Component, event, Spacer, Card, Container, Column, Row, TextStyle, Color, Text
from src.ez_lan_manager import ConfigurationService
from src.ez_lan_manager import ConfigurationService, DatabaseService
from src.ez_lan_manager.components.DesktopNavigation import DesktopNavigation
class BasePage(Component):
@ -14,6 +14,11 @@ class BasePage(Component):
async def on_window_size_change(self):
await self.force_refresh()
@event.on_populate
async def check_db_connection(self):
if not self.session[DatabaseService].is_connected:
self.session.navigate_to("./db-error")
def build(self) -> Component:
if self.content is None:
content = Spacer()
@ -63,3 +68,4 @@ class BasePage(Component):
align_y=0.5,
style=TextStyle(fill=Color.from_hex("FFFFFF"), font_size=0.8)
)

View File

@ -3,7 +3,6 @@ from rio import Column, Component, event
from src.ez_lan_manager import ConfigurationService, NewsService
from src.ez_lan_manager.components.NewsPost import NewsPost
from src.ez_lan_manager.pages import BasePage
from src.ez_lan_manager.services.DatabaseService import NoDatabaseConnectionError
from src.ez_lan_manager.types.News import News
@ -13,10 +12,7 @@ class NewsPage(Component):
@event.on_populate
async def on_populate(self) -> None:
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Neuigkeiten")
try:
self.news_posts = self.session[NewsService].get_news()[:8]
except NoDatabaseConnectionError:
self.session.navigate_to("db-error")
self.news_posts = self.session[NewsService].get_news()[:8]
def build(self) -> Component:
posts = [NewsPost(

View File

@ -36,9 +36,12 @@ class DatabaseService:
self._connection: Optional[mariadb.Connection] = None
self._reestablishment_lock = False
self.establish_new_connection()
self.calls = 0
@property
def is_connected(self) -> bool:
self.calls += 1
print(f"{self.calls} Calls")
try:
self._connection.ping()
except Exception: