def cmd_pip_install(self, *argv, **kwargs): '''packagke: package name side_wide: boolean. if True package will be installed in site packages, else in user site ''' # site_wide is a boolean. if True package will be installed in site packages, else in user site install_site_wide = kwargs.get('site_wide', False) pkg = kwargs.get('package', None) pip_install_single_package(pkg, install_site_wide)
def cmd_monitor_plugin_install(self, *argv, **kwargs): """ Installs a plugin [url=plugin_url] """ url = kwargs.get('url', None) content = None if not url: raise ecm.InvalidParameters(self.cmd_monitor_plugin_install.__doc__) try: content = ecm.get_url(url) except: pass if not content: raise Exception("Unable to get URL: %s" % url) try: plugin = json.loads(content) except: raise Exception("Invalid data received") id = plugin.get('id') runas = plugin.get('runas') arg_config = plugin.get('config') arg_script_b64 = plugin.get('script') arg_requirements = plugin.get('requirements', None) if arg_requirements: pip_install = [] system_install = [] for req in arg_requirements.keys(): if arg_requirements[req]['type'] == 'system': system_install.append(arg_requirements[req]['name']) elif arg_requirements[req]['type'] == 'pip': pip_install.append(arg_requirements[req]['name']) for item in system_install: result = ecm.install_package(item) if not result: return False if not pip_import_error: for item in pip_install: try: result = pip_install_single_package(item) if not result[0]: return False except: pass script = None try: script = b64decode(arg_script_b64) except: pass config = { 'id': id, 'runas': runas, 'name': plugin.get('name'), 'interval': plugin.get('interval'), 'version': plugin.get('version'), 'config': arg_config } if id and config and script: mplugin = MPlugin(MPLUGIN_PATH) if mplugin.install(id, config, script): # Installation ok, run it script_file = os.path.abspath(os.path.join(MPLUGIN_PATH, id, id)) _run_background_file(script_file, runas) return True return False