35 lines
1012 B
Python
35 lines
1012 B
Python
from starlette.requests import Request
|
|
from starlette.types import ASGIApp, Receive, Scope, Send
|
|
|
|
from .bgtask import BgTasks
|
|
|
|
|
|
class SimpleBaseMiddleware:
|
|
def __init__(self, app: ASGIApp) -> None:
|
|
self.app = app
|
|
|
|
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
|
|
if scope["type"] != "http":
|
|
await self.app(scope, receive, send)
|
|
return
|
|
|
|
request = Request(scope, receive=receive)
|
|
|
|
response = await self.before_request(request) or self.app
|
|
await response(request.scope, request.receive, send)
|
|
await self.after_request(request)
|
|
|
|
async def before_request(self, request: Request):
|
|
return self.app
|
|
|
|
async def after_request(self, request: Request):
|
|
return None
|
|
|
|
|
|
class BackGroundTaskMiddleware(SimpleBaseMiddleware):
|
|
async def before_request(self, request):
|
|
await BgTasks.init_bg_tasks_obj()
|
|
|
|
async def after_request(self, request):
|
|
await BgTasks.execute_tasks()
|