Skip to content

Commit

Permalink
Support difference between types.MethodType constructors in Python2 v…
Browse files Browse the repository at this point in the history
…s. Python3
  • Loading branch information
R. Tyler Ballance committed Jan 3, 2010
1 parent 189eaa5 commit dd56eea
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions cheetah/Template.py
Expand Up @@ -31,18 +31,19 @@ def release(self):
pass pass


filetype = None 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 import io
filetype = io.IOBase filetype = io.IOBase
except ImportError: def createMethod(func, cls):
filetype = types.FileType 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 convertVersionStringToTuple, MinCompatibleVersionTuple
from Cheetah.Version import MinCompatibleVersion from Cheetah.Version import MinCompatibleVersion
Expand Down Expand Up @@ -980,7 +981,7 @@ def _addCheetahPlumbingCodeToClass(klass, concreteTemplateClass):
for methodname in klass._CHEETAH_requiredCheetahMethods: for methodname in klass._CHEETAH_requiredCheetahMethods:
if not hasattr(concreteTemplateClass, methodname): if not hasattr(concreteTemplateClass, methodname):
method = getattr(Template, methodname) method = getattr(Template, methodname)
newMethod = types.MethodType(method.im_func, None, concreteTemplateClass) newMethod = createMethod(method.im_func, concreteTemplateClass)
setattr(concreteTemplateClass, methodname, newMethod) setattr(concreteTemplateClass, methodname, newMethod)


for classMethName in klass._CHEETAH_requiredCheetahClassMethods: for classMethName in klass._CHEETAH_requiredCheetahClassMethods:
Expand Down Expand Up @@ -1036,8 +1037,8 @@ def __unicode__(self):
else: else:
return super(self.__class__, self).__unicode__() return super(self.__class__, self).__unicode__()


__str__ = types.MethodType(__str__, None, concreteTemplateClass) __str__ = createMethod(__str__, concreteTemplateClass)
__unicode__ = types.MethodType(__unicode__, None, concreteTemplateClass) __unicode__ = createMethod(__unicode__, concreteTemplateClass)
setattr(concreteTemplateClass, '__str__', __str__) setattr(concreteTemplateClass, '__str__', __str__)
setattr(concreteTemplateClass, '__unicode__', __unicode__) setattr(concreteTemplateClass, '__unicode__', __unicode__)


Expand Down

0 comments on commit dd56eea

Please sign in to comment.