From 87cb61133ea9f1b53b811d534e3fae73e41c5e9a Mon Sep 17 00:00:00 2001 From: "R. Tyler Ballance" Date: Fri, 16 Oct 2009 15:15:08 -0700 Subject: Add Template.__unicode__() to return unicode() objects, while Template.__str__() returns encoded str() objects Per my discussion in #cheetah on IRC with mikeb@ regarding the following issue: https://bugzilla.redhat.com/show_bug.cgi?id=529332 This, in addition to recent patches to cheetah/DummyTransaction.py should alleviate migration issues for users still passing a mishmash of unicode()/str() objects into Templates. __str__() should return a str() object, whereas __unicode__() should return a unicode() object. No-op the EncodeUnicode filter when it encounters a unicode() object. --- cheetah/Template.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'cheetah/Template.py') diff --git a/cheetah/Template.py b/cheetah/Template.py index a8889d2..ec92208 100644 --- a/cheetah/Template.py +++ b/cheetah/Template.py @@ -994,22 +994,45 @@ class Template(Servlet): mainMethName = getattr(concreteTemplateClass,mainMethNameAttr, None) if mainMethName: def __str__(self): + rc = getattr(self, mainMethName)() + if isinstance(rc, unicode): + return rc.encode('utf-8') + return rc + def __unicode__(self): return getattr(self, mainMethName)() elif (hasattr(concreteTemplateClass, 'respond') and concreteTemplateClass.respond!=Servlet.respond): def __str__(self): + rc = self.respond() + if isinstance(rc, unicode): + return rc.encode('utf-8') + return rc + def __unicode__(self): return self.respond() else: def __str__(self): + rc = None + if hasattr(self, mainMethNameAttr): + rc = getattr(self,mainMethNameAttr)() + elif hasattr(self, 'respond'): + rc = self.respond() + else: + rc = super(self.__class__, self).__str__() + if isinstance(rc, unicode): + return rc.encode('utf-8') + return rc + def __unicode__(self): if hasattr(self, mainMethNameAttr): return getattr(self,mainMethNameAttr)() elif hasattr(self, 'respond'): return self.respond() else: - return super(self.__class__, self).__str__() + return super(self.__class__, self).__unicode__() __str__ = new.instancemethod(__str__, None, concreteTemplateClass) + __unicode__ = new.instancemethod(__unicode__, None, concreteTemplateClass) setattr(concreteTemplateClass, '__str__', __str__) + setattr(concreteTemplateClass, '__unicode__', __unicode__) _addCheetahPlumbingCodeToClass = classmethod(_addCheetahPlumbingCodeToClass) -- cgit v1.2.1