From ae59b2bc4b3ed2e267739dd0fdd67cd4e97575c7 Mon Sep 17 00:00:00 2001 From: geospatial-jeff Date: Tue, 2 Aug 2022 13:16:02 -0600 Subject: [PATCH 1/2] allow user to pass middleware options to stac api constructor, proxy add_middleware call --- stac_fastapi/api/stac_fastapi/api/app.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/stac_fastapi/api/stac_fastapi/api/app.py b/stac_fastapi/api/stac_fastapi/api/app.py index 0632a5bab..df2fa3f87 100644 --- a/stac_fastapi/api/stac_fastapi/api/app.py +++ b/stac_fastapi/api/stac_fastapi/api/app.py @@ -11,6 +11,7 @@ from stac_pydantic.api import ConformanceClasses, LandingPage from stac_pydantic.api.collections import Collections from stac_pydantic.version import STAC_VERSION +from starlette.middleware import Middleware from starlette.responses import JSONResponse, Response from stac_fastapi.api.errors import DEFAULT_STATUS_CODES, add_exception_handlers @@ -92,8 +93,10 @@ class StacApi: ) pagination_extension = attr.ib(default=TokenPaginationExtension) response_class: Type[Response] = attr.ib(default=JSONResponse) - middlewares: List = attr.ib( - default=attr.Factory(lambda: [BrotliMiddleware, ProxyHeaderMiddleware]) + middlewares: List[Middleware] = attr.ib( + default=attr.Factory( + lambda: [Middleware(BrotliMiddleware), Middleware(ProxyHeaderMiddleware)] + ) ) route_dependencies: List[Tuple[List[Scope], List[Depends]]] = attr.ib(default=[]) @@ -359,6 +362,11 @@ def add_route_dependencies( """ return add_route_dependencies(self.app.router.routes, scopes, dependencies) + def add_middleware(self, middleware: Middleware): + """Add a middleware class to the application.""" + self.app.user_middleware.insert(0, middleware) + self.app.middleware_stack = self.app.build_middleware_stack() + def __attrs_post_init__(self): """Post-init hook. @@ -403,7 +411,7 @@ def __attrs_post_init__(self): # add middlewares for middleware in self.middlewares: - self.app.add_middleware(middleware) + self.add_middleware(middleware) # customize route dependencies for scopes, dependencies in self.route_dependencies: From 900a7e31d5c6b81eb4db0bddf05012470e53ec7a Mon Sep 17 00:00:00 2001 From: jonhealy1 Date: Fri, 29 Mar 2024 16:15:38 +0800 Subject: [PATCH 2/2] update changelog --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 16bc9a809..43c8a78d5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Added + +* Add enhanced middleware configuration to the StacApi class, enabling specific middleware options and dynamic addition post-application initialization. ([#442](https://github.com/stac-utils/stac-fastapi/pull/442)) + ## [2.4.9] - 2023-11-17 ### Added