Skip to content

Commit 7deebf0

Browse files
authored
Fix FastAPI/Starlette middleware with positional arguments. (#4118)
Fixes #3246
1 parent 9e89c30 commit 7deebf0

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

sentry_sdk/integrations/starlette.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -362,13 +362,13 @@ def patch_middlewares():
362362

363363
if not_yet_patched:
364364

365-
def _sentry_middleware_init(self, cls, **options):
366-
# type: (Any, Any, Any) -> None
365+
def _sentry_middleware_init(self, cls, *args, **kwargs):
366+
# type: (Any, Any, Any, Any) -> None
367367
if cls == SentryAsgiMiddleware:
368-
return old_middleware_init(self, cls, **options)
368+
return old_middleware_init(self, cls, *args, **kwargs)
369369

370370
span_enabled_cls = _enable_span_for_middleware(cls)
371-
old_middleware_init(self, span_enabled_cls, **options)
371+
old_middleware_init(self, span_enabled_cls, *args, **kwargs)
372372

373373
if cls == AuthenticationMiddleware:
374374
patch_authentication_middleware(cls)

tests/integrations/starlette/test_starlette.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
from starlette.middleware.authentication import AuthenticationMiddleware
3232
from starlette.middleware.trustedhost import TrustedHostMiddleware
3333
from starlette.testclient import TestClient
34-
3534
from tests.integrations.conftest import parametrize_test_configurable_status_codes
3635

3736

@@ -238,6 +237,12 @@ async def do_stuff(message):
238237
await self.app(scope, receive, do_stuff)
239238

240239

240+
class SampleMiddlewareWithArgs(Middleware):
241+
def __init__(self, app, bla=None):
242+
self.app = app
243+
self.bla = bla
244+
245+
241246
class SampleReceiveSendMiddleware:
242247
def __init__(self, app):
243248
self.app = app
@@ -862,6 +867,22 @@ def test_middleware_partial_receive_send(sentry_init, capture_events):
862867
idx += 1
863868

864869

870+
@pytest.mark.skipif(
871+
STARLETTE_VERSION < (0, 35),
872+
reason="Positional args for middleware have been introduced in Starlette >= 0.35",
873+
)
874+
def test_middleware_positional_args(sentry_init):
875+
sentry_init(
876+
traces_sample_rate=1.0,
877+
integrations=[StarletteIntegration()],
878+
)
879+
_ = starlette_app_factory(middleware=[Middleware(SampleMiddlewareWithArgs, "bla")])
880+
881+
# Only creating the App with an Middleware with args
882+
# should not raise an error
883+
# So as long as test passes, we are good
884+
885+
865886
def test_legacy_setup(
866887
sentry_init,
867888
capture_events,

0 commit comments

Comments
 (0)