Exemple #1
0
def uninstall_tools(galaxy_server, api_key, names, force):
    galaxy_instance = GalaxyInstance(url=galaxy_server, key=api_key)
    toolshed_client = ToolShedClient(galaxy_instance)

    temp_tool_list_file = 'tmp/installed_tool_list.yml'
    # TODO: Switch to using bioblend to obtain this list
    # ephemeris uses bioblend but without using ephemeris we cut out the need to for a temp file
    os.system('get-tool-list -g %s -a %s -o %s --get_all_tools' %
              (galaxy_server, api_key, temp_tool_list_file))

    tools_to_uninstall = []
    with open(temp_tool_list_file) as tool_file:
        installed_tools = yaml.safe_load(tool_file.read())['tools']
    if not installed_tools:
        raise Exception('No tools to uninstall')
    os.system('rm %s' % temp_tool_list_file)

    for name in names:
        revision = None
        if '@' in name:
            (name, revision) = name.split('@')
        matching_tools = [
            t for t in installed_tools if t['name'] == name and (
                not revision or revision in t['revisions'])
        ]
        if len(matching_tools) == 0:
            id_string = 'name %s revision %s' % (
                name, revision) if revision else 'name %s' % name
            sys.stderr.write('*** Warning: No tool with %s\n' % id_string)
        elif len(matching_tools) > 1 and not force:
            sys.stderr.write(
                '*** Warning: More than one toolshed tool found for %s.  ' %
                name +
                'Not uninstalling any of these tools.  Run script with --force (-f) flag to uninstall anyway\n'
            )
        else:  # Either there is only one matching tool for the name and revision, or there are many and force=True
            for tool in matching_tools:
                tool_copy = tool.copy()
                if revision:
                    tool_copy['revisions'] = [revision]
                tools_to_uninstall.append(tool_copy)

    for tool in tools_to_uninstall:
        try:
            name = tool['name']
            owner = tool['owner']
            tool_shed_url = tool['tool_shed_url']
            revision = tool['revisions'][0]
            sys.stderr.write('Uninstalling %s at revision %s\n' %
                             (name, revision))
            return_value = toolshed_client.uninstall_repository_revision(
                name=name,
                owner=owner,
                changeset_revision=revision,
                tool_shed_url=tool_shed_url)
            sys.stderr.write(str(return_value) + '\n')
        except KeyError as e:
            sys.stderr.write(e)
def uninstall_tools(galaxy_server, api_key, names, force):
    tools_to_uninstall = []
    galaxy_instance = GalaxyInstance(url=galaxy_server, key=api_key)
    toolshed_client = ToolShedClient(galaxy_instance)
    installed_tools = [
        t for t in toolshed_client.get_repositories()
        if t['status'] != 'Uninstalled'
    ]

    for name in names:
        revision = None
        if '@' in name:
            (name, revision) = name.split('@')
        matching_tools = [
            t for t in installed_tools if (t['name'] == name and (
                not revision or revision == t['changeset_revision']))
        ]
        id_string = 'name %s revision %s' % (
            name, revision) if revision else 'name %s' % name
        if len(matching_tools) == 0:
            print('*** Warning: No tool with %s' % id_string)
        elif len(matching_tools) > 1 and not force:
            print(
                '*** Warning: More than one toolshed tool found for %s.  ' %
                id_string +
                'Not uninstalling any of these tools.  Run script with --force (-f) flag to uninstall anyway'
            )
        else:  # Either there is only one matching tool for the name and revision, or there are many and force=True
            tools_to_uninstall.extend(matching_tools)

    for tool in tools_to_uninstall:
        try:
            print('Uninstalling %s at revision %s' %
                  (tool['name'], tool['changeset_revision']))
            return_value = toolshed_client.uninstall_repository_revision(
                name=tool['name'],
                owner=tool['owner'],
                changeset_revision=tool['changeset_revision'],
                tool_shed_url=tool['tool_shed'],
            )
            print(return_value)
        except Exception as e:
            print(e)