[Zope-Checkins] SVN: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ merging Z3 ZPT implementation

Andreas Jung andreas at andreas-jung.com
Sat May 6 05:37:27 EDT 2006


Log message for revision 68002:
  merging Z3 ZPT implementation
  

Changed:
  A   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Engine.py
  U   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PageTemplateFile.py
  U   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZopePageTemplate.py

-=-
Copied: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/Engine.py (from rev 65738, Zope/branches/ajung-final-zpt-integration/lib/python/Products/PageTemplates/Engine.py)

Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PageTemplateFile.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PageTemplateFile.py	2006-05-06 08:42:31 UTC (rev 68001)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PageTemplateFile.py	2006-05-06 09:37:26 UTC (rev 68002)
@@ -10,35 +10,36 @@
 # FOR A PARTICULAR PURPOSE
 #
 ##############################################################################
-"""Filesystem Page Template module
 
-Zope object encapsulating a Page Template from the filesystem.
-"""
+import os
 
-__version__ = '$Revision: 1.30 $'[11:-2]
+from Globals import package_home, InitializeClass
+from App.config import getConfiguration
+from Acquisition import aq_parent, aq_inner
+from ZopePageTemplate import ZopePageTemplate
+from zope.app.content_types import guess_content_type
+import AccessControl
 
-import os, AccessControl
-from logging import getLogger
-from Globals import package_home, DevelopmentMode
+from ComputedAttribute import ComputedAttribute
+from OFS.SimpleItem import SimpleItem
+from Expressions import SecureModuleImporter
+from OFS.Traversable import Traversable
+from zope.pagetemplate.pagetemplatefile import PageTemplateFile as PTF
+from zope.pagetemplate.pagetemplate import PageTemplate as PT
+
 from Shared.DC.Scripts.Script import Script
+
+from OFS.SimpleItem import Item_w__name__
 from Shared.DC.Scripts.Signature import FuncCode
-from AccessControl import getSecurityManager
-from OFS.Traversable import Traversable
-from PageTemplate import PageTemplate
-from Expressions import SecureModuleImporter
-from ComputedAttribute import ComputedAttribute
-from Acquisition import aq_parent, aq_inner
-from App.config import getConfiguration
-from OFS.SimpleItem import Item_w__name__
 
+from Engine import Engine
 
-LOG = getLogger('PageTemplateFile')
 
-class PageTemplateFile(Item_w__name__, Script, PageTemplate, Traversable):
-    "Zope wrapper for filesystem Page Template using TAL, TALES, and METAL"
+class PageTemplateFile(SimpleItem, Script, PT, Traversable):
+    """ A Zope 2-aware wrapper class around the Zope 3 ZPT
+        PageTemplateFile implementation.
+    """
 
-    meta_type = 'Page Template (File)'
-
     func_defaults = None
     func_code = FuncCode((), 0)
     _v_last_read = 0
@@ -53,32 +54,47 @@
     security.declareProtected('View management screens',
       'read', 'document_src')
 
+    _default_bindings = {'name_subpath': 'traverse_subpath'}
+
+
     def __init__(self, filename, _prefix=None, **kw):
-        self.ZBindings_edit(self._default_bindings)
-        if _prefix is None:
-            _prefix = getConfiguration().softwarehome
-        elif not isinstance(_prefix, str):
-            _prefix = package_home(_prefix)
-        name = kw.get('__name__')
+
+        name = None
+        if kw.has_key('__name__'):
+            name = kw['__name__']
+            del kw['__name__'] 
+
         basepath, ext = os.path.splitext(filename)
+
         if name:
-            self._need__name__ = 0
-            self.__name__ = name
+            self.id = self.__name__ = name
         else:
-            self.__name__ = os.path.basename(basepath)
+            self.id = self.__name__ = os.path.basename(basepath)
+
+        if _prefix:
+            if isinstance(_prefix, str):
+                filename = os.path.join(_prefix, filename)
+            else:
+                filename = os.path.join(package_home(_prefix), filename)
+
         if not ext:
-            # XXX This is pretty bogus, but can't be removed since
-            # it's been released this way.
             filename = filename + '.zpt'
-        self.filename = os.path.join(_prefix, filename)
 
-    def getId(self):
-        """return the ID of this object"""
-        return self.__name__
-    
+        self.filename = filename
+
+        content = open(filename).read()
+
+        from ZopePageTemplate import guess_type
+        self.pt_edit( content, guess_type(filename, content))
+
+
+    def pt_getEngine(self):
+        return Engine
+
     def pt_getContext(self):
         root = self.getPhysicalRoot()
         context = self._getContext()
+        from DateTime.DateTime import DateTime
         c = {'template': self,
              'here': context,
              'context': context,
@@ -86,6 +102,7 @@
              'nothing': None,
              'options': {},
              'root': root,
+             'DateTime' : DateTime,
              'request': getattr(root, 'REQUEST', None),
              'modules': SecureModuleImporter,
              }
@@ -106,11 +123,14 @@
             pass
 
         # Execute the template in a new security context.
-        security = getSecurityManager()
+        security = AccessControl.getSecurityManager()
         bound_names['user'] = security.getUser()
         security.addContext(self)
+
         try:
-            return self.pt_render(extra_context=bound_names)
+            context = self.pt_getContext()
+            context.update(bound_names)
+            return self.pt_render(context)
         finally:
             security.removeContext(self)
 
@@ -187,20 +207,4 @@
         raise StorageError, ("Instance of AntiPersistent class %s "
                              "cannot be stored." % self.__class__.__name__)
 
-
-XML_PREFIXES = [
-    "<?xml",                      # ascii, utf-8
-    "\xef\xbb\xbf<?xml",          # utf-8 w/ byte order mark
-    "\0<\0?\0x\0m\0l",            # utf-16 big endian
-    "<\0?\0x\0m\0l\0",            # utf-16 little endian
-    "\xfe\xff\0<\0?\0x\0m\0l",    # utf-16 big endian w/ byte order mark
-    "\xff\xfe<\0?\0x\0m\0l\0",    # utf-16 little endian w/ byte order mark
-    ]
-
-XML_PREFIX_MAX_LENGTH = max(map(len, XML_PREFIXES))
-
-def sniff_type(text):
-    for prefix in XML_PREFIXES:
-        if text.startswith(prefix):
-            return "text/xml"
-    return None
+InitializeClass(PageTemplateFile)

Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZopePageTemplate.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZopePageTemplate.py	2006-05-06 08:42:31 UTC (rev 68001)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZopePageTemplate.py	2006-05-06 09:37:26 UTC (rev 68002)
@@ -38,8 +38,9 @@
 from zope.pagetemplate.pagetemplate import PageTemplate 
 from zope.pagetemplate.pagetemplatefile import sniff_type
 
-from Products.PageTemplates.Expressions import getEngine
+from Engine import Engine
 
+
 # regular expression to extract the encoding from the XML preamble
 encoding_reg= re.compile('<\?xml.*?encoding="(.*?)".*?\?>', re.M)
 
@@ -188,6 +189,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."""



More information about the Zope-Checkins mailing list