diff --git a/sentry_sdk/integrations/starlette.py b/sentry_sdk/integrations/starlette.py index 687a428203..deb05059d5 100644 --- a/sentry_sdk/integrations/starlette.py +++ b/sentry_sdk/integrations/starlette.py @@ -362,13 +362,13 @@ def patch_middlewares(): if not_yet_patched: - def _sentry_middleware_init(self, cls, **options): - # type: (Any, Any, Any) -> None + def _sentry_middleware_init(self, cls, *args, **kwargs): + # type: (Any, Any, Any, Any) -> None if cls == SentryAsgiMiddleware: - return old_middleware_init(self, cls, **options) + return old_middleware_init(self, cls, *args, **kwargs) span_enabled_cls = _enable_span_for_middleware(cls) - old_middleware_init(self, span_enabled_cls, **options) + old_middleware_init(self, span_enabled_cls, *args, **kwargs) if cls == AuthenticationMiddleware: patch_authentication_middleware(cls) diff --git a/tests/integrations/starlette/test_starlette.py b/tests/integrations/starlette/test_starlette.py index 93da0420aa..3289f69ed6 100644 --- a/tests/integrations/starlette/test_starlette.py +++ b/tests/integrations/starlette/test_starlette.py @@ -31,7 +31,6 @@ from starlette.middleware.authentication import AuthenticationMiddleware from starlette.middleware.trustedhost import TrustedHostMiddleware from starlette.testclient import TestClient - from tests.integrations.conftest import parametrize_test_configurable_status_codes @@ -238,6 +237,12 @@ async def do_stuff(message): await self.app(scope, receive, do_stuff) +class SampleMiddlewareWithArgs(Middleware): + def __init__(self, app, bla=None): + self.app = app + self.bla = bla + + class SampleReceiveSendMiddleware: def __init__(self, app): self.app = app @@ -862,6 +867,22 @@ def test_middleware_partial_receive_send(sentry_init, capture_events): idx += 1 +@pytest.mark.skipif( + STARLETTE_VERSION < (0, 35), + reason="Positional args for middleware have been introduced in Starlette >= 0.35", +) +def test_middleware_positional_args(sentry_init): + sentry_init( + traces_sample_rate=1.0, + integrations=[StarletteIntegration()], + ) + _ = starlette_app_factory(middleware=[Middleware(SampleMiddlewareWithArgs, "bla")]) + + # Only creating the App with an Middleware with args + # should not raise an error + # So as long as test passes, we are good + + def test_legacy_setup( sentry_init, capture_events,