示例#1
0
文件: manager.py 项目: raiju/bs
def _update(url):
    """
    Update plugins from a repository
    :param url: the url of the repository
    """
    dont_touch = ['', 'README', '.gitignore']
    print ' --- updating plugins from %s ---' % url
    from zipfile import ZipFile as zip

    # download
    req = urllib2.urlopen(url)
    tmp_file = tempfile.NamedTemporaryFile(mode='wb', suffix='.zip', delete=False)
    tmp_file.write(req.read())
    tmp_file.close()
    #extract
    tmp_dir = tempfile.mkdtemp()
    z = zip(tmp_file.name)
    for info in z.infolist():
        f = info.filename
        p = os.path.sep.join(f.split(os.path.sep)[1:])
        directory, filename = os.path.split(p)
        if filename not in dont_touch:
            data = z.read(f)
            out_path = os.path.join(tmp_dir, filename)
            if os.path.isdir(f):
                print '\t[mkdir] %s to %s' % (f, out_path)
                os.mkdir(out_path)
            else:
                print '\t[cp] %s to %s' % (f, out_path)
                with open(out_path, 'wb') as out:
                    out.write(data)

    #removing files from plugins directory
    plug_dir = constants.plugin_directory()
    for f in os.listdir(plug_dir):
        if f not in dont_touch:
            print '\t[rm] %s' % os.path.join(plug_dir, f)
            os.remove(os.path.join(plug_dir, f))

    #move new files to plugin directory
    for plug in os.listdir(tmp_dir):
        print '\t[mv] %s to %s' % (os.path.join(tmp_dir, plug), plug_dir)
        shutil.move(os.path.join(tmp_dir, plug), plug_dir)

    #removing tmp files
    shutil.rmtree(tmp_dir)
    os.remove(tmp_file.name)
示例#2
0
文件: manager.py 项目: raiju/bs
def load_plugins():
    """
    Load the plugin into BioScript application
    """
    # update plugins from github
    do_update = tg.config.get('plugins.update')
    if do_update and do_update.lower() in ['1', 'true', 't']:
        _update(tg.config.get('plugins.github.url'))

    # initialize plugin manager with yapsy
    plug_dir = constants.plugin_directory()

    manager = PluginManager(restrict='bs-operation')
    manager.add_plugin_path(plug_dir)

    print ' --- init plugins located in %s ---' % plug_dir
    # from yapsy.PluginManager import PluginManager
    # manager = PluginManager()
    # manager.setPluginPlaces([plug_dir])
    # manager.setCategoriesFilter({
    #     "Operations": OperationPlugin,
    #     })

    # manager.collectPlugins()
    # check plugins and add in db if not already
    plugids = []
    for name, clazz in manager.plugins().iteritems():
        plug = clazz()
        #p = plug.plugin_object
        _check_plugin_info(plug)
        if tg.config['pylons.app_globals']:
            _check_in_database(plug)
        plugids.append(plug.unique_id())

    # check deprecated plugins
    if tg.config['pylons.app_globals']:
        for p in DBSession.query(Plugin).all():
            if p.generated_id not in plugids:
                p.deprecated = True
                DBSession.add(p)
        DBSession.flush()
    return manager