Log message for revision 68056: We no longer need to do monkey business with the engine etc. At least I very much hope so...
Changed: D Products.Five/branches/ajung-zpt-end-game/browser/ReuseUtils.py D Products.Five/branches/ajung-zpt-end-game/browser/TrustedExpression.py U Products.Five/branches/ajung-zpt-end-game/browser/pagetemplatefile.py -=- Deleted: Products.Five/branches/ajung-zpt-end-game/browser/ReuseUtils.py =================================================================== --- Products.Five/branches/ajung-zpt-end-game/browser/ReuseUtils.py 2006-05-09 09:20:32 UTC (rev 68055) +++ Products.Five/branches/ajung-zpt-end-game/browser/ReuseUtils.py 2006-05-09 09:26:59 UTC (rev 68056) @@ -1,32 +0,0 @@ -############################################################################## -# -# Copyright (c) 2004, 2005 Zope Corporation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Utils to be reused - -$Id$ -""" -from new import function - -def rebindFunction(f,rebindDir=None,**rebinds): - '''return *f* with some globals rebound.''' - d= {} - if rebindDir : d.update(rebindDir) - if rebinds: d.update(rebinds) - if not d: return f - f= getattr(f,'im_func',f) - fd= f.func_globals.copy() - fd.update(d) - nf= function(f.func_code,fd,f.func_name,f.func_defaults or ()) - nf.__doc__= f.__doc__ - if f.__dict__ is not None: nf.__dict__= f.__dict__.copy() - return nf Deleted: Products.Five/branches/ajung-zpt-end-game/browser/TrustedExpression.py =================================================================== --- Products.Five/branches/ajung-zpt-end-game/browser/TrustedExpression.py 2006-05-09 09:20:32 UTC (rev 68055) +++ Products.Five/branches/ajung-zpt-end-game/browser/TrustedExpression.py 2006-05-09 09:26:59 UTC (rev 68056) @@ -1,141 +0,0 @@ -############################################################################## -# -# Copyright (c) 2004, 2005 Zope Corporation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Trusted expression - -$Id$ -""" -from Products.PageTemplates.PythonExpr import PythonExpr -from Products.PageTemplates.Expressions import \ - SubPathExpr, PathExpr, \ - StringExpr, \ - getEngine, installHandlers,\ - SecureModuleImporter - -from Products.Five.browser.ProviderExpression import ProviderExpr - -from ReuseUtils import rebindFunction - -ModuleImporter = SecureModuleImporter - -from zope.publisher.interfaces.browser import IBrowserRequest -from zope.interface import implements, Interface -from zope.publisher.browser import setDefaultSkin -from zope.traversing.namespace import nsParse, namespaceLookup -from zope.component import queryMultiAdapter - -class FakeRequest(dict): - implements(IBrowserRequest) - - def getURL(self): - return "http://codespeak.net/z3/five" - -def trustedTraverse(ob, path, ignored,): - if not path: return self - - get = getattr - has = hasattr - N = None - M = rebindFunction # artifical marker - - if isinstance(path, str): path = path.split('/') - else: path=list(path) - - REQUEST = get(ob, 'REQUEST', None) - if REQUEST is None: - REQUEST=FakeRequest() - setDefaultSkin(REQUEST) - REQUEST['TraversalRequestNameStack'] = path - path.reverse() - pop=path.pop - - if len(path) > 1 and not path[0]: - # Remove trailing slash - path.pop(0) - - if not path[-1]: - # If the path starts with an empty string, go to the root first. - pop() - self=ob.getPhysicalRoot() - - object = ob - while path: - name=pop() - __traceback_info__ = path, name - - if name == '..': - o=getattr(object, 'aq_parent', M) - if o is not M: - object=o - continue - - if name and name[:1] in '@+': - # Process URI segment parameters. - ns, nm = nsParse(name) - if ns: - try: - o = namespaceLookup(ns, nm, object, REQUEST).__of__(object) - except TraversalError: - raise KeyError(name) - object = o - continue - - t=get(object, '__bobo_traverse__', M) - if t is not M: o=t(REQUEST, name) - else: - o = get(object, name, M) - if o is M: - try: o = object[name] - except (AttributeError, TypeError): # better exception - o = queryMultiAdapter((object, REQUEST), Interface, name) - if o is not None: - o = o.__of__(object) - else: - raise AttributeError(name) - object = o - - return object - - -class SubPathExpr(SubPathExpr): - _eval = rebindFunction(SubPathExpr._eval.im_func, - restrictedTraverse=trustedTraverse, - ) - -class PathExpr(PathExpr): - __init__ = rebindFunction(PathExpr.__init__.im_func, - SubPathExpr=SubPathExpr, - ) - -class StringExpr(StringExpr): - __init__ = rebindFunction(StringExpr.__init__.im_func, - PathExpr=PathExpr, - ) - - -installHandlers = rebindFunction(installHandlers, - PathExpr=PathExpr, - StringExpr=StringExpr, - PythonExpr=PythonExpr, - ) - -def installHandlers2(engine): - installHandlers(engine) - engine.registerType('provider', ProviderExpr) - -_engine=None -getEngine = rebindFunction(getEngine, - _engine=_engine, - installHandlers=installHandlers2 - ) - Modified: Products.Five/branches/ajung-zpt-end-game/browser/pagetemplatefile.py =================================================================== --- Products.Five/branches/ajung-zpt-end-game/browser/pagetemplatefile.py 2006-05-09 09:20:32 UTC (rev 68055) +++ Products.Five/branches/ajung-zpt-end-game/browser/pagetemplatefile.py 2006-05-09 09:26:59 UTC (rev 68056) @@ -19,14 +19,11 @@ from Globals import package_home from Products.PageTemplates.PageTemplateFile import PageTemplateFile +from Products.PageTemplates.Expressions import SecureModuleImporter from zope.app.pagetemplate.viewpagetemplatefile import ViewMapper from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile -from Products.Five.browser.ReuseUtils import rebindFunction -from Products.Five.browser.TrustedExpression import getEngine, ModuleImporter - - class ZopeTwoPageTemplateFile(PageTemplateFile): """A strange hybrid between Zope 2 and Zope 3 page template. @@ -64,12 +61,6 @@ path = package_home(_prefix) return path - _cook = rebindFunction(PageTemplateFile._cook, - getEngine=getEngine) - - pt_render = rebindFunction(PageTemplateFile.pt_render, - getEngine=getEngine) - def pt_getContext(self): try: root = self.getPhysicalRoot() @@ -92,7 +83,7 @@ 'options': {}, 'root': root, 'request': request, - 'modules': ModuleImporter, + 'modules': SecureModuleImporter, } if view is not None: c['view'] = view _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins