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:
Tom Hacohen 2020-12-30 09:20:38 +02:00
parent a7fdb4a108
commit 473448246f
2 changed files with 17 additions and 0 deletions

View File

@ -5,6 +5,7 @@ from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.trustedhost import TrustedHostMiddleware
from .middleware import DjangoDbConnectionCleanupMiddleware
from .exceptions import CustomHttpException
from .msgpack import MsgpackResponse
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.add_middleware(DjangoDbConnectionCleanupMiddleware)
app.add_middleware(
CORSMiddleware,
allow_origin_regex="https?://.*",

View 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()