[Zope-Checkins]
SVN: Zope/branches/2.10/lib/python/Products/PageTemplates/
merged UnicodeEncodingConflictResolver
Andreas Jung
andreas at andreas-jung.com
Sun Jan 7 06:30:06 EST 2007
Log message for revision 71756:
merged UnicodeEncodingConflictResolver
Changed:
U Zope/branches/2.10/lib/python/Products/PageTemplates/Expressions.py
U Zope/branches/2.10/lib/python/Products/PageTemplates/ZopePageTemplate.py
A Zope/branches/2.10/lib/python/Products/PageTemplates/configure.zcml
A Zope/branches/2.10/lib/python/Products/PageTemplates/interfaces.py
A Zope/branches/2.10/lib/python/Products/PageTemplates/unicodeconflictresolver.py
-=-
Modified: Zope/branches/2.10/lib/python/Products/PageTemplates/Expressions.py
===================================================================
--- Zope/branches/2.10/lib/python/Products/PageTemplates/Expressions.py 2007-01-07 11:13:59 UTC (rev 71755)
+++ Zope/branches/2.10/lib/python/Products/PageTemplates/Expressions.py 2007-01-07 11:30:05 UTC (rev 71756)
@@ -17,6 +17,10 @@
$Id$
"""
+
+import logging
+
+from zope.component import getUtility
from zope.interface import implements
from zope.tales.tales import Context, Iterator
from zope.tales.expressions import PathExpr, StringExpr, NotExpr
@@ -31,13 +35,17 @@
from MultiMapping import MultiMapping
from Acquisition import aq_base
from zExceptions import NotFound, Unauthorized
+
from Products.Five.browser.providerexpression import Z2ProviderExpression
from Products.PageTemplates import ZRPythonExpr
from Products.PageTemplates.DeferExpr import LazyExpr
from Products.PageTemplates.GlobalTranslationService import getGlobalTranslationService
+from Products.PageTemplates.interfaces import IUnicodeEncodingConflictResolver
SecureModuleImporter = ZRPythonExpr._SecureModuleImporter()
+LOG = logging.getLogger('Expressions')
+
# BBB 2005/05/01 -- remove after 12 months
import zope.deprecation
from zope.deprecation import deprecate
@@ -173,6 +181,44 @@
domain, msgid, mapping=mapping,
context=context, default=default)
+
+ def evaluateText(self, expr):
+ """ customized version in order to get rid of unicode
+ errors for all and ever
+ """
+
+ text = self.evaluate(expr)
+
+ if text is self.getDefault() or text is None:
+ # XXX: should be unicode???
+ return text
+
+ if isinstance(text, unicode):
+ # we love unicode, nothing to do
+ return text
+
+ elif isinstance(text, str):
+ # bahh...non-unicode string..we need to convert it to unicode
+ resolver = getUtility(IUnicodeEncodingConflictResolver)
+
+ try:
+ return resolver.resolve(self.contexts['context'], text, expr)
+ except UnicodeDecodeError,e:
+ LOG.error("""UnicodeDecodeError detected for expression "%s"\n"""
+ """Resolver class: %s\n"""
+ """Exception text: %s\n"""
+ """Template: %s\n"""
+ """Rendered text: %r""" % \
+ (expr, resolver.__class__, e,
+ self.contexts['template'].absolute_url(1), text))
+ raise
+ else:
+
+ # This is a weird culprit ...calling unicode() on non-string
+ # objects
+ return unicode(text)
+
+
class ZopeEngine(zope.app.pagetemplate.engine.ZopeEngine):
_create_context = ZopeContext
Modified: Zope/branches/2.10/lib/python/Products/PageTemplates/ZopePageTemplate.py
===================================================================
--- Zope/branches/2.10/lib/python/Products/PageTemplates/ZopePageTemplate.py 2007-01-07 11:13:59 UTC (rev 71755)
+++ Zope/branches/2.10/lib/python/Products/PageTemplates/ZopePageTemplate.py 2007-01-07 11:30:05 UTC (rev 71756)
@@ -40,7 +40,8 @@
from Products.PageTemplates.PageTemplateFile import guess_type
from Products.PageTemplates.Expressions import SecureModuleImporter
-from Products.PageTemplates.utils import encodingFromXMLPreamble, charsetFromMetaEquiv, convertToUnicode
+from Products.PageTemplates.utils import encodingFromXMLPreamble, \
+ charsetFromMetaEquiv, convertToUnicode
preferred_encodings = ['utf-8', 'iso-8859-15']
@@ -103,7 +104,8 @@
security.declareProtected(view_management_screens,
'read', 'ZScriptHTML_tryForm')
- def __init__(self, id, text=None, content_type='text/html', strict=True, output_encoding='utf-8'):
+ def __init__(self, id, text=None, content_type='text/html', strict=True,
+ output_encoding='utf-8'):
self.id = id
self.expand = 0
self.ZBindings_edit(self._default_bindings)
@@ -139,16 +141,13 @@
charset = charsetFromMetaEquiv(text)
if is_unicode:
-
if charset:
encoding = None
output_encoding = charset
else:
encoding = None
output_encoding = 'iso-8859-15'
-
else:
-
if charset:
encoding = charset
output_encoding = charset
@@ -287,7 +286,9 @@
def write(self, text):
if not isinstance(text, unicode):
- text, encoding = convertToUnicode(text, self.content_type, preferred_encodings)
+ text, encoding = convertToUnicode(text,
+ self.content_type,
+ preferred_encodings)
self.output_encoding = encoding
self.ZCacheable_invalidate()
Copied: Zope/branches/2.10/lib/python/Products/PageTemplates/configure.zcml (from rev 71755, Zope/trunk/lib/python/Products/PageTemplates/configure.zcml)
Copied: Zope/branches/2.10/lib/python/Products/PageTemplates/interfaces.py (from rev 71755, Zope/trunk/lib/python/Products/PageTemplates/interfaces.py)
Copied: Zope/branches/2.10/lib/python/Products/PageTemplates/unicodeconflictresolver.py (from rev 71755, Zope/trunk/lib/python/Products/PageTemplates/unicodeconflictresolver.py)
More information about the Zope-Checkins
mailing list