[Kimchi-devel] [PATCH 1/3] Plugins: Fix plugins framework in kimchi

Aline Manera alinefm at linux.vnet.ibm.com
Thu Jan 16 02:31:45 UTC 2014


On 01/14/2014 02:17 PM, Rodrigo Trujillo wrote:
> If the plugin tab name string is not found in kimchi i18n file, the
> tab name is set as 'unknown'. This patch fixes this problem and also
> adds routines to add tab html file in cherrypy configuration automati
> cally.
>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
> ---
>   src/kimchi/server.py     | 38 ++++++++++++++++++++++++++++++++++++--
>   ui/js/src/kimchi.main.js |  2 +-
>   2 files changed, 37 insertions(+), 3 deletions(-)
>
> diff --git a/src/kimchi/server.py b/src/kimchi/server.py
> index b820263..919e2e0 100644
> --- a/src/kimchi/server.py
> +++ b/src/kimchi/server.py
> @@ -28,6 +28,10 @@ import logging.handlers
>   import os
>   import sslcert
>
> +
> +from xml.etree import ElementTree
> +
> +
>   from kimchi import auth
>   from kimchi import config
>   from kimchi import model
> @@ -208,13 +212,43 @@ class Server(object):
>                   script_name = plugin_config['kimchi']['uri']
>                   del plugin_config['kimchi']
>
> +                tabs_extra_file = config.get_plugin_tab_xml(plugin_name)
>                   plugin_config['/ui/config/tab-ext.xml'] = {
>                       'tools.staticfile.on': True,
> -                    'tools.staticfile.filename':
> -                    config.get_plugin_tab_xml(plugin_name),
> +                    'tools.staticfile.filename': tabs_extra_file,
>                       'tools.nocache.on': True}
> +



> +                # Providing plugin tabs htmls
> +                et = ElementTree.ElementTree(file=tabs_extra_file)
> +
> +                tabs = et.findall('tab')
> +                for tab in tabs:
> +                    html = tab.find('path').text
> +                    tabs_extra_file = os.path.join(config.get_prefix(), html)
> +                    if html.startswith('/'):
> +                        html = html.replace(script_name,'')
> +                    else:
> +                        html = html.replace(script_name[1:],'')
> +                    plugin_config[html] = {
> +                        'tools.staticfile.on': True,
> +                        'tools.staticfile.filename': tabs_extra_file,
> +                        'tools.nocache.on': True}
> +
>               except KeyError:
>                   continue
> +            except IOError as e:
> +                msg = "Failed to load plugin tabs file %s" %tabs_extra_file
> +                cherrypy.log.error_log.error(msg)
> +                cherrypy.log.error_log.error('Ignoring plugin "%s"',
> +                                             plugin_name)
> +                continue
> +            except ElementTree.ParseError as e:
> +                msg = "XML parse error in file %s: %s" %(
> +                          tabs_extra_file, e.msg)
> +                cherrypy.log.error_log.error(msg)
> +                cherrypy.log.error_log.error('Ignoring plugin "%s"',
> +                                             plugin_name)
> +                continue


 From kimchi perspective, we only need to know the tabs.xml for each 
plugin - so UI can load the interface in one view
All other cherrypy configuration should be handled by the plugin config 
file.
So all the above code isn't needed.


>
>               try:
>                   plugin_app = import_class(plugin_class)()
> diff --git a/ui/js/src/kimchi.main.js b/ui/js/src/kimchi.main.js
> index cc8afee..8b84a34 100644
> --- a/ui/js/src/kimchi.main.js
> +++ b/ui/js/src/kimchi.main.js
> @@ -211,7 +211,7 @@ kimchi.getTabHtml = function(url) {
>               $(xmlData).find('tab').each(function() {
>                   var $tab = $(this);
>                   var titleKey = $tab.find('title').text();
> -                var title = i18n[titleKey];
> +                var title = i18n[titleKey] || titleKey;
>                   var path = $tab.find('path').text();
>                   tabsHtml += "<li><a class='item' href=" + path + ">" + title + "</a></li>";
>               });




More information about the Kimchi-devel mailing list