import logging import os from datetime import datetime from fastapi import FastAPI, Request from fastapi.openapi.docs import get_swagger_ui_html from fastapi.openapi.utils import get_openapi _log_date = f"{datetime.now().year}-{datetime.now().month}-{datetime.now().day}" logging.basicConfig( filename=f"logs/database/{_log_date}.log", format="%(asctime)s - database - %(levelname)s - %(message)s", level=logging.INFO if os.environ.get("LOG_LEVEL") == "INFO" else logging.WARNING, ) # from fastapi.staticfiles import StaticFiles # from fastapi.templating import Jinja2Templates from .db_engine import db from .routers_v2 import ( current, awards, teams, rarity, cardsets, players, packtypes, packs, cards, events, results, rewards, decisions, batstats, pitstats, notifications, paperdex, gamerewards, gauntletrewards, gauntletruns, battingcards, battingcardratings, pitchingcards, pitchingcardratings, cardpositions, scouting, mlbplayers, stratgame, stratplays, scout_opportunities, scout_claims, evolution, ) app = FastAPI( # root_path='/api', responses={404: {"description": "Not found"}}, docs_url="/api/docs", redoc_url="/api/redoc", ) # app.mount("/static", StaticFiles(directory="storage/static"), name="static") # templates = Jinja2Templates(directory=os.path.dirname(os.path.abspath(__file__))) app.include_router(current.router) app.include_router(awards.router) app.include_router(teams.router) app.include_router(rarity.router) app.include_router(cardsets.router) app.include_router(players.router) app.include_router(packtypes.router) app.include_router(packs.router) app.include_router(cards.router) app.include_router(events.router) app.include_router(results.router) app.include_router(rewards.router) app.include_router(batstats.router) app.include_router(pitstats.router) app.include_router(notifications.router) app.include_router(paperdex.router) app.include_router(gamerewards.router) app.include_router(gauntletrewards.router) app.include_router(gauntletruns.router) app.include_router(battingcards.router) app.include_router(battingcardratings.router) app.include_router(pitchingcards.router) app.include_router(pitchingcardratings.router) app.include_router(cardpositions.router) app.include_router(scouting.router) app.include_router(mlbplayers.router) app.include_router(stratgame.router) app.include_router(stratplays.router) app.include_router(decisions.router) app.include_router(scout_opportunities.router) app.include_router(scout_claims.router) app.include_router(evolution.router) @app.middleware("http") async def db_session_middleware(request: Request, call_next): try: db.connect(reuse_if_open=True) response = await call_next(request) return response finally: if not db.is_closed(): db.close() @app.get("/api/docs", include_in_schema=False) async def get_docs(req: Request): return get_swagger_ui_html( openapi_url=req.scope.get("root_path") + "/openapi.json", title="Swagger" ) @app.get("/api/openapi.json", include_in_schema=False) async def openapi(): return get_openapi(title="Paper Dynasty API", version=f"0.1.1", routes=app.routes)