@@ -111,17 +111,28 @@ def getresponse(self, *args, **kwargs):
111111 HTTPConnection .getresponse = getresponse
112112
113113
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+
115124 if name in kwargs :
116125 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 ()
119128 elif position < len (args ):
120129 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 ()
123132 else :
124- rv = kwargs [name ] = setdefault
133+ rv = setdefault_callback and setdefault_callback ()
134+ if rv is not None :
135+ kwargs [name ] = rv
125136
126137 return rv
127138
@@ -136,11 +147,14 @@ def sentry_patched_popen_init(self, *a, **kw):
136147
137148 # do not setdefault! args is required by Popen, doing setdefault would
138149 # 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
141154
142155 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 ))
144158 env ["SUBPROCESS_" + k .upper ().replace ("-" , "_" )] = v
145159
146160 with hub .span (op = "subprocess" , description = " " .join (map (str , args ))) as span :
0 commit comments