Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions sentry_sdk/integrations/stdlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,9 @@ def getresponse(self, *args, **kwargs):
HTTPConnection.getresponse = getresponse


def _init_argument(args, kwargs, name, position, setdefault_callback=None):
def _init_argument(
args, kwargs, name, position, setdefault_callback=None, force_setdefault=False
):
"""
given (*args, **kwargs) of a function call, retrieve (and optionally set a
default for) an argument by either name or position.
Expand All @@ -123,11 +125,11 @@ def _init_argument(args, kwargs, name, position, setdefault_callback=None):

if name in kwargs:
rv = kwargs[name]
if rv is None and setdefault_callback is not None:
if (force_setdefault or rv is None) and setdefault_callback is not None:
rv = kwargs[name] = setdefault_callback()
elif position < len(args):
rv = args[position]
if rv is None and setdefault_callback is not None:
if (force_setdefault or rv is None) and setdefault_callback is not None:
rv = args[position] = setdefault_callback()
else:
rv = setdefault_callback and setdefault_callback()
Expand All @@ -145,11 +147,21 @@ def sentry_patched_popen_init(self, *a, **kw):
if hub.get_integration(StdlibIntegration) is None:
return old_popen_init(self, *a, **kw)

# a needs conversion from tuple to list in order to setdefault
a = list(a)

# do not setdefault! args is required by Popen, doing setdefault would
# make invalid calls valid
args = _init_argument(a, kw, "args", 0) or []
args = _init_argument(a, kw, "args", 0)
cwd = _init_argument(a, kw, "cwd", 10)

if args is None:
args = []
elif args is str:
args = [args]
else: # args could be iterator, reinsert as list via forced setdefault
args = _init_argument(a, kw, "args", 0, lambda: list(args), True)

env = None

for k, v in hub.iter_trace_propagation_headers():
Expand Down