Commit ef97c07e by willmcgugan@gmail.com

Allow unicode conversion for errors containing non-ascii strings.

parent 6829f99a
......@@ -39,6 +39,7 @@ __all__ = ['FSError',
import sys
import errno
import six
from fs.path import *
from fs.local_functools import wraps
......@@ -63,7 +64,12 @@ class FSError(Exception):
return str(self.msg % keys)
def __unicode__(self):
return unicode(self.msg) % self.__dict__
keys = {}
for k,v in self.__dict__.iteritems():
if isinstance(v, six.binary_type):
v = v.decode(sys.getfilesystemencoding(), errors='replace')
keys[k] = v
return unicode(self.msg, encoding=sys.getfilesystemencoding(), errors='replace') % keys
def __reduce__(self):
return (self.__class__,(),self.__dict__.copy(),)
......
# -*- encoding: utf-8 -*-
"""
fs.tests.test_errors: testcases for the fs error classes functions
......@@ -24,3 +25,8 @@ class TestErrorPickling(unittest.TestCase):
assert_dump_load(UnsupportedError("makepony"))
class TestFSError(unittest.TestCase):
def test_unicode_representation_of_error_with_non_ascii_characters(self):
path_error = PathError('/Shïrê/Frødø')
_ = unicode(path_error)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment