[Kimchi-devel] [PATCH 1/8] refactor exception: Create a common Exception to translate error messages
Leonardo Augusto Guimarães Garcia
lagarcia at linux.vnet.ibm.com
Tue Feb 11 03:08:21 UTC 2014
Reviewed-by: Leonardo Garcia <lagarcia at br.ibm.com>
On 02/09/2014 08:47 PM, Aline Manera wrote:
> From: Aline Manera <alinefm at br.ibm.com>
>
> KimchiException will be the base for all other Exception types in Kimchi
> It will translate the error message before raising it.
> Then UI can use the message directly. That way we avoid duplicating messages
> on UI and backend.
> Also add i18n.py which will contain all the backend messages to be translated.
>
> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
> ---
> plugins/sample/Makefile.am | 1 +
> plugins/sample/__init__.py | 7 ++++++-
> plugins/sample/i18n.py | 29 +++++++++++++++++++++++++++++
> src/kimchi/Makefile.am | 1 +
> src/kimchi/exception.py | 28 ++++++++++++++++++++++++++++
> src/kimchi/i18n.py | 29 +++++++++++++++++++++++++++++
> src/kimchi/root.py | 3 +++
> 7 files changed, 97 insertions(+), 1 deletion(-)
> create mode 100644 plugins/sample/i18n.py
> create mode 100644 src/kimchi/i18n.py
>
> diff --git a/plugins/sample/Makefile.am b/plugins/sample/Makefile.am
> index 0cb5723..afab703 100644
> --- a/plugins/sample/Makefile.am
> +++ b/plugins/sample/Makefile.am
> @@ -26,4 +26,5 @@ EXTRA_DIST = \
> __init__.py \
> API.json \
> model.py \
> + i18n.py \
> sample.conf
> diff --git a/plugins/sample/__init__.py b/plugins/sample/__init__.py
> index a1fe44e..fff9aa7 100644
> --- a/plugins/sample/__init__.py
> +++ b/plugins/sample/__init__.py
> @@ -27,8 +27,10 @@ import os
> from cherrypy import expose
>
>
> +from kimchi.config import PluginPaths
> from kimchi.control.base import Collection, Resource
> -from model import Model
> +from plugins.sample.i18n import messages
> +from plugins.sample.model import Model
>
>
> model = Model()
> @@ -40,6 +42,9 @@ class Drawings(Resource):
> self.description = Description(model)
> self.rectangles = Rectangles(model)
> self.circles = Circles(model)
> + self.paths = PluginPaths('sample')
> + self.domain = 'sample'
> + self.messages = messages
> self.api_schema = json.load(open(os.path.join(os.path.dirname(
> os.path.abspath(__file__)), 'API.json')))
>
> diff --git a/plugins/sample/i18n.py b/plugins/sample/i18n.py
> new file mode 100644
> index 0000000..204460c
> --- /dev/null
> +++ b/plugins/sample/i18n.py
> @@ -0,0 +1,29 @@
> +#
> +# Project Kimchi
> +#
> +# Copyright IBM, Corp. 2013
> +#
> +# Authors:
> +# Aline Manera <alinefm at linux.vnet.ibm.com>
> +#
> +# This library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU Lesser General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +#
> +# This library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +# Lesser General Public License for more details.
> +#
> +# You should have received a copy of the GNU Lesser General Public
> +# License along with this library; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +import gettext
> +
> +_ = gettext.gettext
> +
> +
> +messages = {
> +}
> diff --git a/src/kimchi/Makefile.am b/src/kimchi/Makefile.am
> index 1653c0c..51a496e 100644
> --- a/src/kimchi/Makefile.am
> +++ b/src/kimchi/Makefile.am
> @@ -32,6 +32,7 @@ kimchi_PYTHON = \
> distroloader.py \
> exception.py \
> featuretests.py \
> + i18n.py \
> iscsi.py \
> isoinfo.py \
> mockmodel.py \
> diff --git a/src/kimchi/exception.py b/src/kimchi/exception.py
> index a37015b..7fcce54 100644
> --- a/src/kimchi/exception.py
> +++ b/src/kimchi/exception.py
> @@ -20,6 +20,34 @@
> # License along with this library; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>
> +import cherrypy
> +import gettext
> +
> +
> +from kimchi.template import get_lang, validate_language
> +
> +
> +class KimchiException(Exception):
> + def __init__(self, code='', args={}):
> + lang = validate_language(get_lang())
> + paths = cherrypy.request.app.root.paths
> + domain = cherrypy.request.app.root.domain
> + messages = cherrypy.request.app.root.messages
> + text = messages.get(code, code)
> +
> + try:
> + translation = gettext.translation(domain, paths.mo_dir, [lang])
> + except:
> + translation = gettext
> +
> + for key, value in args.iteritems():
> + if not isinstance(value, unicode):
> + args[key] = unicode(value, 'utf-8')
> +
> + msg = unicode(translation.gettext(text), 'utf-8') % args
> + pattern = "%s: %s" % (code, msg)
> + Exception.__init__(self, pattern)
> +
>
> class NotFoundError(Exception):
> pass
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> new file mode 100644
> index 0000000..204460c
> --- /dev/null
> +++ b/src/kimchi/i18n.py
> @@ -0,0 +1,29 @@
> +#
> +# Project Kimchi
> +#
> +# Copyright IBM, Corp. 2013
> +#
> +# Authors:
> +# Aline Manera <alinefm at linux.vnet.ibm.com>
> +#
> +# This library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU Lesser General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +#
> +# This library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +# Lesser General Public License for more details.
> +#
> +# You should have received a copy of the GNU Lesser General Public
> +# License along with this library; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +import gettext
> +
> +_ = gettext.gettext
> +
> +
> +messages = {
> +}
> diff --git a/src/kimchi/root.py b/src/kimchi/root.py
> index ce4a49c..2b5c4b8 100644
> --- a/src/kimchi/root.py
> +++ b/src/kimchi/root.py
> @@ -28,6 +28,7 @@ import os
>
> from kimchi import auth
> from kimchi import template
> +from kimchi.i18n import messages
> from kimchi.config import paths
> from kimchi.control import sub_nodes
> from kimchi.control.base import Resource
> @@ -95,6 +96,8 @@ class KimchiRoot(Root):
> self.api_schema = json.load(open(os.path.join(paths.src_dir,
> 'API.json')))
> self.paths = paths
> + self.domain = 'kimchi'
> + self.messages = messages
>
> @cherrypy.expose
> def login(self, *args):
More information about the Kimchi-devel
mailing list