You've already forked request-coalescing-py
mirror of
https://github.com/hexolan/request-coalescing-py.git
synced 2026-03-26 10:11:16 +00:00
added code documentation clarified language in `README.md` updated details in `pyproject.toml`
35 lines
957 B
Python
35 lines
957 B
Python
import asyncio
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from request_coalescing_py.database import DatabaseRepo
|
|
from request_coalescing_py.coalescer import CoalescingRepo
|
|
from request_coalescing_py.routes import router
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
@app.on_event("startup")
|
|
async def startup_event():
|
|
"""Prepare the API to take requests"""
|
|
# initialise metrics
|
|
app.state.DEFAULT_METRICS = {"requests": 0, "db_calls": 0}
|
|
app.state.metrics = app.state.DEFAULT_METRICS.copy()
|
|
|
|
# initilise DB repository
|
|
app.state.repo = DatabaseRepo(app=app)
|
|
await app.state.repo.start_db()
|
|
|
|
# initialise coalescing repo and spawn a worker task
|
|
app.state.coalescer = CoalescingRepo(repo=app.state.repo)
|
|
asyncio.create_task(app.state.coalescer.process_queue())
|
|
|
|
|
|
@app.on_event("shutdown")
|
|
async def shutdown_event():
|
|
"""Gracefully stop connections on shutdown"""
|
|
# close DB connection
|
|
await app.state.repo.stop_db()
|
|
|
|
|
|
app.include_router(router) |