@@ -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+
3959def _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 )
0 commit comments