[Zope-Checkins] SVN: Zope/trunk/lib/python/Products/PageTemplates/ Launchpad #198274: "empty" ZopePageTemplates could not be unpickled.

Tres Seaver tseaver at palladion.com
Tue Mar 4 13:12:59 EST 2008


Log message for revision 84464:
  Launchpad #198274:  "empty" ZopePageTemplates could not be unpickled.
  

Changed:
  U   Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py
  U   Zope/trunk/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py

-=-
Modified: Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py
===================================================================
--- Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py	2008-03-04 18:10:17 UTC (rev 84463)
+++ Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py	2008-03-04 18:12:59 UTC (rev 84464)
@@ -413,7 +413,8 @@
         # Perform on-the-fly migration to unicode.
         # Perhaps it might be better to work with the 'generation' module 
         # here?
-        if not isinstance(state['_text'], unicode):
+        _text = state.get('_text')
+        if _text is not None and not isinstance(state['_text'], unicode):
             text, encoding = convertToUnicode(state['_text'], 
                                     state.get('content_type', 'text/html'), 
                                     preferred_encodings)

Modified: Zope/trunk/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py
===================================================================
--- Zope/trunk/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py	2008-03-04 18:10:17 UTC (rev 84463)
+++ Zope/trunk/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py	2008-03-04 18:12:59 UTC (rev 84464)
@@ -191,6 +191,17 @@
         self.failUnless(result.startswith(unicode('<div>üöä</div>',
                         'iso-8859-15')))
 
+    def test_bug_198274(self):
+        # See https://bugs.launchpad.net/bugs/198274
+        # ZPT w/ '_text' not assigned can't be unpickled.
+        import cPickle
+        empty = ZopePageTemplate(id='empty', text=' ',
+                                 content_type='text/html',
+                                 output_encoding='ascii',
+                                )
+        state = cPickle.dumps(empty, protocol=1)
+        clone = cPickle.loads(state)
+
 class ZopePageTemplateFileTests(ZopeTestCase):
 
     def testPT_RenderWithAscii(self):



More information about the Zope-Checkins mailing list