Fix #1017 - Exception caused by activity being set on incorrect foreign key
[mediagoblin.git] / mediagoblin / _compat.py
index bbd91c3fb8e4a61ea29bc5b2401d42057d996c51..9164d5fcebb78e132675edfb3eea6723fe073659 100644 (file)
@@ -1,3 +1,32 @@
-import sys
+import functools
+import warnings
 
-PY3 = sys.version_info[0] >= 3
+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