From f922e2bc425cf445521c713f7a3d9f1764a899c5 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Thu, 30 Aug 2018 20:33:53 +0200 Subject: [PATCH] serializer: transform: improve exception msg and fallback --- raven/utils/serializer/manager.py | 6 +++--- tests/utils/encoding/tests.py | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/raven/utils/serializer/manager.py b/raven/utils/serializer/manager.py index 7477c662b..e7b5f51bc 100644 --- a/raven/utils/serializer/manager.py +++ b/raven/utils/serializer/manager.py @@ -75,12 +75,12 @@ def transform(self, value, **kwargs): try: return repr(value) except Exception as e: - logger.exception(e) + logger.exception('Failed to serialize obj (%s): %s', objid, e) # It's common case that a model's __unicode__ definition # may try to query the database which if it was not # cleaned up correctly, would hit a transaction aborted - # exception - return text_type(type(value)) + # exception. + return '%s (%s)' % (text_type(type(value)), objid) finally: self.context.remove(objid) diff --git a/tests/utils/encoding/tests.py b/tests/utils/encoding/tests.py index 50c186a15..f1ef2f637 100644 --- a/tests/utils/encoding/tests.py +++ b/tests/utils/encoding/tests.py @@ -152,16 +152,19 @@ def __sentry__(self): expected = "u'example'" self.assertEqual(result, expected) - def test_broken_repr(self): + def test_broken_repr(self, caplog): class Foo(object): def __repr__(self): raise ValueError - result = transform(Foo()) - expected = "" + obj = Foo() + result = transform(obj) import sys if sys.version_info[0] == 3 and sys.version_info[1] >= 3: expected = ".Foo'>" + else: + expected = "" + expected += ' (%s)' % (id(obj),) assert result == expected def test_recursion_max_depth(self):