Tres Seaver
2012-03-18 cc04edcbe9f1fe7b7bdf7e864e862f1bd1578b4e
Add 'must_decode' smackdown.
2 files modified
30 ■■■■■ changed files
repoze/who/_compat.py 8 ●●●●● patch | view | raw | blame | history
repoze/who/tests/test__compat.py 22 ●●●●● patch | view | raw | blame | history
repoze/who/_compat.py
@@ -105,3 +105,11 @@
        return ",".join(values)
    else:
        return values
def must_decode(value):
    if type(value) is b:
        try:
            return value.decode('utf-8')
        except UnicodeDecodeError:
            return value.decode('latin1')
    return value
repoze/who/tests/test__compat.py
@@ -89,3 +89,25 @@
        from .._compat import header_value
        self.assertEqual(header_value([('simple', 'SIMPLE')], 'simple'),
                         'SIMPLE')
    def test_must_decode_non_string(self):
        from .._compat import must_decode
        foo = object()
        self.failUnless(must_decode(foo) is foo)
    def test_must_decode_unicode(self):
        from .._compat import must_decode
        from .._compat import u
        foo = u('foo')
        self.failUnless(must_decode(foo) is foo)
    def test_must_decode_utf8(self):
        from .._compat import must_decode
        foo = b'b\xc3\xa2tard'
        self.assertEqual(must_decode(foo), foo.decode('utf-8'))
    def test_must_decode_latin1(self):
        from .._compat import must_decode
        foo = b'b\xe2tard'
        self.assertEqual(must_decode(foo), foo.decode('latin1'))