Пример #1
0
        def wrapped(self, context, *args, **kw):
            # Don't store self or context in the payload, it now seems to
            # contain confidential information.
            try:
                return f(self, context, *args, **kw)
            except Exception as e:
                with excutils.save_and_reraise_exception():
                    if notifier:
                        payload = dict(exception=e)
                        call_dict = safe_utils.getcallargs(f, *args, **kw)
                        cleansed = _cleanse_dict(call_dict)
                        payload.update({'args': cleansed})

                        # Use a temp vars so we don't shadow
                        # our outer definitions.
                        temp_level = level
                        if not temp_level:
                            temp_level = notifier.ERROR

                        temp_type = event_type
                        if not temp_type:
                            # If f has multiple decorators, they must use
                            # functools.wraps to ensure the name is
                            # propagated.
                            temp_type = f.__name__

                        notifier.notify(context, publisher_id, temp_type,
                                        temp_level, payload)
Пример #2
0
        def wrapped(self, context, *args, **kw):
            # Don't store self or context in the payload, it now seems to
            # contain confidential information.
            try:
                return f(self, context, *args, **kw)
            except Exception as e:
                with excutils.save_and_reraise_exception():
                    if notifier:
                        payload = dict(exception=e)
                        call_dict = safe_utils.getcallargs(f, *args, **kw)
                        cleansed = _cleanse_dict(call_dict)
                        payload.update({'args': cleansed})

                        # Use a temp vars so we don't shadow
                        # our outer definitions.
                        temp_level = level
                        if not temp_level:
                            temp_level = notifier.ERROR

                        temp_type = event_type
                        if not temp_type:
                            # If f has multiple decorators, they must use
                            # functools.wraps to ensure the name is
                            # propagated.
                            temp_type = f.__name__

                        notifier.notify(context, publisher_id, temp_type,
                                        temp_level, payload)
    def test_no_named_args(self):
        def _fake(*args, **kwargs):
            pass

        # This is not captured by getcallargs
        args = (3, )
        kwargs = {'instance': {'uuid': 1}}
        callargs = safe_utils.getcallargs(_fake, *args, **kwargs)
        self.assertEqual(1, len(callargs))
        self.assertIn('instance', callargs)
        self.assertEqual({'uuid': 1}, callargs['instance'])
Пример #4
0
 def test_partial_mixed_args(self):
     args = (self, 3)
     kwargs = {'instance': {'uuid': 1}}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     self.assertEqual(4, len(callargs))
     self.assertIn('instance', callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertIn('red', callargs)
     self.assertEqual(3, callargs['red'])
     self.assertIn('blue', callargs)
     self.assertIsNone(callargs['blue'])
Пример #5
0
 def test_partial_mixed_args(self):
     args = (3,)
     kwargs = {"instance": {"uuid": 1}}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     self.assertEqual(4, len(callargs))
     self.assertIn("instance", callargs)
     self.assertEqual({"uuid": 1}, callargs["instance"])
     self.assertIn("red", callargs)
     self.assertEqual(3, callargs["red"])
     self.assertIn("blue", callargs)
     self.assertIsNone(callargs["blue"])
Пример #6
0
    def test_no_named_args(self):
        def _fake(*args, **kwargs):
            pass

        # This is not captured by getcallargs
        args = (3,)
        kwargs = {'instance': {'uuid': 1}}
        callargs = safe_utils.getcallargs(_fake, *args, **kwargs)
        self.assertEqual(1, len(callargs))
        self.assertIn('instance', callargs)
        self.assertEqual({'uuid': 1}, callargs['instance'])
Пример #7
0
 def test_partial_mixed_args(self):
     args = (3, )
     kwargs = {'instance': {'uuid': 1}}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     self.assertEqual(4, len(callargs))
     self.assertIn('instance', callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertIn('red', callargs)
     self.assertEqual(3, callargs['red'])
     self.assertIn('blue', callargs)
     self.assertIsNone(callargs['blue'])
Пример #8
0
 def test_partial_args(self):
     args = (self, {'uuid': 1}, 3)
     kwargs = {}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     # implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertIn('instance', callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertIn('red', callargs)
     self.assertEqual(3, callargs['red'])
     self.assertIn('blue', callargs)
     self.assertIsNone(callargs['blue'])
Пример #9
0
 def test_partial_kwargs(self):
     args = ()
     kwargs = {'instance': {'uuid': 1}, 'red': 3}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     #implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertTrue('instance' in callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertTrue('red' in callargs)
     self.assertEqual(3, callargs['red'])
     self.assertTrue('blue' in callargs)
     self.assertEqual(None, callargs['blue'])
Пример #10
0
 def test_partial_args(self):
     args = ({"uuid": 1}, 3)
     kwargs = {}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     # implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertIn("instance", callargs)
     self.assertEqual({"uuid": 1}, callargs["instance"])
     self.assertIn("red", callargs)
     self.assertEqual(3, callargs["red"])
     self.assertIn("blue", callargs)
     self.assertIsNone(callargs["blue"])
Пример #11
0
 def test_all_kwargs(self):
     args = ()
     kwargs = {"instance": {"uuid": 1}, "red": 3, "blue": 4}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     # implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertIn("instance", callargs)
     self.assertEqual({"uuid": 1}, callargs["instance"])
     self.assertIn("red", callargs)
     self.assertEqual(3, callargs["red"])
     self.assertIn("blue", callargs)
     self.assertEqual(4, callargs["blue"])
Пример #12
0
 def test_mixed_args(self):
     args = ({'uuid': 1}, 3)
     kwargs = {'blue': 4}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     #implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertTrue('instance' in callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertTrue('red' in callargs)
     self.assertEqual(3, callargs['red'])
     self.assertTrue('blue' in callargs)
     self.assertEqual(4, callargs['blue'])
Пример #13
0
 def test_all_kwargs(self):
     args = (self,)
     kwargs = {'instance': {'uuid': 1}, 'red': 3, 'blue': 4}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     # implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertIn('instance', callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertIn('red', callargs)
     self.assertEqual(3, callargs['red'])
     self.assertIn('blue', callargs)
     self.assertEqual(4, callargs['blue'])
Пример #14
0
 def test_partial_args(self):
     args = ({'uuid': 1}, 3)
     kwargs = {}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     #implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertIn('instance', callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertIn('red', callargs)
     self.assertEqual(3, callargs['red'])
     self.assertIn('blue', callargs)
     self.assertIsNone(callargs['blue'])
Пример #15
0
 def test_all_kwargs(self):
     args = ()
     kwargs = {'instance': {'uuid': 1}, 'red': 3, 'blue': 4}
     callargs = safe_utils.getcallargs(self._test_func, *args, **kwargs)
     #implicit self counts as an arg
     self.assertEqual(4, len(callargs))
     self.assertIn('instance', callargs)
     self.assertEqual({'uuid': 1}, callargs['instance'])
     self.assertIn('red', callargs)
     self.assertEqual(3, callargs['red'])
     self.assertIn('blue', callargs)
     self.assertEqual(4, callargs['blue'])
Пример #16
0
        def wrapped(self, context, *args, **kw):
            # Don't store self or context in the payload, it now seems to
            # contain confidential information.
            try:
                return f(self, context, *args, **kw)
            except Exception as e:
                with excutils.save_and_reraise_exception():
                    payload = dict(exception=e)
                    call_dict = safe_utils.getcallargs(f, *args, **kw)
                    cleansed = _cleanse_dict(call_dict)
                    payload.update({'args': cleansed})

                    level = notifier.ERROR
                    event_type = f.__name__

                    notifier.notify(context, publisher_id,
                                    event_type, level, payload)
Пример #17
0
        def wrapped(self, context, *args, **kw):
            # Don't store self or context in the payload, it now seems to
            # contain confidential information.
            try:
                return f(self, context, *args, **kw)
            except Exception as e:
                with excutils.save_and_reraise_exception():
                    payload = dict(exception=e)
                    call_dict = safe_utils.getcallargs(f, *args, **kw)
                    cleansed = _cleanse_dict(call_dict)
                    payload.update({'args': cleansed})

                    level = notifier.ERROR
                    event_type = f.__name__

                    notifier.notify(context, publisher_id, event_type, level,
                                    payload)
Пример #18
0
        def wrapped(self, context, *args, **kw):
            # Don't store self or context in the payload, it now seems to
            # contain confidential information.
            try:
                return f(self, context, *args, **kw)
            except Exception as e:
                with excutils.save_and_reraise_exception():
                    if notifier or get_notifier:
                        payload = dict(exception=e)
                        call_dict = safe_utils.getcallargs(f, context, *args, **kw)
                        cleansed = _cleanse_dict(call_dict)
                        payload.update({"args": cleansed})

                        # If f has multiple decorators, they must use
                        # functools.wraps to ensure the name is
                        # propagated.
                        event_type = f.__name__

                        (notifier or get_notifier()).error(context, event_type, payload)
Пример #19
0
        def wrapped(self, context, *args, **kw):
            # Don't store self or context in the payload, it now seems to
            # contain confidential information.
            try:
                return f(self, context, *args, **kw)
            except Exception as e:
                with excutils.save_and_reraise_exception():
                    if notifier or get_notifier:
                        payload = dict(exception=e)
                        call_dict = safe_utils.getcallargs(f, *args, **kw)
                        cleansed = _cleanse_dict(call_dict)
                        payload.update({'args': cleansed})

                        # If f has multiple decorators, they must use
                        # functools.wraps to ensure the name is
                        # propagated.
                        event_type = f.__name__

                        (notifier
                         or get_notifier()).error(context, event_type, payload)