import logging from asyncio import get_event_loop import sys from pathlib import Path from rio import App, Theme, Color, Font, ComponentPage, Session from from_root import from_root from src.ez_lan_manager import pages, init_services from src.ez_lan_manager.helpers.LoggedInGuard import logged_in_guard, not_logged_in_guard, team_guard from src.ez_lan_manager.services.DatabaseService import NoDatabaseConnectionError from src.ez_lan_manager.types.SessionStorage import SessionStorage logger = logging.getLogger("EzLanManager") if __name__ == "__main__": theme = Theme.from_colors( primary_color=Color.from_hex("ffffff"), secondary_color=Color.from_hex("018786"), neutral_color=Color.from_hex("1e1e1e"), background_color=Color.from_hex("121212"), hud_color=Color.from_hex("02dac5"), text_color=Color.from_hex("018786"), mode="dark", corner_radius_small=0, corner_radius_medium=0, corner_radius_large=0, font=Font(from_root("src/ez_lan_manager/assets/fonts/joystix.otf")) ) services = init_services() lan_info = services[2].get_lan_info() async def on_session_start(session: Session) -> None: await session.set_title(lan_info.name) session.attach(SessionStorage()) async def on_app_start(a: App) -> None: init_result = await a.default_attachments[3].init_db_pool() if not init_result: logger.fatal("Could not connect to database, exiting...") sys.exit(1) app = App( name="EZ LAN Manager", build=pages.BasePage, pages=[ ComponentPage( name="News", url_segment="", build=pages.NewsPage, ), ComponentPage( name="News", url_segment="news", build=pages.NewsPage, ), ComponentPage( name="Overview", url_segment="overview", build=lambda: pages.PlaceholderPage(placeholder_name="LAN Übersicht"), ), ComponentPage( name="BuyTicket", url_segment="buy_ticket", build=pages.BuyTicketPage, ), ComponentPage( name="SeatingPlan", url_segment="seating", build=pages.SeatingPlanPage, ), ComponentPage( name="Catering", url_segment="catering", build=pages.CateringPage, ), ComponentPage( name="Guests", url_segment="guests", build=pages.GuestsPage, ), ComponentPage( name="Tournaments", url_segment="tournaments", build=pages.TournamentsPage, ), ComponentPage( name="FAQ", url_segment="faq", build=pages.FaqPage, ), ComponentPage( name="RulesGTC", url_segment="rules-gtc", build=pages.RulesPage ), ComponentPage( name="Contact", url_segment="contact", build=pages.ContactPage, ), ComponentPage( name="Imprint", url_segment="imprint", build=pages.ImprintPage, ), ComponentPage( name="Register", url_segment="register", build=pages.RegisterPage, guard=not_logged_in_guard ), ComponentPage( name="ForgotPassword", url_segment="forgot-password", build=pages.ForgotPasswordPage, guard=not_logged_in_guard ), ComponentPage( name="EditProfile", url_segment="edit-profile", build=pages.EditProfilePage, guard=logged_in_guard ), ComponentPage( name="Account", url_segment="account", build=pages.AccountPage, guard=logged_in_guard ), ComponentPage( name="ManageNewsPage", url_segment="manage-news", build=pages.ManageNewsPage, guard=team_guard ), ComponentPage( name="ManageUsersPage", url_segment="manage-users", build=pages.ManageUsersPage, guard=team_guard ), ComponentPage( name="ManageCateringPage", url_segment="manage-catering", build=pages.ManageCateringPage, guard=team_guard ), ComponentPage( name="ManageTournamentsPage", url_segment="manage-tournaments", build=pages.ManageTournamentsPage, guard=team_guard ), ComponentPage( name="DbErrorPage", url_segment="db-error", build=pages.DbErrorPage, ) ], theme=theme, assets_dir=Path(__file__).parent / "assets", default_attachments=services, on_session_start=on_session_start, on_app_start=on_app_start, icon=from_root("src/ez_lan_manager/assets/img/favicon.png"), meta_tags={ "robots": "INDEX,FOLLOW", "description": f"Info und Verwaltungs-Seite der LAN Party '{lan_info.name} - {lan_info.iteration}'.", "og:description": f"Info und Verwaltungs-Seite der LAN Party '{lan_info.name} - {lan_info.iteration}'.", "keywords": "Gaming, Clan, Guild, Verein, Club, Einfach, Zocken, Gesellschaft, Videospiele, " "Videogames, LAN, Party, EZ, LAN, Manager", "author": "David Rodenkirchen", "publisher": "EZ GG e.V.", "copyright": "EZ GG e.V.", "audience": "Alle", "page-type": "Management Application", "page-topic": "LAN Party", "expires": "", "revisit-after": "2 days" } ) sys.exit(app.run_as_web_server())