diff --git a/lib/galaxy/util/shed_util.py b/lib/galaxy/util/shed_util.py
index 282ee5e5873..b5b008590de 100644
--- a/lib/galaxy/util/shed_util.py
+++ b/lib/galaxy/util/shed_util.py
@@ -951,6 +951,7 @@ def get_tool_version_association( app, parent_tool_version, tool_version ):
.first()
def get_update_to_changeset_revision_and_ctx_rev( trans, repository ):
"""Return the changeset revision hash to which the repository can be updated."""
+ changeset_revision_dict = {}
tool_shed_url = suc.get_url_from_repository_tool_shed( trans.app, repository )
url = suc.url_join( tool_shed_url, 'repository/get_changeset_revision_and_ctx_rev?name=%s&owner=%s&changeset_revision=%s' % \
( repository.name, repository.owner, repository.installed_changeset_revision ) )
@@ -959,18 +960,34 @@ def get_update_to_changeset_revision_and_ctx_rev( trans, repository ):
encoded_update_dict = response.read()
if encoded_update_dict:
update_dict = encoding_util.tool_shed_decode( encoded_update_dict )
- changeset_revision = update_dict[ 'changeset_revision' ]
- ctx_rev = update_dict[ 'ctx_rev' ]
+ includes_data_managers = update_dict.get( 'includes_data_managers', False )
+ includes_datatypes = update_dict.get( 'includes_datatypes', False )
includes_tools = update_dict.get( 'includes_tools', False )
+ includes_tool_dependencies = update_dict.get( 'includes_tool_dependencies', False )
+ includes_workflows = update_dict.get( 'includes_workflows', False )
has_repository_dependencies = update_dict.get( 'has_repository_dependencies', False )
+ changeset_revision = update_dict.get( 'changeset_revision', None )
+ ctx_rev = update_dict.get( 'ctx_rev', None )
response.close()
+ changeset_revision_dict[ 'includes_data_managers' ] = includes_data_managers
+ changeset_revision_dict[ 'includes_datatypes' ] = includes_datatypes
+ changeset_revision_dict[ 'includes_tools' ] = includes_tools
+ changeset_revision_dict[ 'includes_tool_dependencies' ] = includes_tool_dependencies
+ changeset_revision_dict[ 'includes_workflows' ] = includes_workflows
+ changeset_revision_dict[ 'has_repository_dependencies' ] = has_repository_dependencies
+ changeset_revision_dict[ 'changeset_revision' ] = changeset_revision
+ changeset_revision_dict[ 'ctx_rev' ] = ctx_rev
except Exception, e:
log.debug( "Error getting change set revision for update from the tool shed for repository '%s': %s" % ( repository.name, str( e ) ) )
- includes_tools = False
- has_repository_dependencies = False
- changeset_revision = None
- ctx_rev = None
- return changeset_revision, ctx_rev, includes_tools, has_repository_dependencies
+ changeset_revision_dict[ 'includes_data_managers' ] = False
+ changeset_revision_dict[ 'includes_datatypes' ] = False
+ changeset_revision_dict[ 'includes_tools' ] = False
+ changeset_revision_dict[ 'includes_tool_dependencies' ] = False
+ changeset_revision_dict[ 'includes_workflows' ] = False
+ changeset_revision_dict[ 'has_repository_dependencies' ] = False
+ changeset_revision_dict[ 'changeset_revision' ] = None
+ changeset_revision_dict[ 'ctx_rev' ] = None
+ return changeset_revision_dict
def handle_missing_data_table_entry( app, relative_install_dir, tool_path, repository_tools_tups ):
"""
Inspect each tool to see if any have input parameters that are dynamically generated select lists that require entries in the
diff --git a/lib/galaxy/webapps/community/controllers/repository.py b/lib/galaxy/webapps/community/controllers/repository.py
index 5995979cadc..284cd8e4eec 100644
--- a/lib/galaxy/webapps/community/controllers/repository.py
+++ b/lib/galaxy/webapps/community/controllers/repository.py
@@ -1298,21 +1298,29 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
@web.expose
def get_changeset_revision_and_ctx_rev( self, trans, **kwd ):
"""Handle a request from a local Galaxy instance to retrieve the changeset revision hash to which an installed repository can be updated."""
- def has_tools_and_repository_dependencies( repository_metadata ):
+ def has_galaxy_utilities( repository_metadata ):
+ includes_data_managers = False
+ includes_datatypes = False
includes_tools = False
has_repository_dependencies = False
+ includes_tool_dependencies = False
+ includes_workflows = False
if repository_metadata:
metadata = repository_metadata.metadata
if metadata:
+ if 'data_manager' in metadata:
+ includes_data_managers = True
+ if 'datatypes' in metadata:
+ includes_datatypes = True
if 'tools' in metadata:
includes_tools = True
- else:
- includes_tools = False
+ if 'tool_dependencies' in metadata:
+ includes_tool_dependencies = True
if 'repository_dependencies' in metadata:
has_repository_dependencies = True
- else:
- has_repository_dependencies = False
- return includes_tools, has_repository_dependencies
+ if 'workflows' in metadata:
+ includes_workflows = True
+ return includes_data_managers, includes_datatypes, includes_tools, includes_tool_dependencies, has_repository_dependencies, includes_workflows
params = util.Params( kwd )
message = util.restore_text( params.get( 'message', '' ) )
status = params.get( 'status', 'done' )
@@ -1324,7 +1332,8 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans,
trans.security.encode_id( repository.id ),
changeset_revision )
- includes_tools, has_repository_dependencies = has_tools_and_repository_dependencies( repository_metadata )
+ includes_data_managers, includes_datatypes, includes_tools, includes_tool_dependencies, has_repository_dependencies, includes_workflows = \
+ has_galaxy_utilities( repository_metadata )
repo_dir = repository.repo_path( trans.app )
repo = hg.repository( suc.get_configured_ui(), repo_dir )
# Default to the received changeset revision and ctx_rev.
@@ -1333,8 +1342,12 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
latest_changeset_revision = changeset_revision
update_dict = dict( changeset_revision=changeset_revision,
ctx_rev=ctx_rev,
+ includes_data_managers=includes_data_managers,
+ includes_datatypes=includes_datatypes,
includes_tools=includes_tools,
- has_repository_dependencies=has_repository_dependencies )
+ includes_tool_dependencies=includes_tool_dependencies,
+ has_repository_dependencies=has_repository_dependencies,
+ includes_workflows=includes_workflows )
if changeset_revision == repository.tip( trans.app ):
# If changeset_revision is the repository tip, there are no additional updates.
return encoding_util.tool_shed_encode( update_dict )
@@ -1356,7 +1369,8 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
trans.security.encode_id( repository.id ),
changeset_hash )
if update_to_repository_metadata:
- includes_tools, has_repository_dependencies = has_tools_and_repository_dependencies( update_to_repository_metadata )
+ includes_data_managers, includes_datatypes, includes_tools, includes_tool_dependencies, has_repository_dependencies, includes_workflows = \
+ has_galaxy_utilities( update_to_repository_metadata )
# We found a RepositoryMetadata record.
if changeset_hash == repository.tip( trans.app ):
# The current ctx is the repository tip, so use it.
@@ -1369,7 +1383,11 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
elif not update_to_changeset_hash and changeset_hash == changeset_revision:
# We've found the changeset in the changelog for which we need to get the next update.
update_to_changeset_hash = changeset_hash
+ update_dict[ 'includes_data_managers' ] = includes_data_managers
+ update_dict[ 'includes_datatypes' ] = includes_datatypes
update_dict[ 'includes_tools' ] = includes_tools
+ update_dict[ 'includes_tool_dependencies' ] = includes_tool_dependencies
+ update_dict[ 'includes_workflows' ] = includes_workflows
update_dict[ 'has_repository_dependencies' ] = has_repository_dependencies
update_dict[ 'changeset_revision' ] = str( latest_changeset_revision )
update_dict[ 'ctx_rev' ] = str( update_to_ctx.rev() )
@@ -1601,16 +1619,22 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
repository_metadata=repository_metadata,
tool_dependencies=None,
repository_dependencies=None )
+ includes_data_managers = False
+ includes_datatypes = False
+ includes_tools = False
+ includes_workflows = False
+ readme_files_dict = None
metadata = repository_metadata.metadata
if metadata:
- readme_files_dict = suc.build_readme_files_dict( metadata )
+ if 'data_manager' in metadata:
+ includes_data_managers = True
+ if 'datatypes' in metadata:
+ includes_datatypes = True
if 'tools' in metadata:
includes_tools = True
- else:
- includes_tools = False
- else:
- readme_files_dict = None
- includes_tools = False
+ if 'workflows' in metadata:
+ includes_workflows = True
+ readme_files_dict = suc.build_readme_files_dict( metadata )
# See if the repo_info_dict was populated with repository_dependencies or tool_dependencies.
for name, repo_info_tuple in repo_info_dict.items():
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = \
@@ -1623,9 +1647,12 @@ class RepositoryController( BaseUIController, common_util.ItemRatings ):
includes_tool_dependencies = True
else:
includes_tool_dependencies = False
- return dict( includes_tools=includes_tools,
+ return dict( includes_data_managers=includes_data_managers,
+ includes_datatypes=includes_datatypes,
+ includes_tools=includes_tools,
has_repository_dependencies=has_repository_dependencies,
includes_tool_dependencies=includes_tool_dependencies,
+ includes_workflows=includes_workflows,
readme_files_dict=readme_files_dict,
repo_info_dict=repo_info_dict )
def get_versions_of_tool( self, trans, repository, repository_metadata, guid ):
diff --git a/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py b/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py
index f98921cd983..b7b4d1a535f 100644
--- a/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py
+++ b/lib/galaxy/webapps/galaxy/controllers/admin_toolshed.py
@@ -383,29 +383,23 @@ class AdminToolshed( AdminGalaxy ):
if repository.uninstalled:
# Since we're reinstalling the repository we need to find the latest changeset revision to which it can be updated so that we
# can reset the metadata if necessary. This will ensure that information about repository dependencies and tool dependencies
- # will be current. Only allow selecting a different section in the tool panel if the repository was uninstalled.
- current_changeset_revision, current_ctx_rev, includes_tools, has_repository_dependencies = \
- shed_util.get_update_to_changeset_revision_and_ctx_rev( trans, repository )
- if current_ctx_rev == repository.ctx_rev:
- # The uninstalled repository is current.
- if repository.includes_tools or repository.has_repository_dependencies:
+ # will be current. Only allow selecting a different section in the tool panel if the repository was uninstalled.
+ changeset_revision_dict = shed_util.get_update_to_changeset_revision_and_ctx_rev( trans, repository )
+ current_changeset_revision = changeset_revision_dict.get( 'changeset_revision', None )
+ current_ctx_rev = changeset_revision_dict.get( 'ctx_rev', None )
+ if current_changeset_revision and current_ctx_rev:
+ if current_ctx_rev == repository.ctx_rev:
+ # The uninstalled repository is current.
return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
action='reselect_tool_panel_section',
**kwd ) )
else:
- return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
- action='reinstall_repository',
- **kwd ) )
- else:
- # The uninstalled repository has updates available in the tool shed.
- updated_repo_info_dict = self.get_updated_repository_information( trans=trans,
- repository_id=trans.security.encode_id( repository.id ),
- repository_name=repository.name,
- repository_owner=repository.owner,
- changeset_revision=current_changeset_revision )
- has_repository_dependencies = updated_repo_info_dict.get( 'has_repository_dependencies', False )
- includes_tool_dependencies = updated_repo_info_dict.get( 'includes_tool_dependencies', False )
- if has_repository_dependencies or includes_tool_dependencies:
+ # The uninstalled repository has updates available in the tool shed.
+ updated_repo_info_dict = self.get_updated_repository_information( trans=trans,
+ repository_id=trans.security.encode_id( repository.id ),
+ repository_name=repository.name,
+ repository_owner=repository.owner,
+ changeset_revision=current_changeset_revision )
json_repo_info_dict = json.to_json_string( updated_repo_info_dict )
encoded_repo_info_dict = encoding_util.tool_shed_encode( json_repo_info_dict )
kwd[ 'latest_changeset_revision' ] = current_changeset_revision
@@ -414,10 +408,14 @@ class AdminToolshed( AdminGalaxy ):
return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
action='reselect_tool_panel_section',
**kwd ) )
- else:
- return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
- action='reinstall_repository',
- **kwd ) )
+ else:
+ message = "Unable to get latest revision for repository %s from the tool shed, so repository " % str( repository.name )
+ message += "reinstallation is not possible at this time."
+ status = "error"
+ return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
+ action='browse_repositories',
+ message=message,
+ status=status ) )
else:
return trans.response.send_redirect( web.url_for( controller='admin_toolshed',
action='activate_repository',
@@ -903,8 +901,9 @@ class AdminToolshed( AdminGalaxy ):
if cloned_ok:
if reinstalling:
# Since we're reinstalling the repository we need to find the latest changeset revision to which is can be updated.
- current_changeset_revision, current_ctx_rev, includes_tools, has_repository_dependencies = \
- shed_util.get_update_to_changeset_revision_and_ctx_rev( trans, tool_shed_repository )
+ changeset_revision_dict = shed_util.get_update_to_changeset_revision_and_ctx_rev( trans, tool_shed_repository )
+ current_changeset_revision = changeset_revision_dict.get( 'changeset_revision', None )
+ current_ctx_rev = changeset_revision_dict.get( 'ctx_rev', None )
if current_ctx_rev != ctx_rev:
repo = hg.repository( suc.get_configured_ui(), path=os.path.abspath( install_dir ) )
shed_util.pull_repository( repo, repository_clone_url, current_changeset_revision )
@@ -1367,7 +1366,7 @@ class AdminToolshed( AdminGalaxy ):
containers_dicts.append( containers_dict )
# Merge all containers into a single container.
containers_dict = shed_util.merge_containers_dicts_for_new_install( containers_dicts )
- # Handle tool dependencies chack box.
+ # Handle tool dependencies check box.
if trans.app.config.tool_dependency_dir is None:
if includes_tool_dependencies:
message = "Tool dependencies defined in this repository can be automatically installed if you set the value of your tool_dependency_dir "
@@ -1566,6 +1565,7 @@ class AdminToolshed( AdminGalaxy ):
Galaxy database will not be used since it is outdated.
"""
message = ''
+ status = 'done'
repository_id = kwd.get( 'id', None )
latest_changeset_revision = kwd.get( 'latest_changeset_revision', None )
latest_ctx_rev = kwd.get( 'latest_ctx_rev', None )
@@ -1580,19 +1580,36 @@ class AdminToolshed( AdminGalaxy ):
encoded_updated_repo_info_dict = kwd.get( 'updated_repo_info_dict', None )
updated_repo_info_dict = encoding_util.tool_shed_decode( encoded_updated_repo_info_dict )
readme_files_dict = updated_repo_info_dict.get( 'readme_files_dict', None )
+ includes_data_managers = updated_repo_info_dict.get( 'includes_data_managers', False )
+ includes_datatypes = updated_repo_info_dict.get( 'includes_datatypes', False )
includes_tools = updated_repo_info_dict.get( 'includes_tools', False )
+ includes_workflows = updated_repo_info_dict.get( 'includes_workflows', False )
has_repository_dependencies = updated_repo_info_dict.get( 'has_repository_dependencies', False )
includes_tool_dependencies = updated_repo_info_dict.get( 'includes_tool_dependencies', False )
repo_info_dict = updated_repo_info_dict[ 'repo_info_dict' ]
else:
# There are no updates available from the tool shed for the repository, so use it's locally stored metadata.
+ has_repository_dependencies = False
+ includes_data_managers = False
+ includes_datatypes = False
+ includes_tool_dependencies = False
+ includes_tools = False
+ includes_workflows = False
+ readme_files_dict = None
+ tool_dependencies = None
if metadata:
+ if 'data_manager' in metadata:
+ includes_data_managers = True
+ if 'datatypes' in metadata:
+ includes_datatypes = True
+ if 'tools' in metadata:
+ includes_tools = True
+ if 'tool_dependencies' in metadata:
+ includes_tool_dependencies = True
+ if 'workflows' in metadata:
+ includes_workflows = True
readme_files_dict = suc.build_readme_files_dict( metadata )
tool_dependencies = metadata.get( 'tool_dependencies', None )
- else:
- readme_files_dict = None
- tool_dependencies = None
- includes_tool_dependencies = tool_shed_repository.includes_tool_dependencies
repository_dependencies = self.get_repository_dependencies( trans=trans,
repository_id=repository_id,
repository_name=tool_shed_repository.name,
@@ -1615,33 +1632,39 @@ class AdminToolshed( AdminGalaxy ):
has_repository_dependencies = True
else:
has_repository_dependencies = False
- # Get the location in the tool panel in which the tool was originally loaded.
- if 'tool_panel_section' in metadata:
- tool_panel_dict = metadata[ 'tool_panel_section' ]
- if tool_panel_dict:
- if shed_util.panel_entry_per_tool( tool_panel_dict ):
- # The following forces everything to be loaded into 1 section (or no section) in the tool panel.
- tool_section_dicts = tool_panel_dict[ tool_panel_dict.keys()[ 0 ] ]
- tool_section_dict = tool_section_dicts[ 0 ]
- original_section_name = tool_section_dict[ 'name' ]
+ if includes_tools:
+ # Get the location in the tool panel in which the tools were originally loaded.
+ if 'tool_panel_section' in metadata:
+ tool_panel_dict = metadata[ 'tool_panel_section' ]
+ if tool_panel_dict:
+ if shed_util.panel_entry_per_tool( tool_panel_dict ):
+ # The following forces everything to be loaded into 1 section (or no section) in the tool panel.
+ tool_section_dicts = tool_panel_dict[ tool_panel_dict.keys()[ 0 ] ]
+ tool_section_dict = tool_section_dicts[ 0 ]
+ original_section_name = tool_section_dict[ 'name' ]
+ else:
+ original_section_name = tool_panel_dict[ 'name' ]
else:
- original_section_name = tool_panel_dict[ 'name' ]
+ original_section_name = ''
else:
original_section_name = ''
+ tool_panel_section_select_field = build_tool_panel_section_select_field( trans )
+ no_changes_check_box = CheckboxField( 'no_changes', checked=True )
+ if original_section_name:
+ message += "The tools contained in your %s repository were last loaded into the tool panel section %s. " \
+ % ( tool_shed_repository.name, original_section_name )
+ message += "Uncheck the No changes check box and select a different tool panel section to load the tools in a "
+ message += "different section in the tool panel. "
+ status = 'warning'
+ else:
+ message += "The tools contained in your %s repository were last loaded into the tool panel outside of any sections. " % tool_shed_repository.name
+ message += "Uncheck the No changes check box and select a tool panel section to load the tools into that section. "
+ status = 'warning'
else:
+ no_changes_check_box = None
original_section_name = ''
- tool_panel_section_select_field = build_tool_panel_section_select_field( trans )
- no_changes_check_box = CheckboxField( 'no_changes', checked=True )
- if original_section_name:
- message += "The tools contained in your %s repository were last loaded into the tool panel section %s. " \
- % ( tool_shed_repository.name, original_section_name )
- message += "Uncheck the No changes check box and select a different tool panel section to load the tools in a "
- message += "different section in the tool panel. "
- status = 'warning'
- else:
- message += "The tools contained in your %s repository were last loaded into the tool panel outside of any sections. " % tool_shed_repository.name
- message += "Uncheck the No changes check box and select a tool panel section to load the tools into that section. "
- status = 'warning'
+ tool_panel_section_select_field = None
+ shed_tool_conf_select_field = build_shed_tool_conf_select_field( trans )
containers_dict = shed_util.populate_containers_dict_for_new_install( trans=trans,
tool_shed_url=tool_shed_url,
tool_path=tool_path,
@@ -1669,12 +1692,17 @@ class AdminToolshed( AdminGalaxy ):
repository=tool_shed_repository,
no_changes_check_box=no_changes_check_box,
original_section_name=original_section_name,
+ includes_data_managers=includes_data_managers,
+ includes_datatypes=includes_datatypes,
+ includes_tools=includes_tools,
includes_tool_dependencies=includes_tool_dependencies,
+ includes_workflows=includes_workflows,
has_repository_dependencies=has_repository_dependencies,
install_repository_dependencies_check_box=install_repository_dependencies_check_box,
install_tool_dependencies_check_box=install_tool_dependencies_check_box,
containers_dict=containers_dict,
tool_panel_section_select_field=tool_panel_section_select_field,
+ shed_tool_conf_select_field=shed_tool_conf_select_field,
encoded_repo_info_dict=encoding_util.tool_shed_encode( repo_info_dict ),
repo_info_dict=repo_info_dict,
message=message,
diff --git a/templates/admin/tool_shed_repository/reselect_tool_panel_section.mako b/templates/admin/tool_shed_repository/reselect_tool_panel_section.mako
index 08377f05d4e..b171db2991f 100644
--- a/templates/admin/tool_shed_repository/reselect_tool_panel_section.mako
+++ b/templates/admin/tool_shed_repository/reselect_tool_panel_section.mako
@@ -41,28 +41,55 @@
${render_dependencies_section( install_repository_dependencies_check_box, install_tool_dependencies_check_box, containers_dict )}
%endif
-
-