Skip to content

Commit 1fd8bb6

Browse files
author
Johan Steffner
committed
Update event values order for exceptions
1 parent d5f675b commit 1fd8bb6

File tree

13 files changed

+34
-34
lines changed

13 files changed

+34
-34
lines changed

raven/base.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ def _iter_frames(self, data):
623623
for frame in data['stacktrace']['frames']:
624624
yield frame
625625
if 'exception' in data:
626-
for frame in data['exception']['values'][0]['stacktrace']['frames']:
626+
for frame in data['exception']['values'][-1]['stacktrace']['frames']:
627627
yield frame
628628

629629
def _successful_send(self):
@@ -655,9 +655,9 @@ def _log_failed_submission(self, data):
655655
"""
656656
message = data.pop('message', '<no message value>')
657657
output = [message]
658-
if 'exception' in data and 'stacktrace' in data['exception']['values'][0]:
658+
if 'exception' in data and 'stacktrace' in data['exception']['values'][-1]:
659659
# try to reconstruct a reasonable version of the exception
660-
for frame in data['exception']['values'][0]['stacktrace']['frames']:
660+
for frame in data['exception']['values'][-1]['stacktrace']['frames']:
661661
output.append(' File "%(fn)s", line %(lineno)s, in %(func)s' % {
662662
'fn': frame.get('filename', 'unknown_filename'),
663663
'lineno': frame.get('lineno', -1),

raven/events.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class Exception(BaseEvent):
7878
name = 'exception'
7979

8080
def to_string(self, data):
81-
exc = data[self.name]['values'][0]
81+
exc = data[self.name]['values'][-1]
8282
if exc['value']:
8383
return '%s: %s' % (exc['type'], exc['value'])
8484
return exc['type']
@@ -115,7 +115,7 @@ def capture(self, exc_info=None, **kwargs):
115115
values = []
116116
for exc_info in _chained_exceptions(exc_info):
117117
value = self._get_value(*exc_info)
118-
values.append(value)
118+
values.insert(0, value)
119119

120120
return {
121121
'level': kwargs.get('level', logging.ERROR),

tests/base/tests.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ def test_exception_event(self):
292292
event = self.client.events.pop(0)
293293
self.assertEquals(event['message'], 'ValueError: foo')
294294
self.assertTrue('exception' in event)
295-
exc = event['exception']['values'][0]
295+
exc = event['exception']['values'][-1]
296296
self.assertEquals(exc['type'], 'ValueError')
297297
self.assertEquals(exc['value'], 'foo')
298298
self.assertEquals(exc['module'], ValueError.__module__) # this differs in some Python versions
@@ -316,7 +316,7 @@ def test_exception_event_true_exc_info(self):
316316
event = self.client.events.pop(0)
317317
self.assertEquals(event['message'], 'ValueError: foo')
318318
self.assertTrue('exception' in event)
319-
exc = event['exception']['values'][0]
319+
exc = event['exception']['values'][-1]
320320
stacktrace = exc['stacktrace']
321321
self.assertEquals(len(stacktrace['frames']), 1)
322322
frame = stacktrace['frames'][0]
@@ -347,7 +347,7 @@ def test2():
347347
self.assertEquals(len(self.client.events), 1)
348348
event = self.client.events.pop(0)
349349
self.assertEquals(event['message'], 'DecoratorTestException')
350-
exc = event['exception']['values'][0]
350+
exc = event['exception']['values'][-1]
351351
self.assertEquals(exc['type'], 'DecoratorTestException')
352352
self.assertEquals(exc['module'], self.DecoratorTestException.__module__)
353353
stacktrace = exc['stacktrace']
@@ -382,7 +382,7 @@ def test4():
382382
self.assertEquals(len(self.client.events), 1)
383383
event = self.client.events.pop(0)
384384
self.assertEquals(event['message'], 'DecoratorTestException')
385-
exc = event['exception']['values'][0]
385+
exc = event['exception']['values'][-1]
386386
self.assertEquals(exc['type'], 'DecoratorTestException')
387387
self.assertEquals(exc['module'], self.DecoratorTestException.__module__)
388388
stacktrace = exc['stacktrace']
@@ -563,7 +563,7 @@ def test_marks_in_app_frames_for_exception(self):
563563
})
564564

565565
event = client.events.pop(0)
566-
frames = event['exception']['values'][0]['stacktrace']['frames']
566+
frames = event['exception']['values'][-1]['stacktrace']['frames']
567567
assert frames[0]['in_app']
568568
assert not frames[1]['in_app']
569569
assert not frames[2]['in_app']

tests/contrib/bottle/tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def test_error(self):
6666
event = self.raven.events.pop(0)
6767
assert 'exception' in event
6868

69-
exc = event['exception']['values'][0]
69+
exc = event['exception']['values'][-1]
7070
self.assertEquals(exc['type'], 'ValueError')
7171

7272
def test_captureException_captures_http(self):

tests/contrib/django/tests.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def test_signal_integration(self):
156156
assert len(self.raven.events) == 1
157157
event = self.raven.events.pop(0)
158158
assert 'exception' in event
159-
exc = event['exception']['values'][0]
159+
exc = event['exception']['values'][-1]
160160
assert exc['type'] == 'TypeError'
161161
assert exc['value'], "int() argument must be a string or a number == not 'NoneType'"
162162
assert event['level'] == logging.ERROR
@@ -169,7 +169,7 @@ def test_view_exception(self):
169169
assert len(self.raven.events) == 1
170170
event = self.raven.events.pop(0)
171171
assert 'exception' in event
172-
exc = event['exception']['values'][0]
172+
exc = event['exception']['values'][-1]
173173
assert exc['type'] == 'Exception'
174174
assert exc['value'] == 'view exception'
175175
assert event['level'] == logging.ERROR
@@ -260,7 +260,7 @@ def test_request_middleware_exception(self):
260260
event = self.raven.events.pop(0)
261261

262262
assert 'exception' in event
263-
exc = event['exception']['values'][0]
263+
exc = event['exception']['values'][-1]
264264
assert exc['type'] == 'ImportError'
265265
assert exc['value'] == 'request'
266266
assert event['level'] == logging.ERROR
@@ -276,7 +276,7 @@ def test_response_middlware_exception(self):
276276
event = self.raven.events.pop(0)
277277

278278
assert 'exception' in event
279-
exc = event['exception']['values'][0]
279+
exc = event['exception']['values'][-1]
280280
assert exc['type'] == 'ImportError'
281281
assert exc['value'] == 'response'
282282
assert event['level'] == logging.ERROR
@@ -293,7 +293,7 @@ def test_broken_500_handler_with_middleware(self):
293293
event = self.raven.events.pop(0)
294294

295295
assert 'exception' in event
296-
exc = event['exception']['values'][0]
296+
exc = event['exception']['values'][-1]
297297
assert exc['type'] == 'Exception'
298298
assert exc['value'] == 'view exception'
299299
assert event['level'] == logging.ERROR
@@ -302,7 +302,7 @@ def test_broken_500_handler_with_middleware(self):
302302
event = self.raven.events.pop(0)
303303

304304
assert 'exception' in event
305-
exc = event['exception']['values'][0]
305+
exc = event['exception']['values'][-1]
306306
assert exc['type'] == 'ValueError'
307307
assert exc['value'] == 'handler500'
308308
assert event['level'] == logging.ERROR
@@ -316,7 +316,7 @@ def test_view_middleware_exception(self):
316316
event = self.raven.events.pop(0)
317317

318318
assert 'exception' in event
319-
exc = event['exception']['values'][0]
319+
exc = event['exception']['values'][-1]
320320
assert exc['type'] == 'ImportError'
321321
assert exc['value'] == 'view'
322322
assert event['level'] == logging.ERROR
@@ -498,7 +498,7 @@ def test_marks_django_frames_correctly(self):
498498
assert len(self.raven.events) == 1
499499
event = self.raven.events.pop(0)
500500

501-
frames = event['exception']['values'][0]['stacktrace']['frames']
501+
frames = event['exception']['values'][-1]['stacktrace']['frames']
502502
for frame in frames:
503503
if frame['module'].startswith('django.'):
504504
assert frame.get('in_app') is False

tests/contrib/flask/tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def test_error_handler(self):
106106
event = self.raven.events.pop(0)
107107

108108
assert 'exception' in event
109-
exc = event['exception']['values'][0]
109+
exc = event['exception']['values'][-1]
110110
self.assertEquals(exc['type'], 'ValueError')
111111
self.assertEquals(exc['value'], 'hello world')
112112
self.assertEquals(event['level'], logging.ERROR)

tests/contrib/test_celery.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def dummy_task(x, y):
2626
dummy_task.delay(1, 0)
2727
assert len(self.client.events) == 1
2828
event = self.client.events[0]
29-
exception = event['exception']['values'][0]
29+
exception = event['exception']['values'][-1]
3030
assert event['culprit'] == 'dummy_task'
3131
assert exception['type'] == 'ZeroDivisionError'
3232

tests/contrib/webpy/tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def test_get(self):
5353

5454
event = self.store.events.pop()
5555
assert 'exception' in event
56-
exc = event['exception']['values'][0]
56+
exc = event['exception']['values'][-1]
5757
self.assertEquals(exc['type'], 'ValueError')
5858
self.assertEquals(exc['value'], 'That\'s what she said')
5959
self.assertEquals(event['message'], 'ValueError: That\'s what she said')

tests/events/tests.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def transform_expected(self, expected):
1818
else:
1919
# Otherwise, we only report the first element.
2020
def transform_expected(self, expected):
21-
return expected[:1]
21+
return expected[-1:]
2222

2323
def check_capture(self, expected):
2424
"""
@@ -51,7 +51,7 @@ def test_nested(self):
5151
try:
5252
raise KeyError()
5353
except Exception:
54-
self.check_capture(['KeyError', 'ValueError'])
54+
self.check_capture(['ValueError', 'KeyError'])
5555

5656
def test_raise_from(self):
5757
try:
@@ -60,7 +60,7 @@ def test_raise_from(self):
6060
try:
6161
six.raise_from(KeyError(), exc)
6262
except Exception:
63-
self.check_capture(['KeyError', 'ValueError'])
63+
self.check_capture(['ValueError', 'KeyError'])
6464

6565
def test_raise_from_different(self):
6666
try:
@@ -69,7 +69,7 @@ def test_raise_from_different(self):
6969
try:
7070
six.raise_from(KeyError(), TypeError())
7171
except Exception:
72-
self.check_capture(['KeyError', 'TypeError'])
72+
self.check_capture(['TypeError', 'KeyError'])
7373

7474
def test_handles_self_referencing(self):
7575
try:
@@ -93,7 +93,7 @@ def test_handles_self_referencing(self):
9393
try:
9494
six.raise_from(exc, exc2)
9595
except Exception:
96-
self.check_capture(['ValueError', 'KeyError'])
96+
self.check_capture(['KeyError', 'ValueError'])
9797
else:
9898
pytest.fail()
9999
else:

tests/handlers/logbook/tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def test_logger(self):
8181

8282
self.assertEquals(event['message'], 'This is a test info with an exception')
8383
assert 'exception' in event
84-
exc = event['exception']['values'][0]
84+
exc = event['exception']['values'][-1]
8585
self.assertEquals(exc['type'], 'ValueError')
8686
self.assertEquals(exc['value'], 'This is a test ValueError')
8787
self.assertTrue('sentry.interfaces.Message' in event)

tests/handlers/logging/tests.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def test_logger_exc_info(self):
134134

135135
self.assertEqual(event['message'], 'This is a test info with an exception')
136136
assert 'exception' in event
137-
exc = event['exception']['values'][0]
137+
exc = event['exception']['values'][-1]
138138
self.assertEqual(exc['type'], 'ValueError')
139139
self.assertEqual(exc['value'], 'This is a test ValueError')
140140
self.assertTrue('sentry.interfaces.Message' in event)

tests/middleware/tests.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def test_captures_error_in_iteration(self):
9393
event = self.client.events.pop(0)
9494

9595
assert 'exception' in event
96-
exc = event['exception']['values'][0]
96+
exc = event['exception']['values'][-1]
9797
self.assertEquals(exc['type'], 'ValueError')
9898
self.assertEquals(exc['value'], 'hello world')
9999
self.assertEquals(event['level'], logging.ERROR)
@@ -140,7 +140,7 @@ def test_systemexit_is_captured(self):
140140
event = self.client.events.pop(0)
141141

142142
assert 'exception' in event
143-
exc = event['exception']['values'][0]
143+
exc = event['exception']['values'][-1]
144144
self.assertEquals(exc['type'], 'SystemExit')
145145
self.assertEquals(exc['value'], '1')
146146
self.assertEquals(event['level'], logging.ERROR)
@@ -160,7 +160,7 @@ def test_keyboard_interrupt_is_captured(self):
160160
event = self.client.events.pop(0)
161161

162162
assert 'exception' in event
163-
exc = event['exception']['values'][0]
163+
exc = event['exception']['values'][-1]
164164
self.assertEquals(exc['type'], 'KeyboardInterrupt')
165165
self.assertEquals(exc['value'], '')
166166
self.assertEquals(event['level'], logging.ERROR)

tests/processors/tests.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,12 @@ def test_stacktrace(self, *args, **kwargs):
127127
proc = SanitizePasswordsProcessor(Mock())
128128
result = proc.process(data)
129129

130-
# data['exception']['values'][0]['stacktrace']['frames'][0]['vars']
130+
# data['exception']['values'][-1]['stacktrace']['frames'][0]['vars']
131131
self.assertTrue('exception' in result)
132132
exception = result['exception']
133133
self.assertTrue('values' in exception)
134134
values = exception['values']
135-
stack = values[0]['stacktrace']
135+
stack = values[-1]['stacktrace']
136136
self.assertTrue('frames' in stack)
137137

138138
self.assertEquals(len(stack['frames']), 2)

0 commit comments

Comments
 (0)