[Kimchi-devel] [PATCH] Always use unicode in KimchiException message

Daniel H Barboza danielhb at linux.vnet.ibm.com
Thu Jul 17 15:19:09 UTC 2014


Reviewed-by: Daniel Barboza <danielhb at linux.vnet.ibm.com>
Tested-by: Daniel Barboza <danielhb at linux.vnet.ibm.com>

On 07/15/2014 01:50 PM, alinefm at linux.vnet.ibm.com wrote:
> From: Aline Manera <alinefm at linux.vnet.ibm.com>
>
> When KimchiException was raised inside a cherrypy application it returned
> a unicode message. But if the exception was raised independently the cherrypy
> server (ie, using model instance directly) it returned a string message.
> To keep the same behavior in all those situations, let KimchiException
> always returns a unicode message
>
> Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
> ---
>   src/kimchi/exception.py | 35 ++++++++++++++++++-----------------
>   1 file changed, 18 insertions(+), 17 deletions(-)
>
> diff --git a/src/kimchi/exception.py b/src/kimchi/exception.py
> index fcf60cc..d84ddb9 100644
> --- a/src/kimchi/exception.py
> +++ b/src/kimchi/exception.py
> @@ -29,18 +29,29 @@ class KimchiException(Exception):
>       def __init__(self, code='', args={}):
>           self.code = code
>
> +        for key, value in args.iteritems():
> +            if isinstance(value, unicode):
> +                continue
> +
> +            # value is not unicode: convert it
> +            try:
> +                # In case the value formats itself to an ascii string.
> +                args[key] = unicode(str(value), 'utf-8')
> +            except UnicodeEncodeError:
> +                # In case the value is a KimchiException or it formats
> +                # itself to a unicode string.
> +                args[key] = unicode(value)
> +
>           if cherrypy.request.app:
> -            msg = self._get_translation(args)
> +            msg = self._get_translation()
>           else:
> -            for key, value in args.iteritems():
> -                if isinstance(value, unicode):
> -                    args[key] = value.encode('utf-8')
> -            msg = _messages.get(code, code) % args
> +            msg = _messages.get(code, code)
>
> +        msg = unicode(msg, 'utf-8') % args
>           pattern = "%s: %s" % (code, msg)
>           Exception.__init__(self, pattern)
>
> -    def _get_translation(self, args):
> +    def _get_translation(self):
>           lang = validate_language(get_lang())
>           paths = cherrypy.request.app.root.paths
>           domain = cherrypy.request.app.root.domain
> @@ -52,17 +63,7 @@ def _get_translation(self, args):
>           except:
>               translation = gettext
>
> -        for key, value in args.iteritems():
> -            if not isinstance(value, unicode):
> -                try:
> -                    # In case the value formats itself to an ascii string.
> -                    args[key] = unicode(str(value), 'utf-8')
> -                except UnicodeEncodeError:
> -                    # In case the value is a KimchiException or it formats
> -                    # itself to a unicode string.
> -                    args[key] = unicode(value)
> -
> -        return unicode(translation.gettext(text), 'utf-8') % args
> +        return translation.gettext(text)
>
>
>   class NotFoundError(KimchiException):




More information about the Kimchi-devel mailing list