From 9825c25c805bc487feeeee47cda6a8efd5559fa4 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 12 Aug 2019 18:12:10 +0200 Subject: [PATCH 1/2] utils: move exception_to_text in conversion (#35380) --- passerelle/utils/conversion.py | 25 +++++++++++++++++++++++++ passerelle/utils/jsonresponse.py | 23 +---------------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/passerelle/utils/conversion.py b/passerelle/utils/conversion.py index ba2150fb..37c2e2fb 100644 --- a/passerelle/utils/conversion.py +++ b/passerelle/utils/conversion.py @@ -20,6 +20,8 @@ import unicodedata import warnings from StringIO import StringIO +from django.utils import six + import unidecode from PIL import Image @@ -67,3 +69,26 @@ def ensure_encoding(s, encoding): def to_ascii(s): return unidecode.unidecode(s).decode('ascii') + + +def exception_to_text(e): + try: + return six.text_type(e) + except Exception: + pass + + try: + r = repr(e) + return six.text_type(r, errors='replace') + except Exception: + pass + + try: + args = e.args + try: + content = six.text_type(repr(args)) if args != [] else '' + except Exception: + content = '' + except AttributeError: + content = '' + return u'%s(%s)' % (e.__class__.__name__, content) diff --git a/passerelle/utils/jsonresponse.py b/passerelle/utils/jsonresponse.py index 1d2fa17f..d7ec5bef 100644 --- a/passerelle/utils/jsonresponse.py +++ b/passerelle/utils/jsonresponse.py @@ -20,6 +20,7 @@ from django.utils import six from requests import RequestException, HTTPError from passerelle.utils import log_http_request +from passerelle.utils.conversion import exception_to_text DEFAULT_DEBUG = getattr(settings, 'JSONRESPONSE_DEFAULT_DEBUG', False) @@ -37,28 +38,6 @@ class APIError(RuntimeError): super(APIError, self).__init__(*args) -def exception_to_text(e): - try: - return six.text_type(e) - except Exception: - pass - - try: - return six.text_type(repr(e)) - except Exception: - pass - - try: - args = e.args - try: - content = six.text_type(repr(args)) if args != [] else '' - except Exception: - content = '' - except AttributeError: - content = '' - return u'%s(%s)' % (e.__class__.__name__, content) - - class JSONEncoder(DjangoJSONEncoder): def default(self, o): if isinstance(o, time.struct_time): -- 2.23.0.rc1