def install(plugin_url=None, plugin_sha=None, plugin_name=None): if plugin_url and plugin_sha: repo = git.Repo.clone_from(plugin_url, LISA_PATH + '/plugins/' + plugin_name) repo.git.checkout(plugin_sha) metadata = json.load(open(LISA_PATH + '/plugins/' + plugin_name + '/' + str(plugin_name).lower() + '.json')) if Plugin.objects(name=plugin_name): return {'status': 'fail', 'log': 'Plugin already installed'} else: plugin = Plugin() description_list = [] for item in metadata: if item != 'cron' or 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: 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: setattr(cron, parameter, cron_item[parameter]) cron.plugin = plugin cron.save() return {'status': 'success', 'log': 'Plugin installed'}
def install(self, request, **kwargs): self.method_check(request, allowed=['post','get']) self.is_authenticated(request) self.throttle_check(request) from tastypie.http import HttpCreated, HttpNotModified try: plugin_url = request.POST.get("url") plugin_sha = request.POST.get("sha") plugin_name = kwargs['plugin_name'] repo = git.Repo.clone_from(plugin_url, LISA_PATH + '/Plugins/' + plugin_name) repo.git.checkout(plugin_sha) metadata = json.load(open(LISA_PATH + '/Plugins/' + plugin_name + '/' + str(plugin_name).lower() + '.json')) plugin = Plugin() for item in metadata: if item != 'cron' or item != 'rules': setattr(plugin, item, metadata[item]) plugin.save(validate=False) for item in metadata: if item == 'rules': for rule_item in metadata['rules']: rule = Rule() for parameter in rule_item: setattr(rule, parameter, rule_item[parameter]) rule.plugin = plugin rule.save(validate=False) if item == 'crons': for cron_item in metadata['crons']: cron = Cron() for parameter in cron_item: setattr(cron, parameter, cron_item[parameter]) cron.plugin = plugin cron.save(validate=False) except: pass #except FailedException as failure: # return self.create_response(request, { 'status' : 'failure', 'reason' : failure }, HttpNotModified self.log_throttled_access(request) LisaInstance.SchedReload() LisaInstance.LisaReload() return self.create_response(request, { 'status': 'success', 'log': "Plugin Installed"}, HttpCreated)