[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