[Checkins] SVN: zope.tales/trunk/ Ported the lazy expression from Products.PageTemplates.
Hanno Schlichting
hannosch at hannosch.eu
Fri Jan 1 15:07:16 EST 2010
Log message for revision 107514:
Ported the lazy expression from Products.PageTemplates.
Changed:
U zope.tales/trunk/CHANGES.txt
U zope.tales/trunk/setup.py
U zope.tales/trunk/src/zope/tales/engine.py
U zope.tales/trunk/src/zope/tales/expressions.py
U zope.tales/trunk/src/zope/tales/tests/test_expressions.py
-=-
Modified: zope.tales/trunk/CHANGES.txt
===================================================================
--- zope.tales/trunk/CHANGES.txt 2010-01-01 19:26:58 UTC (rev 107513)
+++ zope.tales/trunk/CHANGES.txt 2010-01-01 20:07:16 UTC (rev 107514)
@@ -2,6 +2,11 @@
CHANGES
=======
+3.5.0 (unreleased)
+------------------
+
+- Ported the lazy expression from Products.PageTemplates.
+
3.4.0 (2007-10-03)
------------------
@@ -9,7 +14,6 @@
- Initial release outside the Zope 3 trunk.
-
3.2.0 (2006-01-05)
------------------
@@ -18,7 +22,6 @@
- Documentation / test fixes.
-
3.0.0 (2004-11-07)
------------------
Modified: zope.tales/trunk/setup.py
===================================================================
--- zope.tales/trunk/setup.py 2010-01-01 19:26:58 UTC (rev 107513)
+++ zope.tales/trunk/setup.py 2010-01-01 20:07:16 UTC (rev 107514)
@@ -27,7 +27,7 @@
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
setup(name='zope.tales',
- version = '3.4.1dev',
+ version = '3.5.0dev',
author='Zope Corporation and Contributors',
author_email='zope3-dev at zope.org',
description='Zope 3 Template Application Language Expression Syntax '
Modified: zope.tales/trunk/src/zope/tales/engine.py
===================================================================
--- zope.tales/trunk/src/zope/tales/engine.py 2010-01-01 19:26:58 UTC (rev 107513)
+++ zope.tales/trunk/src/zope/tales/engine.py 2010-01-01 20:07:16 UTC (rev 107514)
@@ -18,7 +18,11 @@
$Id$
"""
from zope.tales.tales import ExpressionEngine
-from zope.tales.expressions import PathExpr, StringExpr, NotExpr, DeferExpr
+from zope.tales.expressions import PathExpr
+from zope.tales.expressions import StringExpr
+from zope.tales.expressions import NotExpr
+from zope.tales.expressions import DeferExpr
+from zope.tales.expressions import LazyExpr
from zope.tales.expressions import SimpleModuleImporter
from zope.tales.pythonexpr import PythonExpr
@@ -31,6 +35,7 @@
reg('python', PythonExpr)
reg('not', NotExpr)
reg('defer', DeferExpr)
+ reg('lazy', LazyExpr)
e.registerBaseName('modules', SimpleModuleImporter())
return e
Modified: zope.tales/trunk/src/zope/tales/expressions.py
===================================================================
--- zope.tales/trunk/src/zope/tales/expressions.py 2010-01-01 19:26:58 UTC (rev 107513)
+++ zope.tales/trunk/src/zope/tales/expressions.py 2010-01-01 20:07:16 UTC (rev 107514)
@@ -309,6 +309,29 @@
return '<DeferExpr %s>' % `self._s`
+class LazyWrapper(DeferWrapper):
+ """Wrapper for lazy: expression
+ """
+ def __init__(self, expr, econtext):
+ DeferWrapper.__init__(self, expr, econtext)
+ self._result = _marker
+
+ def __call__(self):
+ r = self._result
+ if r is _marker:
+ self._result = r = self._expr(self._econtext)
+ return r
+
+class LazyExpr(DeferExpr):
+ """lazy: expression handler for lazy initialization of expressions
+ """
+ def __call__(self, econtext):
+ return LazyWrapper(self._c, econtext)
+
+ def __repr__(self):
+ return 'lazy:%s' % `self._s`
+
+
class SimpleModuleImporter(object):
"""Minimal module importer with no security."""
Modified: zope.tales/trunk/src/zope/tales/tests/test_expressions.py
===================================================================
--- zope.tales/trunk/src/zope/tales/tests/test_expressions.py 2010-01-01 19:26:58 UTC (rev 107513)
+++ zope.tales/trunk/src/zope/tales/tests/test_expressions.py 2010-01-01 20:07:16 UTC (rev 107514)
@@ -229,7 +229,19 @@
check('string:foo${ab/cd | c/d | e//f}bar')
check('string:foo${ab/cd | c/d | e/f/}bar')
+ def test_defer_expression_returns_wrapper(self):
+ from zope.tales.expressions import DeferWrapper
+ expr = self.engine.compile('defer: b')
+ context=self.context
+ self.failUnless(isinstance(expr(context), DeferWrapper))
+ def test_lazy_expression_returns_wrapper(self):
+ from zope.tales.expressions import LazyWrapper
+ expr = self.engine.compile('lazy: b')
+ context=self.context
+ self.failUnless(isinstance(expr(context), LazyWrapper))
+
+
class FunctionTests(ExpressionTestBase):
def setUp(self):
@@ -319,7 +331,6 @@
self.fail('Engine accepted invalid namespace name')
def testBadFunction(self):
- from zope.tales.tales import CompilerError
# namespace is fine, adapter is not defined
try:
expr = self.engine.compile('adapterTest/namespace:title')
More information about the checkins
mailing list