diff options
Diffstat (limited to 'mediagoblin/_compat.py')
-rw-r--r-- | mediagoblin/_compat.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/mediagoblin/_compat.py b/mediagoblin/_compat.py new file mode 100644 index 00000000..9164d5fc --- /dev/null +++ b/mediagoblin/_compat.py @@ -0,0 +1,32 @@ +import functools +import warnings + +import six + +if six.PY3: + from email.mime.text import MIMEText +else: + from email.MIMEText import MIMEText + + +def encode_to_utf8(method): + def wrapper(self): + if six.PY2 and isinstance(method(self), six.text_type): + return method(self).encode('utf-8') + return method(self) + functools.update_wrapper(wrapper, method, ['__name__', '__doc__']) + return wrapper + + +# based on django.utils.encoding.python_2_unicode_compatible +def py2_unicode(klass): + if six.PY2: + if '__str__' not in klass.__dict__: + warnings.warn("@py2_unicode cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = encode_to_utf8(klass.__unicode__) + if '__repr__' in klass.__dict__: + klass.__repr__ = encode_to_utf8(klass.__repr__) + return klass |