Fixed #18902 -- Made force_bytes properly handle exception input

Thanks Aymeric Augustin for the report and the initial patch.
This commit is contained in:
Claude Paroz 2012-09-04 09:24:39 +02:00
parent 03ad7d3c20
commit cc9b767fc6
3 changed files with 19 additions and 1 deletions

View File

@ -174,7 +174,7 @@ def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
# An Exception subclass containing non-ASCII data that doesn't # An Exception subclass containing non-ASCII data that doesn't
# know how to print itself properly. We shouldn't raise a # know how to print itself properly. We shouldn't raise a
# further exception. # further exception.
return ' '.join([force_bytes(arg, encoding, strings_only, return b' '.join([force_bytes(arg, encoding, strings_only,
errors) for arg in s]) errors) for arg in s])
return six.text_type(s).encode(encoding, errors) return six.text_type(s).encode(encoding, errors)
else: else:

View File

@ -0,0 +1,17 @@
# -*- encoding: utf-8 -*-
from __future__ import unicode_literals
from django.utils import unittest
from django.utils.encoding import force_bytes
class TestEncodingUtils(unittest.TestCase):
def test_force_bytes_exception(self):
"""
Test that force_bytes knows how to convert to bytes an exception
containing non-ASCII characters in its args.
"""
error_msg = "This is an exception, voilà"
exc = ValueError(error_msg)
result = force_bytes(exc)
self.assertEqual(result, error_msg.encode('utf-8'))

View File

@ -13,6 +13,7 @@ from .dateformat import DateFormatTests
from .dateparse import DateParseTests from .dateparse import DateParseTests
from .datetime_safe import DatetimeTests from .datetime_safe import DatetimeTests
from .decorators import DecoratorFromMiddlewareTests from .decorators import DecoratorFromMiddlewareTests
from .encoding import TestEncodingUtils
from .feedgenerator import FeedgeneratorTest from .feedgenerator import FeedgeneratorTest
from .functional import FunctionalTestCase from .functional import FunctionalTestCase
from .html import TestUtilsHtml from .html import TestUtilsHtml