Register a middleware to be called before a request is handled. Args: middleware (Callable): A callable that takes in a request. attach_to (str): Whether to attach to request or response. Defaults to `'request'`. priority (int): The priori
(
self,
middleware: MiddlewareType | Middleware,
attach_to: str = "request",
*,
priority: Default | int = _default,
)
| 461 | return listener |
| 462 | |
| 463 | def register_middleware( |
| 464 | self, |
| 465 | middleware: MiddlewareType | Middleware, |
| 466 | attach_to: str = "request", |
| 467 | *, |
| 468 | priority: Default | int = _default, |
| 469 | ) -> MiddlewareType | Middleware: |
| 470 | """Register a middleware to be called before a request is handled. |
| 471 | |
| 472 | Args: |
| 473 | middleware (Callable): A callable that takes in a request. |
| 474 | attach_to (str): Whether to attach to request or response. |
| 475 | Defaults to `'request'`. |
| 476 | priority (int): The priority level of the middleware. |
| 477 | Lower numbers are executed first. Defaults to `0`. |
| 478 | |
| 479 | Returns: |
| 480 | Union[Callable, Callable[[Callable], Callable]]: The decorated |
| 481 | middleware function or a partial function depending on how |
| 482 | the method was called. |
| 483 | """ |
| 484 | retval = middleware |
| 485 | location = MiddlewareLocation[attach_to.upper()] |
| 486 | |
| 487 | if not isinstance(middleware, Middleware): |
| 488 | middleware = Middleware( |
| 489 | middleware, |
| 490 | location=location, |
| 491 | priority=priority if isinstance(priority, int) else 0, |
| 492 | ) |
| 493 | elif middleware.priority != priority and isinstance(priority, int): |
| 494 | middleware = Middleware( |
| 495 | middleware.func, |
| 496 | location=middleware.location, |
| 497 | priority=priority, |
| 498 | ) |
| 499 | |
| 500 | if location is MiddlewareLocation.REQUEST: |
| 501 | if middleware not in self.request_middleware: |
| 502 | self.request_middleware.append(middleware) |
| 503 | if location is MiddlewareLocation.RESPONSE: |
| 504 | if middleware not in self.response_middleware: |
| 505 | self.response_middleware.appendleft(middleware) |
| 506 | return retval |
| 507 | |
| 508 | def register_named_middleware( |
| 509 | self, |