[Checkins] Re: [Zope-Checkins] SVN: Zope/trunk/ support for a configurable resolver for UnicodeDecodeErrors

Chris Withers chris at simplistix.co.uk
Mon Jan 8 04:21:48 EST 2007


I must have missed it, but where are your tests for this and the other 
unicode changes?

Andreas Jung wrote:
> Log message for revision 71753:
>   support for a configurable resolver for UnicodeDecodeErrors
>   
> 
> Changed:
>   U   Zope/trunk/doc/CHANGES.txt
>   U   Zope/trunk/lib/python/Products/PageTemplates/Expressions.py
>   A   Zope/trunk/lib/python/Products/PageTemplates/configure.zcml
>   A   Zope/trunk/lib/python/Products/PageTemplates/interfaces.py
>   A   Zope/trunk/lib/python/Products/PageTemplates/unicodeconflictresolver.py
> 
> -=-
> Modified: Zope/trunk/doc/CHANGES.txt
> ===================================================================
> --- Zope/trunk/doc/CHANGES.txt	2007-01-07 10:25:20 UTC (rev 71752)
> +++ Zope/trunk/doc/CHANGES.txt	2007-01-07 10:32:39 UTC (rev 71753)
> @@ -48,6 +48,10 @@
>          'output_encodings' property that controls the conversion from/to unicode
>          for WebDAV/FTP operations.
>  
> +      - the ZPT implementation has now a configurable option in order how to deal 
> +        with UnicodeDecodeErrors. A custom UnicodeEncodingConflictResolver can
> +        be configured through ZCML (see Products/PageTemplates/(configure.zcml,
> +        unicodeconflictresolver.py, interfaces.py)
>  
>      Bugs Fixed
>  
> 
> Modified: Zope/trunk/lib/python/Products/PageTemplates/Expressions.py
> ===================================================================
> --- Zope/trunk/lib/python/Products/PageTemplates/Expressions.py	2007-01-07 10:25:20 UTC (rev 71752)
> +++ Zope/trunk/lib/python/Products/PageTemplates/Expressions.py	2007-01-07 10:32:39 UTC (rev 71753)
> @@ -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
> 
> Copied: Zope/trunk/lib/python/Products/PageTemplates/configure.zcml (from rev 71752, Zope/branches/ajung-death-to-unicode-errors/lib/python/Products/PageTemplates/configure.zcml)
> 
> Copied: Zope/trunk/lib/python/Products/PageTemplates/interfaces.py (from rev 71752, Zope/branches/ajung-death-to-unicode-errors/lib/python/Products/PageTemplates/interfaces.py)
> 
> Copied: Zope/trunk/lib/python/Products/PageTemplates/unicodeconflictresolver.py (from rev 71752, Zope/branches/ajung-death-to-unicode-errors/lib/python/Products/PageTemplates/unicodeconflictresolver.py)
> 
> _______________________________________________
> Zope-Checkins maillist  -  Zope-Checkins at zope.org
> http://mail.zope.org/mailman/listinfo/zope-checkins
> 

-- 
Simplistix - Content Management, Zope & Python Consulting
            - http://www.simplistix.co.uk


More information about the Checkins mailing list