summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@monkeypox.org>2010-01-03 13:23:28 -0800
committerR. Tyler Ballance <tyler@monkeypox.org>2010-01-03 13:23:28 -0800
commitdd56eea7375f24b782c136cfacca30d4022e9132 (patch)
tree36021c233eb01b7b2f68790cd838c15479e81b58
parent189eaa59f1060d9e9476b277abf0b4e1f116b46d (diff)
downloadpython-cheetah-dd56eea7375f24b782c136cfacca30d4022e9132.tar.gz
Support difference between types.MethodType constructors in Python2 vs. Python3
-rw-r--r--cheetah/Template.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/cheetah/Template.py b/cheetah/Template.py
index 7231db8..f42f77b 100644
--- a/cheetah/Template.py
+++ b/cheetah/Template.py
@@ -31,18 +31,19 @@ except ImportError:
pass
filetype = None
-try:
- # Python3
+
+if isinstance(sys.version_info, tuple):
+ # Python 2.xx
+ filetype = types.FileType
+ def createMethod(func, cls):
+ return types.MethodType(func, None, cls)
+else:
import io
filetype = io.IOBase
-except ImportError:
- filetype = types.FileType
+ def createMethod(func, cls):
+ return types.MethodType(func, cls)
+
-try:
- x = set()
-except NameError:
- # Python 2.3 compatibility
- from sets import Set as set
from Cheetah.Version import convertVersionStringToTuple, MinCompatibleVersionTuple
from Cheetah.Version import MinCompatibleVersion
@@ -980,7 +981,7 @@ class Template(Servlet):
for methodname in klass._CHEETAH_requiredCheetahMethods:
if not hasattr(concreteTemplateClass, methodname):
method = getattr(Template, methodname)
- newMethod = types.MethodType(method.im_func, None, concreteTemplateClass)
+ newMethod = createMethod(method.im_func, concreteTemplateClass)
setattr(concreteTemplateClass, methodname, newMethod)
for classMethName in klass._CHEETAH_requiredCheetahClassMethods:
@@ -1036,8 +1037,8 @@ class Template(Servlet):
else:
return super(self.__class__, self).__unicode__()
- __str__ = types.MethodType(__str__, None, concreteTemplateClass)
- __unicode__ = types.MethodType(__unicode__, None, concreteTemplateClass)
+ __str__ = createMethod(__str__, concreteTemplateClass)
+ __unicode__ = createMethod(__unicode__, concreteTemplateClass)
setattr(concreteTemplateClass, '__str__', __str__)
setattr(concreteTemplateClass, '__unicode__', __unicode__)