|
12 | 12 | from stac_pydantic.api.collections import Collections
|
13 | 13 | from stac_pydantic.api.version import STAC_API_VERSION
|
14 | 14 | from stac_pydantic.shared import MimeTypes
|
| 15 | +from starlette.middleware import Middleware |
15 | 16 | from starlette.responses import JSONResponse, Response
|
16 | 17 |
|
17 | 18 | from stac_fastapi.api.errors import DEFAULT_STATUS_CODES, add_exception_handlers
|
@@ -109,9 +110,13 @@ class StacApi:
|
109 | 110 | )
|
110 | 111 | pagination_extension = attr.ib(default=TokenPaginationExtension)
|
111 | 112 | response_class: Type[Response] = attr.ib(default=JSONResponse)
|
112 |
| - middlewares: List = attr.ib( |
| 113 | + middlewares: List[Middleware] = attr.ib( |
113 | 114 | default=attr.Factory(
|
114 |
| - lambda: [BrotliMiddleware, CORSMiddleware, ProxyHeaderMiddleware] |
| 115 | + lambda: [ |
| 116 | + Middleware(BrotliMiddleware), |
| 117 | + Middleware(CORSMiddleware), |
| 118 | + Middleware(ProxyHeaderMiddleware), |
| 119 | + ] |
115 | 120 | )
|
116 | 121 | )
|
117 | 122 | route_dependencies: List[Tuple[List[Scope], List[Depends]]] = attr.ib(default=[])
|
@@ -434,6 +439,11 @@ def add_route_dependencies(
|
434 | 439 | """
|
435 | 440 | return add_route_dependencies(self.app.router.routes, scopes, dependencies)
|
436 | 441 |
|
| 442 | + def add_middleware(self, middleware: Middleware): |
| 443 | + """Add a middleware class to the application.""" |
| 444 | + self.app.user_middleware.insert(0, middleware) |
| 445 | + self.app.middleware_stack = self.app.build_middleware_stack() |
| 446 | + |
437 | 447 | def __attrs_post_init__(self):
|
438 | 448 | """Post-init hook.
|
439 | 449 |
|
@@ -478,7 +488,7 @@ def __attrs_post_init__(self):
|
478 | 488 |
|
479 | 489 | # add middlewares
|
480 | 490 | for middleware in self.middlewares:
|
481 |
| - self.app.add_middleware(middleware) |
| 491 | + self.add_middleware(middleware) |
482 | 492 |
|
483 | 493 | # customize route dependencies
|
484 | 494 | for scopes, dependencies in self.route_dependencies:
|
|
0 commit comments