[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