From 2ad1bb8bb398d3acc05d91d33b3fcf1230632412 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 27 Jun 2013 00:08:05 +0200 Subject: [PATCH] config: Raise ValueError if Path is asked to serialize unicode If we accept unicode and try to encode using sys.getfilesystemencoding() then it may work most of the time, but will fail if we get non-ASCII chars in the unicode string and the file system encoding is e.g. ANSI-something because the locale is C. Thus, I figure it is better to always fail if we try to serialize Path from unicode strings. Paths should be maintained as bytes all the time. --- mopidy/config/types.py | 3 +-- tests/config/types_test.py | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/mopidy/config/types.py b/mopidy/config/types.py index a2f759df..ec0be1de 100644 --- a/mopidy/config/types.py +++ b/mopidy/config/types.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals import logging import re import socket -import sys from mopidy.utils import path from mopidy.config import validators @@ -257,7 +256,7 @@ class Path(ConfigValue): def serialize(self, value, display=False): if isinstance(value, unicode): - value = value.encode(sys.getfilesystemencoding()) + raise ValueError('paths should always be bytes') if isinstance(value, ExpandedPath): return value.original return value diff --git a/tests/config/types_test.py b/tests/config/types_test.py index 24f1265e..88c8f067 100644 --- a/tests/config/types_test.py +++ b/tests/config/types_test.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import logging import mock import socket -import sys import unittest from mopidy.config import types @@ -367,7 +366,4 @@ class PathTest(unittest.TestCase): def test_serialize_unicode_string(self): value = types.Path() - expected = 'æøå'.encode(sys.getfilesystemencoding()) - result = value.serialize('æøå') - self.assertEqual(expected, result) - self.assertIsInstance(result, bytes) + self.assertRaises(ValueError, value.serialize, 'æøå')