[Zope-Checkins] SVN: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ * Got rid of PythonExpr in favour of zope.tales.pythonexpr.

Philipp von Weitershausen philikon at philikon.de
Tue May 9 04:25:15 EDT 2006


Log message for revision 68046:
  * Got rid of PythonExpr in favour of zope.tales.pythonexpr.
  * Made ZRPythonExpr subclass the one from zope.tales.pythonexpr.
  * Made Expressions use ZRPythonExpr instead of the standard one
    from zope.tales.pythonexpr.
  

Changed:
  U   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py
  U   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PythonExpr.py
  U   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZRPythonExpr.py

-=-
Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py	2006-05-09 08:08:12 UTC (rev 68045)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Expressions.py	2006-05-09 08:25:14 UTC (rev 68046)
@@ -21,25 +21,21 @@
 from zope.tales.expressions import PathExpr, StringExpr, NotExpr
 from zope.tales.expressions import DeferExpr, SubPathExpr
 from zope.tales.expressions import SimpleModuleImporter
-from zope.tales.pythonexpr import PythonExpr
-from zope.i18n import translate
 from zope.traversing.adapters import traversePathElement
 
 from zExceptions import NotFound, Unauthorized
 from OFS.interfaces import ITraversable
 from Products.PageTemplates.DeferExpr import LazyExpr
 from Products.PageTemplates.GlobalTranslationService import getGlobalTranslationService
-from Products.PageTemplates.ZRPythonExpr import _SecureModuleImporter
+from Products.PageTemplates.ZRPythonExpr import PythonExpr, _SecureModuleImporter
 SecureModuleImporter = _SecureModuleImporter()
 
 # BBB 2005/05/01 -- remove after 12 months
-import zope.deferredimport
-zope.deferredimport.deprecatedFrom(
-    "Use the Zope 3 ZPT engine instead of the Zope 2 one.  Expression "
-    "types can be imported from zope.tales.expressions.  This reference "
-    "will be gone in Zope 2.12.",
-    "zope.tales.expressions",
-    "StringExpr", "NotExpr"
+import zope.deprecation
+zope.deprecation.deprecated(
+    ("StringExpr", "NotExpr", "PathExpr", "SubPathExpr"),
+    "Zope 2 uses the Zope 3 ZPT engine now.  Expression types can be "
+    "imported from zope.tales.expressions."
     )
 
 def boboTraverseAwareSimpleTraverse(object, path_items, econtext):

Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PythonExpr.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PythonExpr.py	2006-05-09 08:08:12 UTC (rev 68045)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PythonExpr.py	2006-05-09 08:25:14 UTC (rev 68046)
@@ -14,71 +14,11 @@
 
 $Id$
 """
-from TALES import CompilerError
-from sys import exc_info
-from zope.tales.expressions import DeferWrapper
-
-class getSecurityManager:
-    '''Null security manager'''
-    def validate(self, *args, **kwargs):
-        return 1
-    addContext = removeContext = validate
-
-class PythonExpr:
-    def __init__(self, name, expr, engine):
-        self.expr = expr = expr.strip().replace('\n', ' ')
-        try:
-            d = {}
-            exec 'def f():\n return %s\n' % expr.strip() in d
-            self._f = d['f']
-        except:
-            raise CompilerError, ('Python expression error:\n'
-                                  '%s: %s') % exc_info()[:2]
-        self._get_used_names()
-
-    def _get_used_names(self):
-        self._f_varnames = vnames = []
-        for vname in self._f.func_code.co_names:
-            if vname[0] not in '$_':
-                vnames.append(vname)
-
-    def _bind_used_names(self, econtext, _marker=[]):
-        # Bind template variables
-        names = {'CONTEXTS': econtext.contexts}
-        vars = econtext.vars
-        getType = econtext.getCompiler().getTypes().get
-        for vname in self._f_varnames:
-            val = vars.get(vname, _marker)
-            if val is _marker:
-                has = val = getType(vname)
-                if has:
-                    val = ExprTypeProxy(vname, val, econtext)
-                    names[vname] = val
-            else:
-                names[vname] = val
-        for key, val in names.items():
-            if isinstance(val, DeferWrapper):
-                names[key] = val()
-        return names
-
-    def __call__(self, econtext):
-        __traceback_info__ = self.expr
-        f = self._f
-        f.func_globals.update(self._bind_used_names(econtext))
-        return f()
-
-    def __str__(self):
-        return 'Python expression "%s"' % self.expr
-    def __repr__(self):
-        return '<PythonExpr %s>' % self.expr
-
-class ExprTypeProxy:
-    '''Class that proxies access to an expression type handler'''
-    def __init__(self, name, handler, econtext):
-        self._name = name
-        self._handler = handler
-        self._econtext = econtext
-    def __call__(self, text):
-        return self._handler(self._name, text,
-                             self._econtext.getCompiler())(self._econtext)
-
+# BBB 2005/05/01 -- remove after 12 months
+import zope.deferredimport
+zope.deferredimport.deprecatedFrom(
+    "Zope 2 uses the Zope 3 ZPT engine now.  The PythonExpr type can be "
+    "imported from zope.tales.pythonexpr.",
+    "zope.tales.pythonexpr",
+    "PythonExpr", "ExprTypeProxy"
+    )

Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZRPythonExpr.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZRPythonExpr.py	2006-05-09 08:08:12 UTC (rev 68045)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZRPythonExpr.py	2006-05-09 08:25:14 UTC (rev 68046)
@@ -19,30 +19,28 @@
 from AccessControl import safe_builtins
 from AccessControl.ZopeGuards import guarded_getattr, get_safe_globals
 from RestrictedPython import compile_restricted_eval
-from TALES import CompilerError
+from zope.tales.tales import CompilerError
+from zope.tales.pythonexpr import PythonExpr
 
-from PythonExpr import PythonExpr
-
 class PythonExpr(PythonExpr):
     _globals = get_safe_globals()
     _globals['_getattr_'] = guarded_getattr
     _globals['__debug__' ] = __debug__
 
     def __init__(self, name, expr, engine):
-        self.expr = expr = expr.strip().replace('\n', ' ')
-        code, err, warn, use = compile_restricted_eval(expr, str(self))
+        self.text = text = expr.strip().replace('\n', ' ')
+        code, err, warn, use = compile_restricted_eval(text, str(self))
         if err:
-            raise CompilerError, ('Python expression error:\n%s' %
-                                  '\n'.join(err) )
-        self._f_varnames = use.keys()
+            raise engine.getCompilerError()('Python expression error:\n%s' %
+                                            '\n'.join(err))            
+        self._varnames = use.keys()
         self._code = code
 
     def __call__(self, econtext):
-        __traceback_info__ = self.expr
-        code = self._code
-        g = self._bind_used_names(econtext)
-        g.update(self._globals)
-        return eval(code, g, {})
+        __traceback_info__ = self.text
+        vars = self._bind_used_names(econtext, {})
+        vars.update(self._globals)
+        return eval(self._code, vars, {})
 
 class _SecureModuleImporter:
     __allow_access_to_unprotected_subobjects__ = 1



More information about the Zope-Checkins mailing list