[Zope-Checkins] SVN: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ Do some heavy clean up in ZopePageTemplate which gets rid of a lot of temporary

Philipp von Weitershausen philikon at philikon.de
Sun May 21 11:45:15 EDT 2006


Log message for revision 68217:
  Do some heavy clean up in ZopePageTemplate which gets rid of a lot of temporary
  hacks that were in there before.  Tried to reduce the diff to the Zope 2.9 code
  a little and moved some content type guessing code to PageTemplateFile where it
  really belongs (that also avoids a circular import problem).
  

Changed:
  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
  U   Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/tests/testZopePageTemplate.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-21 15:28:31 UTC (rev 68216)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/PageTemplateFile.py	2006-05-21 15:45:14 UTC (rev 68217)
@@ -25,12 +25,18 @@
 from Shared.DC.Scripts.Signature import FuncCode
 from Products.PageTemplates.Expressions import SecureModuleImporter
 from Products.PageTemplates.PageTemplate import PageTemplate
-from Products.PageTemplates.ZopePageTemplate import guess_type
 
 from zope.contenttype import guess_content_type
+from zope.pagetemplate.pagetemplatefile import sniff_type
 
 LOG = getLogger('PageTemplateFile')
 
+def guess_type(filename, text):
+    content_type, dummy = guess_content_type(filename, text)
+    if content_type in ('text/html', 'text/xml'):
+        return content_type
+    return sniff_type(text) or 'text/html'
+
 class PageTemplateFile(SimpleItem, Script, PageTemplate, Traversable):
     """Zope 2 implementation of a PageTemplate loaded from a file."""
 

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-21 15:28:31 UTC (rev 68216)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/ZopePageTemplate.py	2006-05-21 15:45:14 UTC (rev 68217)
@@ -34,26 +34,32 @@
 
 from webdav.Lockable import ResourceLockedError
 from webdav.WriteLockInterface import WriteLockInterface
-from zope.contenttype import guess_content_type
-from zope.pagetemplate.pagetemplatefile import sniff_type
 
 from Products.PageTemplates.PageTemplate import PageTemplate
-from Products.PageTemplates.Expressions import getEngine
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+from Products.PageTemplates.PageTemplateFile import guess_type
 from Products.PageTemplates.Expressions import SecureModuleImporter
 
-
 # regular expression to extract the encoding from the XML preamble
-encoding_reg= re.compile('<\?xml.*?encoding="(.*?)".*?\?>', re.M)
+encoding_reg = re.compile('<\?xml.*?encoding="(.*?)".*?\?>', re.M)
 
 preferred_encodings = ['utf-8', 'iso-8859-15']
 if os.environ.has_key('ZPT_PREFERRED_ENCODING'):
     preferred_encodings.insert(0, os.environ['ZPT_PREFERRED_ENCODING'])
 
+def sniffEncoding(text, default_encoding='utf-8'):
+    """Try to determine the encoding from html or xml"""
+    if text.startswith('<?xml'):
+        mo = encoding_reg.search(text)
+        if mo:
+            return mo.group(1)
+    return default_encoding
+
 class Src(Acquisition.Explicit):
     """ I am scary code """
 
-    index_html = None
     PUT = document_src = Acquisition.Acquired
+    index_html = None
 
     def __before_publishing_traverse__(self, ob, request):
         if getattr(request, '_hacked_path', 0):
@@ -63,29 +69,9 @@
         " "
         return self.document_src(REQUEST)
 
-
-def sniffEncoding(text, default_encoding='utf-8'):
-    """ try to determine the encoding from html or xml """
-    if text.startswith('<?xml'):
-        mo = encoding_reg.search(text)
-        if mo:
-            return mo.group(1)
-    return default_encoding
-
-
-def guess_type(filename, text):
-    content_type, dummy = guess_content_type(filename, text)
-    if content_type in ('text/html', 'text/xml'):
-        return content_type
-
-    return sniff_type(text) or 'text/html'
-
-_default_content_fn = os.path.join(package_home(globals()), 'pt', 'default.html')
-  
-
 class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
                        Traversable, PropertyManager):
-    """ Z2 wrapper class for Zope 3 page templates """
+    "Zope wrapper for Page Template using TAL, TALES, and METAL"
 
     __implements__ = (WriteLockInterface,)
 
@@ -95,7 +81,8 @@
     func_code = FuncCode((), 0)
 
     _default_bindings = {'name_subpath': 'traverse_subpath'}
-    _default_content_fn = os.path.join(package_home(globals()), 'www', 'default.html')
+    _default_content_fn = os.path.join(package_home(globals()),
+                                       'www', 'default.html')
 
     manage_options = (
         {'label':'Edit', 'action':'pt_editForm',
@@ -114,28 +101,40 @@
 
     security = ClassSecurityInfo()
     security.declareObjectProtected(view)
+
+    # protect methods from base class(es)
     security.declareProtected(view, '__call__')
+    security.declareProtected(view_management_screens,
+                              'read', 'ZScriptHTML_tryForm')
 
-    def __init__(self, id, text=None, content_type=None, encoding='utf-8', strict=False):
+    def __init__(self, id, text=None, content_type=None, encoding='utf-8',
+                 strict=False):
         self.id = id
         self.expand = 0                                                               
         self.strict = strict
         self.ZBindings_edit(self._default_bindings)
+        if not text:
+            text = open(self._default_content_fn).read()
+            encoding = 'utf-8'
+            content_type = 'text/html'
         self.pt_edit(text, content_type, encoding)
 
-    def pt_getEngine(self):
-        return getEngine()
-
     security.declareProtected(change_page_templates, 'pt_edit')
     def pt_edit(self, text, content_type, encoding='utf-8'):
-
         text = text.strip()
         if self.strict and not isinstance(text, unicode):
             text = unicode(text, encoding)
 
         self.ZCacheable_invalidate()
-        PageTemplate.pt_edit(self, text, content_type)
+        super(ZopePageTemplate, self).pt_edit(text, content_type)
 
+    pt_editForm = PageTemplateFile('www/ptEdit', globals(),
+                                   __name__='pt_editForm')
+    pt_editForm._owner = None
+    manage = manage_main = pt_editForm
+
+    source_dot_xml = Src()
+
     security.declareProtected(change_page_templates, 'pt_editAction')
     def pt_editAction(self, REQUEST, title, text, content_type, encoding, expand):
         """Change the title and document."""
@@ -155,24 +154,17 @@
                        % '<br>'.join(self._v_warnings))
         return self.pt_editForm(manage_tabs_message=message)
 
-
     security.declareProtected(change_page_templates, 'pt_setTitle')
     def pt_setTitle(self, title, encoding='utf-8'):
         if self.strict and not isinstance(title, unicode):
             title = unicode(title, encoding)
         self._setPropValue('title', title)
 
-
     def _setPropValue(self, id, value):
         """ set a property and invalidate the cache """
         PropertyManager._setPropValue(self, id, value)
         self.ZCacheable_invalidate()
 
-
-    def pt_getEngine(self):
-        return getEngine()
-
-
     security.declareProtected(change_page_templates, 'pt_upload')
     def pt_upload(self, REQUEST, file='', encoding='utf-8'):
         """Replace the document with the text in file."""
@@ -224,12 +216,12 @@
         """Parameters to test the script with."""
         return []
 
-#    def manage_historyCompare(self, rev1, rev2, REQUEST,
-#                              historyComparisonResults=''):
-#        return ZopePageTemplate.inheritedAttribute(
-#            'manage_historyCompare')(
-#            self, rev1, rev2, REQUEST,
-#            historyComparisonResults=html_diff(rev1._text, rev2._text) )
+    def manage_historyCompare(self, rev1, rev2, REQUEST,
+                              historyComparisonResults=''):
+        return ZopePageTemplate.inheritedAttribute(
+            'manage_historyCompare')(
+            self, rev1, rev2, REQUEST,
+            historyComparisonResults=html_diff(rev1._text, rev2._text) )
 
     def pt_getContext(self, *args, **kw):
         root = self.getPhysicalRoot()
@@ -246,8 +238,9 @@
              }
         return c
 
-    security.declareProtected(view_management_screens, 'read',
-      'ZScriptHTML_tryForm')
+    def write(self, text):
+        self.ZCacheable_invalidate()
+        ZopePageTemplate.inheritedAttribute('write')(self, text)
 
     def _exec(self, bound_names, args, kw):
         """Call a Page Template"""
@@ -297,7 +290,7 @@
         """ Handle HTTP PUT requests """
         self.dav__init(REQUEST, RESPONSE)
         self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1)
-        ## XXX:this should be unicode or we must pass an encoding
+        ## XXX this should be unicode or we must pass an encoding
         self.pt_edit(REQUEST.get('BODY', ''))
         RESPONSE.setStatus(204)
         return RESPONSE
@@ -306,7 +299,6 @@
     manage_FTPput = PUT
 
     security.declareProtected(ftp_access, 'manage_FTPstat','manage_FTPlist')
-
     security.declareProtected(ftp_access, 'manage_FTPget')
     def manage_FTPget(self):
         "Get source for FTP download"
@@ -350,7 +342,6 @@
                               'title': 'This template has an error'},)
         return icons
 
-
     security.declareProtected(view, 'pt_source_file')
     def pt_source_file(self):
         """Returns a file name to be compiled into the TAL code."""
@@ -364,24 +355,17 @@
     def wl_isLocked(self):
         return 0
 
-    security.declareProtected(view, 'strictUnicode')
-    def strictUnicode(self):
-        """ Return True if the ZPT enforces the use of unicode,
-            False otherwise.
-        """
-        return self.strict
-
-
-    def manage_convertUnicode(self, preferred_encodings=preferred_encodings, RESPONSE=None):
-        """ convert non-unicode templates to unicode """
-
+    def manage_convertUnicode(self, preferred_encodings=preferred_encodings,
+                              RESPONSE=None):
+        """Convert non-unicode templates to unicode"""
         if not isinstance(self._text, unicode):
-
             for encoding in preferred_encodings:
                 try:
                     self._text = unicode(self._text, encoding)
                     if RESPONSE:
-                        return RESPONSE.redirect(self.absolute_url() + '/pt_editForm?manage_tabs_message=ZPT+successfully+converted')
+                        return RESPONSE.redirect(self.absolute_url() +
+                                                 '/pt_editForm?manage_tabs_message='
+                                                 'ZPT+successfully+converted')
                     else:
                         return
                 except UnicodeDecodeError:
@@ -391,49 +375,23 @@
 
         else:
             if RESPONSE:
-                return RESPONSE.redirect(self.absolute_url() + '/pt_editForm?manage_tabs_message=ZPT+already+converted')
+                return RESPONSE.redirect(self.absolute_url() +
+                                         '/pt_editForm?manage_tabs_message='
+                                         'ZPT+already+converted')
             else:
                 return
 
-
-    security.declareProtected(view_management_screens, 'getSource')
-    getSource = Src()
-    source_dot_xml = Src()
-
 InitializeClass(ZopePageTemplate)
 
-
 setattr(ZopePageTemplate, 'source.xml',  ZopePageTemplate.source_dot_xml)
 setattr(ZopePageTemplate, 'source.html', ZopePageTemplate.source_dot_xml)
 
+# Product registration and Add support
+manage_addPageTemplateForm = PageTemplateFile(
+    'www/ptAdd', globals(), __name__='manage_addPageTemplateForm')
 
-def _newZPT(id, filename):
-    """ factory to generate ZPT instances from the file-system
-        based templates (basically for internal purposes)
-    """
-    zpt = ZopePageTemplate(id, open(filename).read(), 'text/html')
-    zpt.__name__= id
-    return zpt
-
-class FSZPT(ZopePageTemplate):
-    """ factory to generate ZPT instances from the file-system
-        based templates (basically for internal purposes)
-    """
-
-    def __init__(self, id, filename):
-        ZopePageTemplate.__init__(self, id, open(filename).read(), 'text/html')
-        self.__name__= id
-
-InitializeClass(FSZPT)
-
-
-ZopePageTemplate.pt_editForm = FSZPT('pt_editForm', os.path.join(package_home(globals()),'pt', 'ptEdit.pt'))
-# this is scary, do we need this?
-ZopePageTemplate.manage = ZopePageTemplate.pt_editForm
-
-manage_addPageTemplateForm= FSZPT('manage_addPageTemplateForm', os.path.join(package_home(globals()), 'pt', 'ptAdd.pt'))
-
-def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8', submit=None, REQUEST=None, RESPONSE=None):
+def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8',
+                           submit=None, REQUEST=None, RESPONSE=None):
     "Add a Page Template with optional file content."
 
     filename = ''
@@ -461,11 +419,6 @@
                 content_type = guess_type(filename, text) 
         encoding = sniffEncoding(text, encoding)
 
-    if not text:
-        text = open(_default_content_fn).read()
-        encoding = 'utf-8'
-        content_type = 'text/html'
-
     zpt = ZopePageTemplate(id, text, content_type, encoding)
     zpt.pt_setTitle(title, encoding)
     self._setObject(id, zpt)

Modified: Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py
===================================================================
--- Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py	2006-05-21 15:28:31 UTC (rev 68216)
+++ Zope/branches/ajung-zpt-end-game/lib/python/Products/PageTemplates/tests/testZopePageTemplate.py	2006-05-21 15:45:14 UTC (rev 68217)
@@ -12,7 +12,6 @@
 import transaction
 
 from Testing.makerequest import makerequest
-from Products.PageTemplates.ZopePageTemplate import _default_content_fn
 
 class ZPTRegressions(unittest.TestCase):
 
@@ -35,7 +34,7 @@
 
     def testAddWithoutParams(self):
         pt = self._addPT('pt1')
-        default_text = open(_default_content_fn).read()
+        default_text = open(pt._default_content_fn).read()
         self.assertEqual(pt.title, '')
         self.assertEqual(pt.document_src().strip(), default_text.strip())
 



More information about the Zope-Checkins mailing list