[Kimchi-devel] [PATCH v4 3/3] Allow plugin use kimchi's ui handler

Sheldon shaohef at linux.vnet.ibm.com
Tue Jan 28 14:48:03 UTC 2014


Reviewed-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>

On 01/28/2014 02:21 PM, Mark Wu wrote:
> To make kimchi's error handler and tabs handler resued for plugin,
> this patch moves the resource related code into a subclass. With this
> change, the plugin can have error handler and tabs handler by
> inheriting from this class.
>
> Signed-off-by: Mark Wu <wudxw at linux.vnet.ibm.com>
> ---
>   src/kimchi/root.py     | 20 +++++++++++++-------
>   src/kimchi/server.py   |  4 ++--
>   src/kimchi/template.py |  5 ++---
>   3 files changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/src/kimchi/root.py b/src/kimchi/root.py
> index 6e107bc..c3d471e 100644
> --- a/src/kimchi/root.py
> +++ b/src/kimchi/root.py
> @@ -36,7 +36,7 @@ from kimchi.exception import OperationFailed
>
>
>   class Root(Resource):
> -    def __init__(self, model, dev_env):
> +    def __init__(self, model, dev_env=False):
>           super(Root, self).__init__(model)
>           self._handled_error = ['error_page.400', 'error_page.404',
>                                  'error_page.405', 'error_page.406',
> @@ -49,11 +49,6 @@ class Root(Resource):
>               self._cp_config = dict([(key, self.error_development_handler)
>                                       for key in self._handled_error])
>
> -        for ident, node in sub_nodes.items():
> -            setattr(self, ident, node(model))
> -        self.api_schema = json.load(open(os.path.join(paths.src_dir,
> -                                                      'API.json')))
> -
>       def error_production_handler(self, status, message, traceback, version):
>           data = {'code': status, 'reason': message}
>           res = template.render('error.html', data)
> @@ -70,7 +65,7 @@ class Root(Resource):
>           return res
>
>       def get(self):
> -        return self.default('kimchi-ui.html')
> +        return self.default(self.default_page)
>
>       @cherrypy.expose
>       def default(self, page, **kwargs):
> @@ -84,6 +79,17 @@ class Root(Resource):
>               return template.render('tabs/' + page, None)
>           raise cherrypy.HTTPError(404)
>
> +
> +class KimchiRoot(Root):
> +    def __init__(self, model, dev_env):
> +        super(KimchiRoot, self).__init__(model, dev_env)
> +        self.default_page = 'kimchi-ui.html'
> +        for ident, node in sub_nodes.items():
> +            setattr(self, ident, node(model))
> +        self.api_schema = json.load(open(os.path.join(paths.src_dir,
> +                                                      'API.json')))
> +        self.paths = paths
> +
>       @cherrypy.expose
>       def login(self, *args):
>           params = parse_request()
> diff --git a/src/kimchi/server.py b/src/kimchi/server.py
> index 9884249..6b5925c 100644
> --- a/src/kimchi/server.py
> +++ b/src/kimchi/server.py
> @@ -35,7 +35,7 @@ from kimchi import mockmodel
>   from kimchi import vnc
>   from kimchi.config import paths, PluginPaths
>   from kimchi.control import sub_nodes
> -from kimchi.root import Root
> +from kimchi.root import KimchiRoot
>   from kimchi.utils import get_enabled_plugins, import_class
>
>
> @@ -192,7 +192,7 @@ class Server(object):
>               if node.url_auth:
>                   self.configObj["/%s" % ident] = {'tools.kimchiauth.on': True}
>
> -        self.app = cherrypy.tree.mount(Root(model_instance, dev_env),
> +        self.app = cherrypy.tree.mount(KimchiRoot(model_instance, dev_env),
>                                          config=self.configObj)
>           self._load_plugins()
>
> diff --git a/src/kimchi/template.py b/src/kimchi/template.py
> index 37676b6..173e7c6 100644
> --- a/src/kimchi/template.py
> +++ b/src/kimchi/template.py
> @@ -31,9 +31,6 @@ from Cheetah.Template import Template
>   from glob import iglob
>
>
> -from kimchi.config import paths
> -
> -
>   def get_lang():
>       cookie = cherrypy.request.cookie
>       if "kimchiLang" in cookie.keys():
> @@ -56,6 +53,7 @@ def get_lang():
>
>
>   def get_support_languages():
> +    paths = cherrypy.request.app.root.paths
>       mopath = "%s/*" % paths.mo_dir
>       return [path.rsplit('/', 1)[1] for path in iglob(mopath)]
>
> @@ -92,6 +90,7 @@ def render(resource, data):
>           cherrypy.response.headers['Content-Type'] = 'application/json;charset=utf-8'
>           return json.dumps(data, indent=2, separators=(',', ':'))
>       elif can_accept_html():
> +        paths = cherrypy.request.app.root.paths
>           filename = paths.get_template_path(resource)
>           try:
>               params = {'data': data}


-- 
Thanks and best regards!

Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center




More information about the Kimchi-devel mailing list