From 9538434ea11c72ac44ced9e3ec18bbeed5e3b37d Mon Sep 17 00:00:00 2001 From: harryautomazione Date: Sun, 22 Mar 2026 17:26:33 +0100 Subject: [PATCH] fix(strawberry): Prevent AttributeError on missing graphql_span (#4991) --- sentry_sdk/integrations/strawberry.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/sentry_sdk/integrations/strawberry.py b/sentry_sdk/integrations/strawberry.py index a12ee63e2a..c8ae8bcfbb 100644 --- a/sentry_sdk/integrations/strawberry.py +++ b/sentry_sdk/integrations/strawberry.py @@ -202,7 +202,12 @@ def on_operation(self) -> "Generator[None, None, None]": self.graphql_span.__exit__(None, None, None) def on_validate(self) -> "Generator[None, None, None]": - self.validation_span = self.graphql_span.start_child( + graphql_span = getattr(self, "graphql_span", None) + if not graphql_span: + yield + return + + self.validation_span = graphql_span.start_child( op=OP.GRAPHQL_VALIDATE, name="validation", origin=StrawberryIntegration.origin, @@ -213,7 +218,12 @@ def on_validate(self) -> "Generator[None, None, None]": self.validation_span.finish() def on_parse(self) -> "Generator[None, None, None]": - self.parsing_span = self.graphql_span.start_child( + graphql_span = getattr(self, "graphql_span", None) + if not graphql_span: + yield + return + + self.parsing_span = graphql_span.start_child( op=OP.GRAPHQL_PARSE, name="parsing", origin=StrawberryIntegration.origin, @@ -256,9 +266,13 @@ async def resolve( if self.should_skip_tracing(_next, info): return await self._resolve(_next, root, info, *args, **kwargs) + graphql_span = getattr(self, "graphql_span", None) + if not graphql_span: + return await self._resolve(_next, root, info, *args, **kwargs) + field_path = "{}.{}".format(info.parent_type, info.field_name) - with self.graphql_span.start_child( + with graphql_span.start_child( op=OP.GRAPHQL_RESOLVE, name="resolving {}".format(field_path), origin=StrawberryIntegration.origin, @@ -283,9 +297,13 @@ def resolve( if self.should_skip_tracing(_next, info): return _next(root, info, *args, **kwargs) + graphql_span = getattr(self, "graphql_span", None) + if not graphql_span: + return _next(root, info, *args, **kwargs) + field_path = "{}.{}".format(info.parent_type, info.field_name) - with self.graphql_span.start_child( + with graphql_span.start_child( op=OP.GRAPHQL_RESOLVE, name="resolving {}".format(field_path), origin=StrawberryIntegration.origin,