Merge lp:~lifeless/python-oops-tools/bug-888866 into lp:python-oops-tools

Proposed by Robert Collins
Status: Merged
Approved by: Robert Collins
Approved revision: 14
Merged at revision: 14
Proposed branch: lp:~lifeless/python-oops-tools/bug-888866
Merge into: lp:python-oops-tools
Diff against target: 69 lines (+30/-10)
3 files modified
src/oopstools/NEWS.txt (+3/-0)
src/oopstools/oops/models.py (+18/-10)
src/oopstools/oops/test/test_dboopsloader.py (+9/-0)
To merge this branch: bzr merge lp:~lifeless/python-oops-tools/bug-888866
Reviewer Review Type Date Requested Status
Ian Booth (community) code Approve
Review via email: mp+81933@code.launchpad.net

Commit message

Accept req_vars as dicts.

Description of the change

First step in moving req_vars to be dicts. See the linked bug for more details.

To post a comment you must log in.
Revision history for this message
Ian Booth (wallyworld) wrote :

Looks good.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/oopstools/NEWS.txt'
--- src/oopstools/NEWS.txt 2011-11-11 03:30:19 +0000
+++ src/oopstools/NEWS.txt 2011-11-11 04:10:27 +0000
@@ -15,6 +15,9 @@
15 a bit better.15 a bit better.
16 (Robert Collins, William Grant, Roman Yepishev, #885416, #884265)16 (Robert Collins, William Grant, Roman Yepishev, #885416, #884265)
1717
18* The req_vars variable in OOPS reports may now be a dict.
19 (Robert Collins, #888866)
20
180.6.1210.6.1
19=====22=====
2023
2124
=== modified file 'src/oopstools/oops/models.py'
--- src/oopstools/oops/models.py 2011-11-11 03:29:19 +0000
+++ src/oopstools/oops/models.py 2011-11-11 04:10:27 +0000
@@ -305,16 +305,24 @@
305 is_local_referrer = False)305 is_local_referrer = False)
306 # Grab data needed by the Oops database model from the req_vars.306 # Grab data needed by the Oops database model from the req_vars.
307 req_vars = oops.get('req_vars') or ()307 req_vars = oops.get('req_vars') or ()
308 # Some badly written OOPSes have single item tuples. (field.blob was seen).308 # Some badly written OOPSes are tuples with single item tuples. (field.blob
309 def ensure_tuple(iterable):309 # was seen).
310 for item in iterable:310 # New ones are dicts.
311 try:311 def ensure_dict(iterable_or_dict):
312 key, value = item312 try:
313 except ValueError:313 items = iterable_or_dict.items()
314 key = item[0]314 return iterable_or_dict
315 value = ''315 except AttributeError:
316 yield key, value316 result = {}
317 for key, value in ensure_tuple(req_vars):317 for item in iterable_or_dict:
318 try:
319 key, value = item
320 except ValueError:
321 key = item[0]
322 value = ''
323 result[key] = value
324 return result
325 for key, value in ensure_dict(req_vars).items():
318 if isinstance(value, str):326 if isinstance(value, str):
319 try:327 try:
320 # We can get anything in HTTP headers328 # We can get anything in HTTP headers
321329
=== modified file 'src/oopstools/oops/test/test_dboopsloader.py'
--- src/oopstools/oops/test/test_dboopsloader.py 2011-11-11 03:29:19 +0000
+++ src/oopstools/oops/test/test_dboopsloader.py 2011-11-11 04:10:27 +0000
@@ -177,3 +177,12 @@
177 # to be loaded - we need to tolerate some bad data.177 # to be loaded - we need to tolerate some bad data.
178 report = {'req_vars': [('foo',)], 'id': 'bug-885416'}178 report = {'req_vars': [('foo',)], 'id': 'bug-885416'}
179 oops = parsed_oops_to_model_oops(report, 'test-bug-885416')179 oops = parsed_oops_to_model_oops(report, 'test-bug-885416')
180
181 def test_dict_reqvars_bug_888866(self):
182 # If req_vars is a dict, it still processes stuff.
183 report = {
184 'id': 'bug-888866',
185 'req_vars': {'HTTP_USER_AGENT': 'myuseragent'}
186 }
187 oops = parsed_oops_to_model_oops(report, 'bug-888866')
188 self.assertEqual('myuseragent', oops.user_agent)

Subscribers

People subscribed via source and target branches

to all changes: