Skip to content

Commit 2531778

Browse files
authored
Secrets: Improve to maintain query param order across Python versions (#110)
* Improve secrets parsing to maintain kv order across py versions * Use nose.main()
1 parent b62d75d commit 2531778

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

instana/util.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
try:
1313
from urllib import parse
1414
except ImportError:
15-
from urlparse import urlparse as parse
15+
import urlparse as parse
16+
import urllib
17+
1618
from .log import logger
1719

1820

@@ -123,38 +125,42 @@ def strip_secrets(qp, matcher, kwlist):
123125
else:
124126
query = qp
125127

126-
params = parse.parse_qs(query, keep_blank_values=True)
128+
params = parse.parse_qsl(query, keep_blank_values=True)
127129
redacted = ['<redacted>']
128130

129131
if matcher == 'equals-ignore-case':
130132
for keyword in kwlist:
131-
for key in params.keys():
132-
if key.lower() == keyword.lower():
133-
params[key] = redacted
133+
for index, kv in enumerate(params):
134+
if kv[0].lower() == keyword.lower():
135+
params[index] = (kv[0], redacted)
134136
elif matcher == 'equals':
135137
for keyword in kwlist:
136-
if keyword in params:
137-
params[keyword] = redacted
138+
for index, kv in enumerate(params):
139+
if kv[0] == keyword:
140+
params[index] = (kv[0], redacted)
138141
elif matcher == 'contains-ignore-case':
139142
for keyword in kwlist:
140-
for key in params.keys():
141-
if keyword.lower() in key.lower():
142-
params[key] = redacted
143+
for index, kv in enumerate(params):
144+
if keyword.lower() in kv[0].lower():
145+
params[index] = (kv[0], redacted)
143146
elif matcher == 'contains':
144147
for keyword in kwlist:
145-
for key in params.keys():
146-
if keyword in key:
147-
params[key] = redacted
148+
for index, kv in enumerate(params):
149+
if keyword in kv[0]:
150+
params[index] = (kv[0], redacted)
148151
elif matcher == 'regex':
149152
for regexp in kwlist:
150-
for key in params.keys():
151-
if re.match(regexp, key):
152-
params[key] = redacted
153+
for index, kv in enumerate(params):
154+
if re.match(regexp, kv[0]):
155+
params[index] = (kv[0], redacted)
153156
else:
154157
logger.debug("strip_secrets: unknown matcher")
155158
return qp
156159

157-
result = parse.urlencode(params, doseq=True)
160+
if sys.version_info < (3, 0):
161+
result = urllib.urlencode(params, doseq=True)
162+
else:
163+
result = parse.urlencode(params, doseq=True)
158164
query = parse.unquote(result)
159165

160166
if path:

runtests.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22
import nose
33
from distutils.version import LooseVersion
44

5-
command_line = ['-v']
5+
command_line = [__file__, '--verbose']
66

77
if (LooseVersion(sys.version) < LooseVersion('3.5')):
88
command_line.extend(['-e', 'asynqp'])
99

1010
print("Nose arguments: %s" % command_line)
11-
result = nose.run(argv=command_line)
11+
result = nose.main(argv=command_line)
1212

13-
if result is True:
14-
exit(0)
15-
else:
16-
exit(-1)
13+
exit(result)

0 commit comments

Comments
 (0)