diff --git a/synapse/storage/database.py b/synapse/storage/database.py
index c3d0863429..9947dbce77 100644
--- a/synapse/storage/database.py
+++ b/synapse/storage/database.py
@@ -50,7 +50,6 @@ from synapse.storage.background_updates import BackgroundUpdater
from synapse.storage.engines import BaseDatabaseEngine, PostgresEngine, Sqlite3Engine
from synapse.storage.types import Connection, Cursor
from synapse.types import Collection
-from synapse.util.stringutils import exception_to_unicode
logger = logging.getLogger(__name__)
@@ -424,20 +423,14 @@ class Database(object):
# This can happen if the database disappears mid
# transaction.
logger.warning(
- "[TXN OPERROR] {%s} %s %d/%d",
- name,
- exception_to_unicode(e),
- i,
- N,
+ "[TXN OPERROR] {%s} %s %d/%d", name, e, i, N,
)
if i < N:
i += 1
try:
conn.rollback()
except self.engine.module.Error as e1:
- logger.warning(
- "[TXN EROLL] {%s} %s", name, exception_to_unicode(e1)
- )
+ logger.warning("[TXN EROLL] {%s} %s", name, e1)
continue
raise
except self.engine.module.DatabaseError as e:
@@ -449,9 +442,7 @@ class Database(object):
conn.rollback()
except self.engine.module.Error as e1:
logger.warning(
- "[TXN EROLL] {%s} %s",
- name,
- exception_to_unicode(e1),
+ "[TXN EROLL] {%s} %s", name, e1,
)
continue
raise
diff --git a/synapse/util/stringutils.py b/synapse/util/stringutils.py
index 6899bcb788..2cfa5cf721 100644
--- a/synapse/util/stringutils.py
+++ b/synapse/util/stringutils.py
@@ -85,42 +85,6 @@ def to_ascii(s):
return s
-def exception_to_unicode(e):
- """Helper function to extract the text of an exception as a unicode string
-
- Args:
- e (Exception): exception to be stringified
-
- Returns:
- unicode
- """
- # urgh, this is a mess. The basic problem here is that psycopg2 constructs its
- # exceptions with PyErr_SetString, with a (possibly non-ascii) argument. str() will
- # then produce the raw byte sequence. Under Python 2, this will then cause another
- # error if it gets mixed with a `unicode` object, as per
- # https://github.com/matrix-org/synapse/issues/4252
-
- # First of all, if we're under python3, everything is fine because it will sort this
- # nonsense out for us.
- if not PY2:
- return str(e)
-
- # otherwise let's have a stab at decoding the exception message. We'll circumvent
- # Exception.__str__(), which would explode if someone raised Exception(u'non-ascii')
- # and instead look at what is in the args member.
-
- if len(e.args) == 0:
- return ""
- elif len(e.args) > 1:
- return six.text_type(repr(e.args))
-
- msg = e.args[0]
- if isinstance(msg, bytes):
- return msg.decode("utf-8", errors="replace")
- else:
- return msg
-
-
def assert_valid_client_secret(client_secret):
"""Validate that a given string matches the client_secret regex defined by the spec"""
if client_secret_regex.match(client_secret) is None:
|