From 00b30fe96f374283d537744c2b9dbf2babd8673c Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 9 Jul 2019 17:32:11 +0200 Subject: [PATCH] tenant_command: convert exception to UTF-8 (#30559) --- .../management/commands/tenant_command.py | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/hobo/multitenant/management/commands/tenant_command.py b/hobo/multitenant/management/commands/tenant_command.py index 954568d..2edec56 100644 --- a/hobo/multitenant/management/commands/tenant_command.py +++ b/hobo/multitenant/management/commands/tenant_command.py @@ -9,16 +9,39 @@ import argparse import sys import django +from django.utils import six +from django.utils.encoding import force_text, force_bytes from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.core.management.base import (BaseCommand, CommandError, - SystemCheckError, handle_default_options) + SystemCheckError, + handle_default_options) from django.core.management import call_command, get_commands, load_command_class from django.db import connection, connections from hobo.multitenant.management.commands import InteractiveTenantOption from hobo.multitenant.middleware import TenantMiddleware + +def exception_to_text(e): + try: + return six.text_type(e) + except Exception: + pass + + try: + return force_text(str(e), errors='ignore') + except Exception: + pass + + try: + return force_text(repr(e), errors='ignore') + except Exception: + pass + + return six.text_type('Unrepresentable exception %s' % e.__class__.__name__) + + def run_command_from_argv(command, argv): # copied/adapted from Django run_from_argv command._called_from_command_line = True @@ -44,7 +67,7 @@ def run_command_from_argv(command, argv): command.stderr.write(str(e), lambda x: x) else: command.stderr.write('%s: %s: %s' % ( - connection.get_tenant(), e.__class__.__name__, e)) + connection.get_tenant(), e.__class__.__name__, force_bytes(exception_to_text(e)))) return e finally: try: -- 2.20.1