Hello,

Thanks for all your answers. A decorator will indeed be the cleanest solution.

This idea was suggested on IRC too but withdrawn because "you can't bind back 
to the class". Well, as far as I can tell, the code below works. Please let me 
know if you see any issues with this implementation.

# django.utils.encoding

from django.utils import six

def python_2_unicode_compatible(klass):
    if not six.PY3:
        klass.__unicode__ = klass.__str__
        klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
    return klass

# in Django or user code

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class MyClass(object):
   def __str__(self):
       result = "text ..."

The only drawback of this solution is that it hardcodes the 'utf-8' encoding. I 
don't see that as a problem since Django already makes this assumption 
everywhere, especially in the smart_text/bytes functions.


The digression on the tutorial is interesting. I'd like to reach the "Py3 with 
Py2 warnings" step as fast as possible but we can't do that until a significant 
part of the Django ecosystem has itself migrated to Python 3.

Anyway, I'm not working on the documentation at this time. I'm only keeping API 
docs in sync with the code. This will be easier to discuss when the port is 
finished, and we have a better view of its consequences.

Best regards,

-- 
Aymeric.

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to