[Zope-Checkins] SVN: Zope/trunk/ passing 'preferred_encodings' down to the encoding sniffer

Andreas Jung andreas at andreas-jung.com
Sat Dec 23 08:33:08 EST 2006


Log message for revision 71646:
  passing 'preferred_encodings' down to the encoding sniffer
  in order to make the sniffing a bit configurable for instances
  working with encodings other than iso-8859-15 or utf-8
  

Changed:
  U   Zope/trunk/doc/CHANGES.txt
  U   Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py
  U   Zope/trunk/lib/python/Products/PageTemplates/utils.py

-=-
Modified: Zope/trunk/doc/CHANGES.txt
===================================================================
--- Zope/trunk/doc/CHANGES.txt	2006-12-23 13:08:06 UTC (rev 71645)
+++ Zope/trunk/doc/CHANGES.txt	2006-12-23 13:33:07 UTC (rev 71646)
@@ -39,8 +39,14 @@
         until the late startup phase. This in in particular useful when running
         Zope behind a loadbalancer (patch by Patrick Gerken).
 
-      - the ZopePageTemplate implementation now uses unicode internally.        
+      - the ZopePageTemplate implementation now uses unicode internally.
+        Non-unicode instances are migrated on-the-fly to unicode. However this
+        will work only properly for ZPT instances formerly encoded as utf-8 or
+        ISO-8859-15. For other encodings you might set the environment variable
+        ZPT_REFERRED_ENCODING to insert your preferred encoding in front of utf-8 and
+        ISO-8859-15 within the encoding sniffer code.
 
+
     Bugs Fixed
 
       - Collector #2191: extended DateTime parser for better support

Modified: Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py
===================================================================
--- Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py	2006-12-23 13:08:06 UTC (rev 71645)
+++ Zope/trunk/lib/python/Products/PageTemplates/ZopePageTemplate.py	2006-12-23 13:33:07 UTC (rev 71646)
@@ -408,7 +408,9 @@
         # Perform on-the-fly migration to unicode.
         # Perhaps it might be work with the 'generation' module here?
         if not isinstance(state['_text'], unicode):
-            text, encoding = convertToUnicode(state['_text'], state.get('content_type', 'text/html'))
+            text, encoding = convertToUnicode(state['_text'], 
+                                    state.get('content_type', 'text/html'), 
+                                    preferred_encodings)
             state['_text'] = text
             state['output_encoding'] = encoding
         self.__dict__.update(state) 
@@ -423,32 +425,7 @@
     def wl_isLocked(self):
         return 0
 
-    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')
-                    else:
-                        return
-                except UnicodeDecodeError:
-                    pass
 
-            raise RuntimeError('Pagetemplate could not be converted to unicode')
-
-        else:
-            if RESPONSE:
-                return RESPONSE.redirect(self.absolute_url() +
-                                         '/pt_editForm?manage_tabs_message='
-                                         'ZPT+already+converted')
-            else:
-                return
-
 InitializeClass(ZopePageTemplate)
 
 setattr(ZopePageTemplate, 'source.xml',  ZopePageTemplate.source_dot_xml)

Modified: Zope/trunk/lib/python/Products/PageTemplates/utils.py
===================================================================
--- Zope/trunk/lib/python/Products/PageTemplates/utils.py	2006-12-23 13:08:06 UTC (rev 71645)
+++ Zope/trunk/lib/python/Products/PageTemplates/utils.py	2006-12-23 13:33:07 UTC (rev 71646)
@@ -58,7 +58,7 @@
 
                                                                           
 
-def convertToUnicode(source, content_type):
+def convertToUnicode(source, content_type, preferred_encodings):
     """ Convert 'source' to unicode.
         Returns (unicode_str, source_encoding).
     """
@@ -77,7 +77,7 @@
         # including them into the Zope 2 core
 
         if not encoding:
-            for enc in ('utf-8', 'iso-8859-15'):
+            for enc in preferred_encodings:
                 try:
                     return unicode(source, enc), enc
                 except UnicodeDecodeError:



More information about the Zope-Checkins mailing list