All checks were successful
Build Docker Image / build (pull_request) Successful in 3m9s
Add db_session_middleware to main.py that opens the connection at the start of each request and closes it in a try/finally block, ensuring connections are always returned even on uncaught exceptions. Remove all individual db.close() calls from 30 router files in app/routers_v2/ — the middleware now handles all code paths. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
104 lines
2.7 KiB
Python
104 lines
2.7 KiB
Python
from fastapi import FastAPI, Request
|
|
from fastapi.openapi.docs import get_swagger_ui_html
|
|
from fastapi.openapi.utils import get_openapi
|
|
|
|
# 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,
|
|
)
|
|
|
|
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.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):
|
|
print(req.scope)
|
|
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)
|