Author: kmtracey Date: 2010-02-28 09:29:14 -0600 (Sun, 28 Feb 2010) New Revision: 12623
Added: django/branches/releases/1.1.X/tests/regressiontests/debug/ django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py django/branches/releases/1.1.X/tests/regressiontests/debug/models.py django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py django/branches/releases/1.1.X/tests/regressiontests/debug/views.py Removed: django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py django/branches/releases/1.1.X/tests/regressiontests/debug/models.py django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py django/branches/releases/1.1.X/tests/regressiontests/debug/views.py Modified: django/branches/releases/1.1.X/ django/branches/releases/1.1.X/django/utils/encoding.py Log: [1.1.X] Fixed #12302: Modified force_unicode to avoid raising unicode errors when handed exceptions with non-ASCII bytestring data and no working unicode method under Python 2.6 and higher. r12621 and r12622 from trunk. Property changes on: django/branches/releases/1.1.X ___________________________________________________________________ Name: svnmerge-integrated - /django/trunk:1-11500,11523,11527-11528,11531-11552,11554,11577,11579-11581,11588-11589,11591-11592,11596-11599,11601-11617,11619-11626,11628-11635,11637-11638,11643-11644,11648-11653,11656,11670,11678,11681,11684,11686,11688,11691,11693,11695,11697,11699,11701,11703,11705,11707,11714,11719,11732,11734,11740,11748,11751,11753,11756,11760,11800,11802,11808,11815,11817,11820,11822,11824,11826,11828,11831,11833,11835,11837,11839,11841,11844,11857,11864,11874,11876,11878,11885,11898,11901,11905,11909,11912,11914,11917,11938,11953,11961,11977,11979,11984,11986,11988,11990,11992,11994,11996,11998,12001,12004,12006,12011,12022,12024,12044-12045,12048,12054-12056,12059,12064,12066,12068,12070,12079,12086,12088,12104,12118,12132,12137-12138,12140-12141,12144,12150-12152,12220-12221,12229,12249,12253,12276,12282,12284,12293,12313,12317-12324,12333,12341,12343,12346,12353,12362,12379,12384,12398,12405,12408-12411,12419-12420,12423,12425-12426,12429,12434,12436,12439-12442,12448,12457,12461-12464,12467,12473,12475,12490,12492,12497-12498,12502,12513,12515-12516,12518,12523,12526,12528,12533,12535,12537,12539,12541,12548,12553,12556,12558-12560,12562,12567,12569-12570,12573,12576,12581,12584,12616 + /django/trunk:1-11500,11523,11527-11528,11531-11552,11554,11577,11579-11581,11588-11589,11591-11592,11596-11599,11601-11617,11619-11626,11628-11635,11637-11638,11643-11644,11648-11653,11656,11670,11678,11681,11684,11686,11688,11691,11693,11695,11697,11699,11701,11703,11705,11707,11714,11719,11732,11734,11740,11748,11751,11753,11756,11760,11800,11802,11808,11815,11817,11820,11822,11824,11826,11828,11831,11833,11835,11837,11839,11841,11844,11857,11864,11874,11876,11878,11885,11898,11901,11905,11909,11912,11914,11917,11938,11953,11961,11977,11979,11984,11986,11988,11990,11992,11994,11996,11998,12001,12004,12006,12011,12022,12024,12044-12045,12048,12054-12056,12059,12064,12066,12068,12070,12079,12086,12088,12104,12118,12132,12137-12138,12140-12141,12144,12150-12152,12220-12221,12229,12249,12253,12276,12282,12284,12293,12313,12317-12324,12333,12341,12343,12346,12353,12362,12379,12384,12398,12405,12408-12411,12419-12420,12423,12425-12426,12429,12434,12436,12439-12442,12448,12457,12461-12464,12467,12473,12475,12490,12492,12497-12498,12502,12513,12515-12516,12518,12523,12526,12528,12533,12535,12537,12539,12541,12548,12553,12556,12558-12560,12562,12567,12569-12570,12573,12576,12581,12584,12616,12621-12622 Modified: django/branches/releases/1.1.X/django/utils/encoding.py =================================================================== --- django/branches/releases/1.1.X/django/utils/encoding.py 2010-02-28 15:24:09 UTC (rev 12622) +++ django/branches/releases/1.1.X/django/utils/encoding.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -89,7 +89,16 @@ # SafeUnicode at the end. s = s.decode(encoding, errors) except UnicodeDecodeError, e: - raise DjangoUnicodeDecodeError(s, *e.args) + if not isinstance(s, Exception): + raise DjangoUnicodeDecodeError(s, *e.args) + else: + # If we get to here, the caller has passed in an Exception + # subclass populated with non-ASCII bytestring data without a + # working unicode method. Try to handle this without raising a + # further exception by individually forcing the exception args + # to unicode. + s = ' '.join([force_unicode(arg, encoding, strings_only, + errors) for arg in s]) return s def smart_str(s, encoding='utf-8', strings_only=False, errors='strict'): Copied: django/branches/releases/1.1.X/tests/regressiontests/debug (from rev 12622, django/trunk/tests/regressiontests/debug) Deleted: django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py =================================================================== --- django/trunk/tests/regressiontests/debug/__init__.py 2010-02-28 15:24:09 UTC (rev 12622) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -1,10 +0,0 @@ -# -*- coding: utf8 -*- - -class BrokenException(Exception): - pass - -except_args = ('Broken!', # plain exception with ASCII text - u'¡Broken!', # non-ASCII unicode data - '¡Broken!', # non-ASCII, utf-8 encoded bytestring - '\xa1Broken!', ) # non-ASCII, latin1 bytestring - Copied: django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py (from rev 12622, django/trunk/tests/regressiontests/debug/__init__.py) =================================================================== --- django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py (rev 0) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/__init__.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -0,0 +1,10 @@ +# -*- coding: utf8 -*- + +class BrokenException(Exception): + pass + +except_args = ('Broken!', # plain exception with ASCII text + u'¡Broken!', # non-ASCII unicode data + '¡Broken!', # non-ASCII, utf-8 encoded bytestring + '\xa1Broken!', ) # non-ASCII, latin1 bytestring + Deleted: django/branches/releases/1.1.X/tests/regressiontests/debug/models.py =================================================================== Copied: django/branches/releases/1.1.X/tests/regressiontests/debug/models.py (from rev 12622, django/trunk/tests/regressiontests/debug/models.py) =================================================================== Deleted: django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py =================================================================== --- django/trunk/tests/regressiontests/debug/tests.py 2010-02-28 15:24:09 UTC (rev 12622) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -1,21 +0,0 @@ -from django.test import TestCase -from django.conf import settings -from django.core.urlresolvers import reverse - -from regressiontests.debug import BrokenException, except_args - -class ExceptionTest(TestCase): - urls = 'regressiontests.debug.urls' - - def setUp(self): - self.old_debug = settings.DEBUG - settings.DEBUG = True - - def tearDown(self): - settings.DEBUG = self.old_debug - - def test_view_exceptions(self): - for n in range(len(except_args)): - self.assertRaises(BrokenException, self.client.get, - reverse('view_exception', args=(n,))) - Copied: django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py (from rev 12622, django/trunk/tests/regressiontests/debug/tests.py) =================================================================== --- django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py (rev 0) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/tests.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -0,0 +1,21 @@ +from django.test import TestCase +from django.conf import settings +from django.core.urlresolvers import reverse + +from regressiontests.debug import BrokenException, except_args + +class ExceptionTest(TestCase): + urls = 'regressiontests.debug.urls' + + def setUp(self): + self.old_debug = settings.DEBUG + settings.DEBUG = True + + def tearDown(self): + settings.DEBUG = self.old_debug + + def test_view_exceptions(self): + for n in range(len(except_args)): + self.assertRaises(BrokenException, self.client.get, + reverse('view_exception', args=(n,))) + Deleted: django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py =================================================================== --- django/trunk/tests/regressiontests/debug/urls.py 2010-02-28 15:24:09 UTC (rev 12622) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -1,5 +0,0 @@ -from django.conf.urls.defaults import * - -urlpatterns = patterns('regressiontests.debug.views', - url(r'view_exception/(?P<n>\d+)/$', 'view_exception', name='view_exception'), -) Copied: django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py (from rev 12622, django/trunk/tests/regressiontests/debug/urls.py) =================================================================== --- django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py (rev 0) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/urls.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -0,0 +1,5 @@ +from django.conf.urls.defaults import * + +urlpatterns = patterns('regressiontests.debug.views', + url(r'view_exception/(?P<n>\d+)/$', 'view_exception', name='view_exception'), +) Deleted: django/branches/releases/1.1.X/tests/regressiontests/debug/views.py =================================================================== --- django/trunk/tests/regressiontests/debug/views.py 2010-02-28 15:24:09 UTC (rev 12622) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/views.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -1,5 +0,0 @@ -from regressiontests.debug import BrokenException, except_args - -def view_exception(request, n): - raise BrokenException(except_args[int(n)]) - Copied: django/branches/releases/1.1.X/tests/regressiontests/debug/views.py (from rev 12622, django/trunk/tests/regressiontests/debug/views.py) =================================================================== --- django/branches/releases/1.1.X/tests/regressiontests/debug/views.py (rev 0) +++ django/branches/releases/1.1.X/tests/regressiontests/debug/views.py 2010-02-28 15:29:14 UTC (rev 12623) @@ -0,0 +1,5 @@ +from regressiontests.debug import BrokenException, except_args + +def view_exception(request, n): + raise BrokenException(except_args[int(n)]) + -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-upda...@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.