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
1=== modified file 'src/oopstools/NEWS.txt'
2--- src/oopstools/NEWS.txt 2011-11-11 03:30:19 +0000
3+++ src/oopstools/NEWS.txt 2011-11-11 04:10:27 +0000
4@@ -15,6 +15,9 @@
5 a bit better.
6 (Robert Collins, William Grant, Roman Yepishev, #885416, #884265)
7
8+* The req_vars variable in OOPS reports may now be a dict.
9+ (Robert Collins, #888866)
10+
11 0.6.1
12 =====
13
14
15=== modified file 'src/oopstools/oops/models.py'
16--- src/oopstools/oops/models.py 2011-11-11 03:29:19 +0000
17+++ src/oopstools/oops/models.py 2011-11-11 04:10:27 +0000
18@@ -305,16 +305,24 @@
19 is_local_referrer = False)
20 # Grab data needed by the Oops database model from the req_vars.
21 req_vars = oops.get('req_vars') or ()
22- # Some badly written OOPSes have single item tuples. (field.blob was seen).
23- def ensure_tuple(iterable):
24- for item in iterable:
25- try:
26- key, value = item
27- except ValueError:
28- key = item[0]
29- value = ''
30- yield key, value
31- for key, value in ensure_tuple(req_vars):
32+ # Some badly written OOPSes are tuples with single item tuples. (field.blob
33+ # was seen).
34+ # New ones are dicts.
35+ def ensure_dict(iterable_or_dict):
36+ try:
37+ items = iterable_or_dict.items()
38+ return iterable_or_dict
39+ except AttributeError:
40+ result = {}
41+ for item in iterable_or_dict:
42+ try:
43+ key, value = item
44+ except ValueError:
45+ key = item[0]
46+ value = ''
47+ result[key] = value
48+ return result
49+ for key, value in ensure_dict(req_vars).items():
50 if isinstance(value, str):
51 try:
52 # We can get anything in HTTP headers
53
54=== modified file 'src/oopstools/oops/test/test_dboopsloader.py'
55--- src/oopstools/oops/test/test_dboopsloader.py 2011-11-11 03:29:19 +0000
56+++ src/oopstools/oops/test/test_dboopsloader.py 2011-11-11 04:10:27 +0000
57@@ -177,3 +177,12 @@
58 # to be loaded - we need to tolerate some bad data.
59 report = {'req_vars': [('foo',)], 'id': 'bug-885416'}
60 oops = parsed_oops_to_model_oops(report, 'test-bug-885416')
61+
62+ def test_dict_reqvars_bug_888866(self):
63+ # If req_vars is a dict, it still processes stuff.
64+ report = {
65+ 'id': 'bug-888866',
66+ 'req_vars': {'HTTP_USER_AGENT': 'myuseragent'}
67+ }
68+ oops = parsed_oops_to_model_oops(report, 'bug-888866')
69+ self.assertEqual('myuseragent', oops.user_agent)

Subscribers

People subscribed via source and target branches

to all changes: