From 2326dedde81c59950d2b1e0653a837e1d7019acd Mon Sep 17 00:00:00 2001 From: Florian Apolloner Date: Fri, 6 Sep 2013 19:16:06 +0200 Subject: Fixed #20812 -- Error out if __unicode__/__str__ doesn't return a text type. --- django/utils/encoding.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'django/utils/encoding.py') diff --git a/django/utils/encoding.py b/django/utils/encoding.py index 667c3def45..a7239f4b0f 100644 --- a/django/utils/encoding.py +++ b/django/utils/encoding.py @@ -67,16 +67,15 @@ def force_text(s, encoding='utf-8', strings_only=False, errors='strict'): return s try: if not isinstance(s, six.string_types): - if hasattr(s, '__unicode__'): - s = s.__unicode__() - else: - if six.PY3: - if isinstance(s, bytes): - s = six.text_type(s, encoding, errors) - else: - s = six.text_type(s) + if six.PY3: + if isinstance(s, bytes): + s = six.text_type(s, encoding, errors) else: - s = six.text_type(bytes(s), encoding, errors) + s = six.text_type(s) + elif hasattr(s, '__unicode__'): + s = six.text_type(s) + else: + s = six.text_type(bytes(s), encoding, errors) else: # Note: We use .decode() here, instead of six.text_type(s, encoding, # errors), so that if s is a SafeBytes, it ends up being a -- cgit v1.3