Commit cd0ceaa1 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #24252 -- Forced lazy __str__ to utf-8 on Python 2

Thanks Stanislas Guerra for the report and Tomas Ehrlich for
the review.
parent 250aa7c3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ def lazy(func, *resultclasses):
                    cls.__str__ = cls.__text_cast
                else:
                    cls.__unicode__ = cls.__text_cast
                    cls.__str__ = cls.__bytes_cast_encoded
            elif cls._delegate_bytes:
                if six.PY3:
                    cls.__bytes__ = cls.__bytes_cast
@@ -117,6 +118,9 @@ def lazy(func, *resultclasses):
        def __bytes_cast(self):
            return bytes(func(*self.__args, **self.__kw))

        def __bytes_cast_encoded(self):
            return func(*self.__args, **self.__kw).encode('utf-8')

        def __cast(self):
            if self._delegate_bytes:
                return self.__bytes_cast()
+11 −0
Original line number Diff line number Diff line
@@ -318,6 +318,17 @@ class ReverseLazyTest(TestCase):
        response = self.client.get('/login_required_view/')
        self.assertEqual(response.status_code, 200)

    def test_inserting_reverse_lazy_into_string(self):
        self.assertEqual(
            'Some URL: %s' % reverse_lazy('some-login-page'),
            'Some URL: /login/'
        )
        if six.PY2:
            self.assertEqual(
                b'Some URL: %s' % reverse_lazy('some-login-page'),
                'Some URL: /login/'
            )


class ReverseLazySettingsTest(AdminScriptTestCase):
    """