Skip to content

Commit 50abe7d

Browse files
fix(ray): Keep variadic kwargs last in signatures
1 parent 86d326c commit 50abe7d

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

sentry_sdk/integrations/ray.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,26 @@ def _check_sentry_initialized() -> None:
3636
)
3737

3838

39+
def _insert_sentry_tracing_in_signature(func):
40+
# Patching new_func signature to add the _sentry_tracing parameter to it
41+
# Ray later inspects the signature and finds the unexpected parameter otherwise
42+
signature = inspect.signature(func)
43+
params = list(signature.parameters.values())
44+
sentry_tracing_param = inspect.Parameter(
45+
"_sentry_tracing",
46+
kind=inspect.Parameter.KEYWORD_ONLY,
47+
default=None,
48+
)
49+
50+
# Keyword only arguments are penultimate if function has variadic keyword arguments
51+
if params and params[-1].kind is inspect.Parameter.VAR_KEYWORD:
52+
params.insert(-1, sentry_tracing_param)
53+
else:
54+
params.append(sentry_tracing_param)
55+
56+
func.__signature__ = signature.replace(parameters=params) # type: ignore[attr-defined]
57+
58+
3959
def _patch_ray_remote() -> None:
4060
old_remote = ray.remote
4161

@@ -86,18 +106,7 @@ def new_func(
86106

87107
return result
88108

89-
# Patching new_func signature to add the _sentry_tracing parameter to it
90-
# Ray later inspects the signature and finds the unexpected parameter otherwise
91-
signature = inspect.signature(new_func)
92-
params = list(signature.parameters.values())
93-
params.append(
94-
inspect.Parameter(
95-
"_sentry_tracing",
96-
kind=inspect.Parameter.KEYWORD_ONLY,
97-
default=None,
98-
)
99-
)
100-
new_func.__signature__ = signature.replace(parameters=params) # type: ignore[attr-defined]
109+
_insert_sentry_tracing_in_signature(new_func)
101110

102111
if f:
103112
rv = old_remote(new_func)

tests/integrations/ray/test_ray.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ def test_tracing_in_ray_tasks(task_options):
8787
}
8888
)
8989

90-
def example_task():
90+
# RayIntegration must leave variadic keyword arguments at the end
91+
def example_task(**kwargs):
9192
with sentry_sdk.start_span(op="task", name="example task step"):
9293
...
9394

0 commit comments

Comments
 (0)