@@ -111,17 +111,28 @@ def getresponse(self, *args, **kwargs):
111
111
HTTPConnection .getresponse = getresponse
112
112
113
113
114
- def _get_argument (args , kwargs , name , position , setdefault = None ):
114
+ def _init_argument (args , kwargs , name , position , setdefault_callback = None ):
115
+ """
116
+ given (*args, **kwargs) of a function call, retrieve (and optionally set a
117
+ default for) an argument by either name or position.
118
+
119
+ This is useful for wrapping functions with complex type signatures and
120
+ extracting a few arguments without needing to redefine that function's
121
+ entire type signature.
122
+ """
123
+
115
124
if name in kwargs :
116
125
rv = kwargs [name ]
117
- if rv is None and setdefault is not None :
118
- rv = kwargs [name ] = setdefault
126
+ if rv is None and setdefault_callback is not None :
127
+ rv = kwargs [name ] = setdefault_callback ()
119
128
elif position < len (args ):
120
129
rv = args [position ]
121
- if rv is None and setdefault is not None :
122
- rv = args [position ] = setdefault
130
+ if rv is None and setdefault_callback is not None :
131
+ rv = args [position ] = setdefault_callback ()
123
132
else :
124
- rv = kwargs [name ] = setdefault
133
+ rv = setdefault_callback and setdefault_callback ()
134
+ if rv is not None :
135
+ kwargs [name ] = rv
125
136
126
137
return rv
127
138
@@ -136,11 +147,14 @@ def sentry_patched_popen_init(self, *a, **kw):
136
147
137
148
# do not setdefault! args is required by Popen, doing setdefault would
138
149
# make invalid calls valid
139
- args = _get_argument (a , kw , "args" , 0 ) or []
140
- cwd = _get_argument (a , kw , "cwd" , 10 )
150
+ args = _init_argument (a , kw , "args" , 0 ) or []
151
+ cwd = _init_argument (a , kw , "cwd" , 10 )
152
+
153
+ env = None
141
154
142
155
for k , v in hub .iter_trace_propagation_headers ():
143
- env = _get_argument (a , kw , "env" , 11 , {})
156
+ if env is None :
157
+ env = _init_argument (a , kw , "env" , 11 , lambda : dict (os .environ ))
144
158
env ["SUBPROCESS_" + k .upper ().replace ("-" , "_" )] = v
145
159
146
160
with hub .span (op = "subprocess" , description = " " .join (map (str , args ))) as span :
0 commit comments