From d6f17b4cf00868ceaac59d1867ba9ccfabcc8ede Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Fri, 10 Aug 2012 23:17:41 +0200 Subject: [PATCH] Decode messages from IOError before logging them IOError messages are bytestrings, often in the language of the system, so they may include non-ASCII characters. Thus, we must decode them using the locale's preferred encoding to get Unicode objects we safely can pass on for logging the IOError. --- mopidy/backends/local/translator.py | 9 +++++---- mopidy/frontends/mpd/__init__.py | 6 +++--- mopidy/utils/network.py | 6 ++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/mopidy/backends/local/translator.py b/mopidy/backends/local/translator.py index be7ab8a8..3b610a94 100644 --- a/mopidy/backends/local/translator.py +++ b/mopidy/backends/local/translator.py @@ -4,6 +4,7 @@ import os logger = logging.getLogger('mopidy.backends.local.translator') from mopidy.models import Track, Artist, Album +from mopidy.utils import locale_decode from mopidy.utils.path import path_to_uri def parse_m3u(file_path): @@ -33,8 +34,8 @@ def parse_m3u(file_path): try: with open(file_path) as m3u: contents = m3u.readlines() - except IOError, e: - logger.error('Couldn\'t open m3u: %s', e) + except IOError as error: + logger.error('Couldn\'t open m3u: %s', locale_decode(error)) return uris for line in contents: @@ -61,8 +62,8 @@ def parse_mpd_tag_cache(tag_cache, music_dir=''): try: with open(tag_cache) as library: contents = library.read() - except IOError, e: - logger.error('Could not open tag cache: %s', e) + except IOError as error: + logger.error('Could not open tag cache: %s', locale_decode(error)) return tracks current = {} diff --git a/mopidy/frontends/mpd/__init__.py b/mopidy/frontends/mpd/__init__.py index 99134012..e8b2aabe 100644 --- a/mopidy/frontends/mpd/__init__.py +++ b/mopidy/frontends/mpd/__init__.py @@ -5,7 +5,7 @@ from pykka import registry, actor from mopidy import listeners, settings from mopidy.frontends.mpd import dispatcher, protocol -from mopidy.utils import network, process, log +from mopidy.utils import locale_decode, log, network, process logger = logging.getLogger('mopidy.frontends.mpd') @@ -32,8 +32,8 @@ class MpdFrontend(actor.ThreadingActor, listeners.BackendListener): try: network.Server(hostname, port, protocol=MpdSession, max_connections=settings.MPD_SERVER_MAX_CONNECTIONS) - except IOError, e: - logger.error(u'MPD server startup failed: %s', e) + except IOError as error: + logger.error(u'MPD server startup failed: %s', locale_decode(error)) sys.exit(1) logger.info(u'MPD server running at [%s]:%s', hostname, port) diff --git a/mopidy/utils/network.py b/mopidy/utils/network.py index 0a0928ce..4b8a9ac9 100644 --- a/mopidy/utils/network.py +++ b/mopidy/utils/network.py @@ -9,6 +9,8 @@ from pykka import ActorDeadError from pykka.actor import ThreadingActor from pykka.registry import ActorRegistry +from mopidy.utils import locale_decode + logger = logging.getLogger('mopidy.utils.server') class ShouldRetrySocketCall(Exception): @@ -21,9 +23,9 @@ def try_ipv6_socket(): try: socket.socket(socket.AF_INET6).close() return True - except IOError, e: + except IOError as error: logger.debug(u'Platform supports IPv6, but socket ' - 'creation failed, disabling: %s', e) + 'creation failed, disabling: %s', locale_decode(error)) return False #: Boolean value that indicates if creating an IPv6 socket will succeed.