Skip to content

Commit

Permalink
Merge pull request #38 from asnyatkov/master
Browse files Browse the repository at this point in the history
exception_level_filters: support string for filtered class name
  • Loading branch information
coryvirok committed Dec 9, 2014
2 parents b681187 + e1266af commit fbba9f1
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 2 deletions.
17 changes: 15 additions & 2 deletions rollbar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,10 +401,23 @@ def prev_page(self):

## internal functions

def _resolve_exception_class(idx, filter):
cls, level = filter
if isinstance(cls, str):
# Lazily resolve class name
parts = cls.split('.')
module = ".".join(parts[:-1])
if module in sys.modules and hasattr(sys.modules[module], parts[-1]):
cls = getattr(sys.modules[module], parts[-1])
SETTINGS['exception_level_filters'][idx] = (cls, level)
else:
cls = None
return cls, level

def _filtered_level(exception):
for cls, level in SETTINGS['exception_level_filters']:
if isinstance(exception, cls):
for i, filter in enumerate(SETTINGS['exception_level_filters']):
cls, level = _resolve_exception_class(i, filter)
if cls and isinstance(exception, cls):
return level

return None
Expand Down
41 changes: 41 additions & 0 deletions rollbar/test/test_rollbar.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import copy
import mock
import unittest
import urllib

import rollbar
Expand Down Expand Up @@ -114,6 +115,43 @@ def _raise():
self.assertNotIn('args', payload['data']['body']['trace']['frames'][-1])
self.assertNotIn('kwargs', payload['data']['body']['trace']['frames'][-1])

@mock.patch('rollbar.send_payload')
def test_exception_filters(self, send_payload):

rollbar.SETTINGS['exception_level_filters'] = [
(OSError, 'ignored'),
('rollbar.ApiException', 'ignored'),
('bogus.DoesntExist', 'ignored'),
]

def _raise_exception():
try:
raise Exception('foo')
except:
rollbar.report_exc_info()

def _raise_os_error():
try:
raise OSError('bar')
except:
rollbar.report_exc_info()

def _raise_api_exception():
try:
raise rollbar.ApiException('bar')
except:
rollbar.report_exc_info()

_raise_exception()
self.assertTrue(send_payload.called)

_raise_os_error()
self.assertEqual(1, send_payload.call_count)

_raise_api_exception()
self.assertEqual(1, send_payload.call_count)


@mock.patch('rollbar.send_payload')
def test_report_messsage(self, send_payload):
rollbar.report_message('foo')
Expand Down Expand Up @@ -714,3 +752,6 @@ def step2():
def called_with(arg1):
arg1 = 'changed'
step1()

if __name__ == '__main__':
unittest.main()

0 comments on commit fbba9f1

Please sign in to comment.