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)
Exemple #2
0
    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()
Exemple #5
0
    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])
Exemple #6
0
    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})
Exemple #7
0
    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))
Exemple #8
0
    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})
Exemple #9
0
    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
Exemple #10
0
 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))
Exemple #11
0
    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})
Exemple #12
0
    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'])
Exemple #13
0
 def test_exc_traceback_none_generates_empty_array(self):
     errorMessage = raygunmsgs.RaygunErrorMessage(int, 1, None, '')
     self.assertEqual(errorMessage.stackTrace, [])
Exemple #14
0
 def test_exc_traceback_none_generates_empty_array(self):
     error_message = raygunmsgs.RaygunErrorMessage(Exception, None, None,
                                                   {})
     self.assertEqual(error_message.stackTrace, [])