Пример #1
0
    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)
Пример #2
0
    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