def installPlugin(self, plugin_name=None, test_mode=False, dev_mode=False, version=None): version_str = "" if Plugin.objects(name=plugin_name): return {'status': 'fail', 'log': unicode(_('Plugin already installed'))} if version: version_str = ''.join(["==", version]) if not dev_mode: # This test mode is here only for travis to allow installing plugin in a readable directory if test_mode: pip.main(['install', '--quiet', '--install-option=--install-platlib=' + os.getcwd() + '/../', '--install-option=--install-purelib=' + os.getcwd() + '/../', 'lisa-plugin-' + plugin_name + version_str]) else: pip.main(['install', 'lisa-plugin-' + plugin_name + version_str]) jsonfile = self.pkgpath + '/' + plugin_name + '/' + plugin_name.lower() + '.json' metadata = json.load(open(jsonfile)) plugin = Plugin() description_list = [] for item in metadata: if item != 'crons' and item != 'rules': if item == 'description': for description in metadata[item]: oDescription = Description() for k,v in description.iteritems(): setattr(oDescription, k, v) description_list.append(oDescription) setattr(plugin, item, description_list) elif item == 'enabled': if metadata[item] == 0: setattr(plugin, item, False) else: setattr(plugin, item, True) else: setattr(plugin, item, metadata[item]) plugin.save() for item in metadata: if item == 'rules': for rule_item in metadata['rules']: rule = Rule() for parameter in rule_item: if parameter == 'enabled': if rule_item[parameter] == 0: setattr(rule, parameter, False) else: setattr(rule, parameter, True) else: setattr(rule, parameter, rule_item[parameter]) rule.plugin = plugin rule.save() if item == 'crons': for cron_item in metadata['crons']: cron = Cron() for parameter in cron_item: if parameter == 'enabled': if cron_item[parameter] == 0: setattr(cron, parameter, False) else: setattr(cron, parameter, True) else: setattr(cron, parameter, cron_item[parameter]) cron.plugin = plugin cron.save() for intent, value in metadata['configuration']['intents'].iteritems(): oIntent = Intent() oIntent.name = intent oIntent.function = value['method'] oIntent.module = '.'.join(['lisa.plugins', plugin_name, 'modules', plugin_name.lower(), plugin_name]) oIntent.enabled = True oIntent.plugin = plugin oIntent.save() return {'status': 'success', 'log': unicode(_('Plugin installed'))}