Re: [Cheetahtemplate-discuss] [PATCH 1/2] Add Template.__unicode__() to return unicode() objects,
Brought to you by:
rtyler,
tavis_rudd
From: Mike B. <mi...@re...> - 2009-10-16 23:07:43
|
On 10/16/2009 06:27 PM, R. Tyler Ballance wrote: > 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. > > Additionally, __str__() should return a str() object, whereas __unicode__() should > return a unicode() object. This fixes the bug, thanks! I'll see about releasing an updated Cheetah 2.2.2 package with this patch applied. > --- > cheetah/Template.py | 25 ++++++++++++++++++++++++- > cheetah/Tests/Unicode.py | 16 ++++++++++++++++ > 2 files changed, 40 insertions(+), 1 deletions(-) > > 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) > > diff --git a/cheetah/Tests/Unicode.py b/cheetah/Tests/Unicode.py > index d627503..12c00ac 100644 > --- a/cheetah/Tests/Unicode.py > +++ b/cheetah/Tests/Unicode.py > @@ -150,6 +150,22 @@ $someUnicodeString""" > a = unicode(template).encode("utf-8") > self.assertEquals("Bébé", a) > > +class EncodeUnicodeCompatTest(unittest.TestCase): > + """ > + Taken initially from Red Hat's bugzilla #529332 > + https://bugzilla.redhat.com/show_bug.cgi?id=529332 > + """ > + def runTest(self): > + t = Template("""Foo ${var}""", filter='EncodeUnicode') > + t.var = u"Text with some non-ascii characters: åäö" > + > + rc = t.respond() > + assert isinstance(rc, unicode), ('Template.respond() should return unicode', rc) > + > + rc = str(t) > + assert isinstance(rc, str), ('Template.__str__() should return a UTF-8 encoded string', rc) > + > + > class Unicode_in_SearchList_Test(CommandLineTest): > def test_BasicASCII(self): > source = '''This is $adjective''' > > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > > > > _______________________________________________ > Cheetahtemplate-discuss mailing list > Che...@li... > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss |