Log message for revision 65686: - refactored Engine and moved it out from Five - translation service needs to be rehooked
Changed: A Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/Engine.py U Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/PageTemplateFile.py U Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/ZopePageTemplate.py -=- Added: Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/Engine.py =================================================================== --- Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/Engine.py 2006-03-01 22:47:54 UTC (rev 65685) +++ Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/Engine.py 2006-03-01 23:07:10 UTC (rev 65686) @@ -0,0 +1,95 @@ + +# Common Engine for Zope3-ZPT-in-Zope-2 + + +from zope.tales.tales import ExpressionEngine +from zope.tales.expressions import PathExpr, StringExpr, NotExpr, DeferExpr, SubPathExpr +from zope.tales.expressions import SimpleModuleImporter, _marker +from zope.tales.pythonexpr import PythonExpr +from zope.tales.tales import _valid_name, _parse_expr, NAME_RE, Undefined + + +def BoboTraverseAwareSimpleTraverse(object, path_items, econtext): + """ a slightly modified version of zope.tales.expressions.simpleTraverse() + that interacts correctly with objects implementing bobo_traverse(). + """ + + for name in path_items: + next = getattr(object, name, _marker) + if next is not _marker: + object = next + else: + try: + object = object.restrictedTraverse(name) + except (KeyError, AttributeError): + try: + object = object[name] + except: + object = getattr(object, name) + + return object + + +class PathExpr(PathExpr): + """We need to subclass PathExpr at this point since there is no other + away to pass our own traverser because we do not instantiate + PathExpr on our own...this sucks! + """ + + def __init__(self, name, expr, engine, traverser=BoboTraverseAwareSimpleTraverse): + self._s = expr + self._name = name + paths = expr.split('|') + self._subexprs = [] + add = self._subexprs.append + for i in range(len(paths)): + path = paths[i].lstrip() + if _parse_expr(path): + # This part is the start of another expression type, + # so glue it back together and compile it. + add(engine.compile('|'.join(paths[i:]).lstrip())) + break + add(SubPathExpr(path, traverser, engine)._eval) + + +from zope.tales.tales import Context + + +from zope.i18n import translate + +class Context(Context): + + + def translate(self, msgid, domain=None, mapping=None, default=None): + # fix that + return msgid +# return translate(msgid, domain, mapping, +# context=context, default=default) + + + +class ExpressionEngine(ExpressionEngine): + + def getContext(self, contexts=None, **kwcontexts): + if contexts is not None: + if kwcontexts: + kwcontexts.update(contexts) + else: + kwcontexts = contexts + return Context(self, kwcontexts) + + +def Engine(): + e = ExpressionEngine() + reg = e.registerType + for pt in PathExpr._default_type_names: + reg(pt, PathExpr) + reg('string', StringExpr) + reg('python', PythonExpr) + reg('not', NotExpr) + reg('defer', DeferExpr) + e.registerBaseName('modules', SimpleModuleImporter()) + return e + +Engine = Engine() + Modified: Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/PageTemplateFile.py =================================================================== --- Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/PageTemplateFile.py 2006-03-01 22:47:54 UTC (rev 65685) +++ Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/PageTemplateFile.py 2006-03-01 23:07:10 UTC (rev 65686) @@ -32,7 +32,9 @@ from OFS.SimpleItem import Item_w__name__ from Shared.DC.Scripts.Signature import FuncCode +from Engine import Engine + class PageTemplateFile(SimpleItem, Script, PT, Traversable): """ A Zope 2-aware wrapper class around the Zope 3 ZPT PageTemplateFile implementation. @@ -86,6 +88,9 @@ self.pt_edit( content, guess_type(filename, content)) + def pt_getEngine(self): + return Engine + def pt_getContext(self): root = self.getPhysicalRoot() context = self._getContext() Modified: Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/ZopePageTemplate.py =================================================================== --- Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/ZopePageTemplate.py 2006-03-01 22:47:54 UTC (rev 65685) +++ Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/ZopePageTemplate.py 2006-03-01 23:07:10 UTC (rev 65686) @@ -38,6 +38,8 @@ from zope.pagetemplate.pagetemplate import PageTemplate from zope.pagetemplate.pagetemplatefile import sniff_type +from Engine import Engine + # regular expression to extract the encoding from the XML preamble encoding_reg= re.compile('<\?xml.*?encoding="(.*?)".*?\?>', re.M) @@ -175,6 +177,10 @@ self.ZCacheable_invalidate() + def pt_getEngine(self): + return Engine + + security.declareProtected(change_page_templates, 'pt_upload') def pt_upload(self, REQUEST, file='', encoding='utf-8'): """Replace the document with the text in file.""" _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins