| 61 | self.middleware_stack: ASGIApp | None = None |
| 62 | |
| 63 | def build_middleware_stack(self) -> ASGIApp: |
| 64 | debug = self.debug |
| 65 | error_handler = None |
| 66 | exception_handlers: dict[Any, ExceptionHandler] = {} |
| 67 | |
| 68 | for key, value in self.exception_handlers.items(): |
| 69 | if key in (500, Exception): |
| 70 | error_handler = value |
| 71 | else: |
| 72 | exception_handlers[key] = value |
| 73 | |
| 74 | middleware = [Middleware(ServerErrorMiddleware, handler=error_handler, debug=debug)] |
| 75 | if self.max_body_size is not None: |
| 76 | middleware.append(Middleware(RequestBodyLimitMiddleware, max_body_size=self.max_body_size)) |
| 77 | middleware += self.user_middleware |
| 78 | middleware.append(Middleware(ExceptionMiddleware, handlers=exception_handlers, debug=debug)) |
| 79 | |
| 80 | app = self.router |
| 81 | for cls, args, kwargs in reversed(middleware): |
| 82 | app = cls(app, *args, **kwargs) |
| 83 | return app |
| 84 | |
| 85 | @property |
| 86 | def routes(self) -> list[BaseRoute]: |