import yaml import logging from starlette.routing import Mount, Route from starlette.requests import Request from starlette.applications import Starlette from starlette.responses import PlainTextResponse from os import environ, path from typing import List from core import CoreConfig, TitleServlet, MuchaServlet, logger from core.allnet import app_allnet, app_billing from core.frontend import FrontendServlet async def dummy_rt(request: Request): return PlainTextResponse("Service OK") cfg_dir = environ.get("ARTEMIS_CFG_DIR", "config") cfg: CoreConfig = CoreConfig() if path.exists(f"{cfg_dir}/core.yaml"): cfg.update(yaml.safe_load(open(f"{cfg_dir}/core.yaml"))) logger = logger.create_logger( "Core", logging.DEBUG if cfg.server.is_develop else logging.INFO, ) logger.info(f"Artemis starting in {'develop' if cfg.server.is_develop else 'production'} mode") title = TitleServlet(cfg, cfg_dir) # This has to be loaded first to load plugins mucha = MuchaServlet(cfg, cfg_dir) route_lst: List[Route] = [ # Mucha Route("/mucha_front/boardauth.do", mucha.handle_boardauth, methods=["POST"]), Route("/mucha_front/updatacheck.do", mucha.handle_updatecheck, methods=["POST"]), Route("/mucha_front/downloadstate.do", mucha.handle_dlstate, methods=["POST"]), # General Route("/", dummy_rt), Route("/robots.txt", FrontendServlet.robots) ] if not cfg.billing.standalone: route_lst.append(Mount("/", app_billing)) if not cfg.allnet.standalone: route_lst.append(Mount("/", app_allnet)) for code, game in title.title_registry.items(): route_lst += game.get_routes() app = Starlette(cfg.server.is_develop, route_lst)