Hi

I have been using zope.pagetemplate for quite some time within repoze.bfg projects and bobo (+zope.component) on google appengine
(python 2.5.x). I have just been doing some upgrades etc... and discovered that zope.pagetemplate in 3.5.2 has introduced a whole heap of new dependancies.

In 3.5.0 non testing install requirements where 

setuptools
zope.interface
zope.tales
zope.tal

where as 3.5.2 install requires

setuptools
zope.interface
zope.component
zope.security [untrustedpython]
zope.tales
zope.tal
zope.i18n
zope.i18nmessageid
zope.traversing


Now I already had i18n, i18nmessageid and zope.component, zope.interface as I was already using them, but now zope.security and zope.traversing means I also now get 

zope.browser-1.3-py2.5.egg
zope.contenttype-3.5.1-py2.5.egg
zope.exceptions-3.6.1-py2.5.egg
zope.location-3.9.0-py2.5.egg
zope.publisher-3.12.4-py2.5.egg
zope.security-3.7.3-py2.5-linux-x86_64.egg
zope.traversing-3.13-py2.5.egg
zope.proxy-3.6.1-py2.5-linux-x86_64.egg

I know that zope.pagetemplate.engine actually had a dependency on zope.traversing but this was never expressed in the EGG-INFO/requires.txt in 3.5.0.  I used my own engine given I always running trusted code.  (I am using metal as well).

So now for my modest proposal,  do you think it would be feasible to move the restricted engine implementations out of zope.pagetemplate.engine and into some higher level package and provide a simple trusted engine that anyone can use (that supports metal as well) 

As the architecture.txt  for zope.pagetemplate says

- An *expression engine* is responsible for compiling expressions and
  for creating expression execution contexts.  It is common for
  applications to override expression engines to provide custom
  expression support or to change the way expressions are implemented.
  The `zope.app.pagetemplate` package uses this to implement trusted
  and untrusted evaluation; a different engine is used for each, with
  different implementations of the same type of expressions.

So maybe the best place for the full expression engines would be zope.app.pagetemplate.

This would seem to be in keeping with a lot of the work, breaking down core zope technologies into re-usable (outside of a pure zope stack) components.

This would in theory bring the dependencies back down to 

zope.interface
zope.tales
zope.tal
zope.i18n 
zope.i18nmessageid

If people think this is a good idea, I am quite willing work on this (with guidance ;-), so thoughts, comments welcome.

TIA

Tim Hoffman