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__": _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins