Add a django middleware to cleanup db connections.
This severely impacts performance, though without it we are getting django.db.utils.InterfaceError once connections in the pool go stale.
This commit is contained in:
parent
a7fdb4a108
commit
473448246f
@ -5,6 +5,7 @@ from fastapi import FastAPI, Request
|
|||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.middleware.trustedhost import TrustedHostMiddleware
|
from fastapi.middleware.trustedhost import TrustedHostMiddleware
|
||||||
|
|
||||||
|
from .middleware import DjangoDbConnectionCleanupMiddleware
|
||||||
from .exceptions import CustomHttpException
|
from .exceptions import CustomHttpException
|
||||||
from .msgpack import MsgpackResponse
|
from .msgpack import MsgpackResponse
|
||||||
from .routers.authentication import authentication_router
|
from .routers.authentication import authentication_router
|
||||||
@ -42,6 +43,7 @@ def create_application(prefix="", middlewares=[]):
|
|||||||
|
|
||||||
app.include_router(test_reset_view_router, prefix=f"{BASE_PATH}/test/authentication")
|
app.include_router(test_reset_view_router, prefix=f"{BASE_PATH}/test/authentication")
|
||||||
|
|
||||||
|
app.add_middleware(DjangoDbConnectionCleanupMiddleware)
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
CORSMiddleware,
|
CORSMiddleware,
|
||||||
allow_origin_regex="https?://.*",
|
allow_origin_regex="https?://.*",
|
||||||
|
15
etebase_fastapi/middleware.py
Normal file
15
etebase_fastapi/middleware.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from starlette.types import ASGIApp, Receive, Scope, Send
|
||||||
|
from django.db import close_old_connections, reset_queries
|
||||||
|
|
||||||
|
|
||||||
|
class DjangoDbConnectionCleanupMiddleware:
|
||||||
|
def __init__(self, app: ASGIApp):
|
||||||
|
self.app = app
|
||||||
|
|
||||||
|
async def __call__(self, scope: Scope, receive: Receive, send: Send):
|
||||||
|
reset_queries()
|
||||||
|
close_old_connections()
|
||||||
|
try:
|
||||||
|
await self.app(scope, receive, send)
|
||||||
|
finally:
|
||||||
|
close_old_connections()
|
Loading…
Reference in New Issue
Block a user