def send_exception(self, exception=None, exc_info=None, **kwargs): options = { 'transmitLocalVariables': self.transmit_local_variables, 'transmitGlobalVariables': self.transmit_global_variables } if exc_info is None: exc_info = sys.exc_info() exc_type, exc_value, exc_traceback = exc_info if exception is not None: errorMessage = raygunmsgs.RaygunErrorMessage( type(exception), exception, exception.__traceback__, options) else: errorMessage = raygunmsgs.RaygunErrorMessage( exc_type, exc_value, exc_traceback, options) tags, custom_data, http_request, extra_environment_data = self._parse_args( kwargs) message = self._create_message(errorMessage, tags, custom_data, http_request, extra_environment_data) message = self._transform_message(message) if message is not None: return self._post(message)
def test_it_raises_DeveloperException_on_incorrect_stack(self): # Try to mimic the original frame class objects, to try and spoof the system. (inspect.isframe() should return False) class frame(object): def __init__(self): pass incorrect_stack = inspect.stack() fake_frame_object = frame() klass = getattr(inspect, 'FrameInfo', tuple) if klass == tuple: fake_frame_info = klass([fake_frame_object, None, "", None]) else: fake_frame_info = klass(frame=fake_frame_object, filename='/tmp/specs/etc.py', lineno=666, function='<module>', code_context=None, index=None) incorrect_stack.append(fake_frame_info) with self.assertRaises(raygunmsgs.DeveloperException): raygunmsgs.RaygunErrorMessage(type(ValueError("")), ValueError(""), incorrect_stack, {'transmitLocalVariables': True}) with self.assertRaises(raygunmsgs.DeveloperException): raygunmsgs.RaygunErrorMessage(type(ValueError("")), ValueError(""), frame(), {'transmitLocalVariables': True})
def send_exception(self, exception=None, exc_info=None, **kwargs): options = { 'transmitLocalVariables': self.transmit_local_variables, 'transmitGlobalVariables': self.transmit_global_variables } if exc_info is None: exc_info = sys.exc_info() exc_type, exc_value, exc_traceback = exc_info if exception is not None: errorMessage = raygunmsgs.RaygunErrorMessage( type(exception), exception, exc_traceback, options) else: errorMessage = raygunmsgs.RaygunErrorMessage( exc_type, exc_value, exc_traceback, options) # Prevent circular reference for GC - https://docs.python.org/2/library/sys.html#sys.exc_info try: del exc_type, exc_value, exc_traceback except Exception as e: raise tags, custom_data, http_request, extra_environment_data = self._parse_args( kwargs) message = self._create_message(errorMessage, tags, custom_data, http_request, extra_environment_data) message = self._transform_message(message) if message is not None: return self._post(message)
def create_dummy_message(self): self.sender = raygunprovider.RaygunSender('apikey') msg = raygunmsgs.RaygunMessageBuilder({}).new() errorMessage = raygunmsgs.RaygunErrorMessage(Exception, None, None, {}) msg.set_exception_details(errorMessage) return msg.build()
def setUp(self): try: self.parent() except Exception as e: self.theException = e exc_info = sys.exc_info() self.msg = raygunmsgs.RaygunErrorMessage(exc_info[0], exc_info[1], exc_info[2])
def test_inspect_traceback_argument_failure(self): exception = ValueError("") fake_traceback = ["not real <frames>", "<frame fake>"] with self.assertRaises(raygunmsgs.DeveloperException): raygunmsgs.RaygunErrorMessage(type(exception), exception, fake_traceback, {'transmitLocalVariables': True})
def send_exception(self, exception, tags=None, userCustomData=None, httpRequest=None): rgExcept = raygunmsgs.RaygunErrorMessage(type(exception), exception, exception.__traceback__) return self._post( self._create_message(rgExcept, tags, userCustomData, httpRequest))
def setUp(self): try: self.parent() except Exception as e: self.theException = e exc_info = sys.exc_info() self.msg = raygunmsgs.RaygunErrorMessage( exc_info[0], exc_info[1], exc_info[2], {'transmitLocalVariables': True})
def test_methodname_none(self): original_getinnerframes = inspect.getinnerframes inspect.getinnerframes = getinnerframes_mock_methodname_none error_message = raygunmsgs.RaygunErrorMessage( int, 1, None, {"transmitLocalVariables": False}) self.assertEqual(error_message.__dict__['stackTrace'][0]['methodName'], None) inspect.getinnerframes = original_getinnerframes
def send(self, exc_type, exc_value, exc_traceback, className="Not provided", tags=None, userCustomData=None, httpRequest=None): rgExcept = raygunmsgs.RaygunErrorMessage(exc_type, exc_value, exc_traceback, className) return self._post( self._create_message(rgExcept, tags, userCustomData, httpRequest))
def setUp(self): i_must_be_included = 'and i am' try: self.parent() except Exception as e: self.theException = e exc_info = sys.exc_info() self.assertTrue(inspect.istraceback(exc_info[2])) self.msg = raygunmsgs.RaygunErrorMessage( exc_info[0], exc_info[1], exc_info[2], {'transmitLocalVariables': True})
def test_inspect_traceback_parameter(self): should_include_me_too = "i'm local" exception = ValueError("Hey there") msg = raygunmsgs.RaygunErrorMessage(type(exception), exception, inspect.stack(), {'transmitLocalVariables': True}) localVars = msg.__dict__['stackTrace'][0]['localVariables'] self.assertTrue('exception' in localVars) self.assertEqual(str(exception), localVars['exception']) self.assertTrue('should_include_me_too' in localVars) self.assertEqual(should_include_me_too, localVars['should_include_me_too'])
def test_exc_traceback_none_generates_empty_array(self): errorMessage = raygunmsgs.RaygunErrorMessage(int, 1, None, '') self.assertEqual(errorMessage.stackTrace, [])
def test_exc_traceback_none_generates_empty_array(self): error_message = raygunmsgs.RaygunErrorMessage(Exception, None, None, {}) self.assertEqual(error_message.stackTrace, [])