Source code for bobtail.middleware
from typing import List, Callable
from abc import ABC, abstractmethod
from bobtail.route import Handler
from bobtail.response import Response
from bobtail.request import Request
Tail = Callable[[Request, Response], None]
[docs]
class AbstractMiddleware(ABC):
@abstractmethod
def run(self, req: Request, res: Response, tail: Tail) -> None:
pass
class Middleware:
middlewares: List[AbstractMiddleware] = None
handler: Handler = None
request: Request
response: Response
def add(self, instance: AbstractMiddleware):
if self.middlewares is None:
self.middlewares = []
self.middlewares.append(instance)
def call(self, req: Request, res: Response, handler: Handler):
if self.middlewares:
self.handler = handler
self.request = req
self.response = res
for middleware in self.middlewares:
middleware.run(self.request, self.response, self.tail)
self.handler(self.request, self.response)
return
handler(req, res)
def tail(self, req: Request, res: Response) -> None:
"""
:param req:
:type req:
:param res:
:type res:
:return:
:rtype:
"""
self.request = req
self.response = res