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.""" _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins