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'])
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'])
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"])
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'])
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'])
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'])
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'])
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"])
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"])
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'])
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'])
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'])
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'])
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)
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)
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)