Skip to content

Commit

Permalink
Switch to fastapi lifespan for startup/shutdown handling
Browse files Browse the repository at this point in the history
  • Loading branch information
Iain-S committed Jul 3, 2024
1 parent a4dd055 commit f8a111f
Showing 1 changed file with 26 additions and 25 deletions.
51 changes: 26 additions & 25 deletions rctab/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
"""The entrypoint of the FastAPI application."""

import logging
from contextlib import asynccontextmanager
from pathlib import Path
from typing import Any, Callable, Dict, Final
from typing import Any, AsyncIterator, Callable, Dict, Final

import fastapimsal
import secure
Expand Down Expand Up @@ -34,13 +35,37 @@

templates = Jinja2Templates(directory=Path("rctab/templates"))


@asynccontextmanager
async def lifespan(_: FastAPI) -> AsyncIterator[None]:
"""Handle setup and teardown."""
await database.connect()
settings = get_settings()
logging.basicConfig(level=settings.log_level)
set_log_handler()
if not settings.ignore_whitelist:
logger = logging.getLogger(__name__)
logger.warning(
"Starting server with subscription whitelist: %s", settings.whitelist
)

yield

logger = logging.getLogger(__name__)
logger.warning("Shutting down server...")

logger.info("Disconnecting from database")
await database.disconnect()


app = FastAPI(
title="RCTab API",
description="API for RCTab",
version="0.1.0",
docs_url=None,
redoc_url=None,
openapi_url=None,
lifespan=lifespan,
)

server = secure.Server().set("Secure")
Expand Down Expand Up @@ -76,30 +101,6 @@ async def set_secure_headers(request: Any, call_next: Callable[[Any], Any]) -> A
)


@app.on_event("startup")
async def startup() -> None:
"""Start the server up."""
await database.connect()
settings = get_settings()
logging.basicConfig(level=settings.log_level)
set_log_handler()
if not settings.ignore_whitelist:
logger = logging.getLogger(__name__)
logger.warning(
"Starting server with subscription whitelist: %s", settings.whitelist
)


@app.on_event("shutdown")
async def shutdown() -> None:
"""Shut the server down."""
logger = logging.getLogger(__name__)
logger.warning("Shutting down server...")

logger.info("Disconnecting from database")
await database.disconnect()


@app.exception_handler(UniqueViolationError)
async def unicorn_exception_handler(
_: Request, exc: UniqueViolationError
Expand Down

0 comments on commit f8a111f

Please sign in to comment.