[Zope-Checkins] SVN: Zope/trunk/ Added LAZY_FILE_LOADING constant to PageTemplateFile. When set to True Page Template files aren't lo

Hanno Schlichting plone at hannosch.info
Tue Oct 16 17:16:08 EDT 2007


Log message for revision 80896:
  Added LAZY_FILE_LOADING constant to PageTemplateFile. When set to True Page Template files aren't lo
  aded and parsed on Zope startup anymore, but on first access instead. When complex add-ons like Plon
  e are installed this can safe up to 30% of the Zope startup time. This gets a ZConfig switch ones I 
  figured out how to write one ;)
  

Changed:
  U   Zope/trunk/doc/CHANGES.txt
  U   Zope/trunk/lib/python/Products/PageTemplates/PageTemplateFile.py
  U   Zope/trunk/lib/python/Products/PageTemplates/tests/test_ptfile.py

-=-
Modified: Zope/trunk/doc/CHANGES.txt
===================================================================
--- Zope/trunk/doc/CHANGES.txt	2007-10-16 20:12:30 UTC (rev 80895)
+++ Zope/trunk/doc/CHANGES.txt	2007-10-16 21:16:07 UTC (rev 80896)
@@ -71,6 +71,10 @@
 
     Features added
 
+      - Added LAZY_FILE_LOADING constant to PageTemplateFile. When set to True
+        Page Template files aren't lo aded and parsed on Zope startup anymore,
+        but on first access instead.
+
       - Testing.ZopeTestCase: Introduced a "ZopeLite" test layer, making it
         possible to mix ZTC and non-ZTC tests much more freely.
 

Modified: Zope/trunk/lib/python/Products/PageTemplates/PageTemplateFile.py
===================================================================
--- Zope/trunk/lib/python/Products/PageTemplates/PageTemplateFile.py	2007-10-16 20:12:30 UTC (rev 80895)
+++ Zope/trunk/lib/python/Products/PageTemplates/PageTemplateFile.py	2007-10-16 21:16:07 UTC (rev 80896)
@@ -31,6 +31,8 @@
 
 LOG = getLogger('PageTemplateFile')
 
+LAZY_FILE_LOADING = False
+
 def guess_type(filename, text):
 
     # check for XML ourself since guess_content_type can't
@@ -86,8 +88,9 @@
 
         self.filename = filename
 
-        content = open(filename).read()
-        self.pt_edit( content, guess_type(filename, content))
+        if not LAZY_FILE_LOADING:
+            content = open(filename).read()
+            self.pt_edit( content, guess_type(filename, content))
 
     def pt_getContext(self):
         root = self.getPhysicalRoot()

Modified: Zope/trunk/lib/python/Products/PageTemplates/tests/test_ptfile.py
===================================================================
--- Zope/trunk/lib/python/Products/PageTemplates/tests/test_ptfile.py	2007-10-16 20:12:30 UTC (rev 80895)
+++ Zope/trunk/lib/python/Products/PageTemplates/tests/test_ptfile.py	2007-10-16 21:16:07 UTC (rev 80896)
@@ -8,6 +8,7 @@
 
 from Testing.makerequest import makerequest
 
+from Products.PageTemplates import PageTemplateFile as PTF
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 
 
@@ -192,10 +193,42 @@
     def test_mac(self):
         self.assertEqual(self.runPTWithLineEndings('\r'), self.OUTPUT)
 
+
+class LazyLoadingTestCase(unittest.TestCase):
+
+    TEMPFILENAME = tempfile.mktemp(".zpt")
+    OLD_LAZY = None
+
+    def setUp(self):
+        self.OLD_LAZY = PTF.LAZY_FILE_LOADING
+
+    def tearDown(self):
+        if os.path.exists(self.TEMPFILENAME):
+            os.unlink(self.TEMPFILENAME)
+        PTF.LAZY_FILE_LOADING = self.OLD_LAZY
+
+    def test_not_lazy(self):
+        f = open(self.TEMPFILENAME, 'w')
+        print >> f, 'Lazyness'
+        f.close()
+        pt = PageTemplateFile(self.TEMPFILENAME)
+        self.failUnless(pt._text.startswith('Lazyness'))
+        self.failUnless(pt._v_program)
+
+    def test_lazy(self):
+        f = open(self.TEMPFILENAME, 'w')
+        print >> f, 'Lazyness'
+        f.close()
+        PTF.LAZY_FILE_LOADING = True
+        pt = PageTemplateFile(self.TEMPFILENAME)
+        self.failUnless(not pt._text and not pt._v_program)
+
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(TypeSniffingTestCase),
         unittest.makeSuite(LineEndingsTestCase),
+        unittest.makeSuite(LazyLoadingTestCase),
     ))
 
 if __name__ == "__main__":



More information about the Zope-Checkins mailing list