Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for tool_shed.galaxy_install.utility_containers
import logging
import threading
from tool_shed.utility_containers import utility_container_manager
log = logging.getLogger(__name__)
[docs]class GalaxyUtilityContainerManager(utility_container_manager.UtilityContainerManager):
[docs] def build_repository_containers(self, repository, datatypes, invalid_tools, missing_repository_dependencies,
missing_tool_dependencies, readme_files_dict, repository_dependencies,
tool_dependencies, valid_tools, workflows, valid_data_managers,
invalid_data_managers, data_managers_errors, new_install=False,
reinstalling=False):
"""
Return a dictionary of containers for the received repository's dependencies and readme files for
display during installation to Galaxy.
"""
containers_dict = dict(datatypes=None,
invalid_tools=None,
missing_tool_dependencies=None,
readme_files=None,
repository_dependencies=None,
missing_repository_dependencies=None,
tool_dependencies=None,
valid_tools=None,
workflows=None,
valid_data_managers=None,
invalid_data_managers=None)
# Some of the tool dependency folders will include links to display tool dependency information, and
# some of these links require the repository id. However we need to be careful because sometimes the
# repository object is None.
if repository:
repository_id = repository.id
changeset_revision = repository.changeset_revision
else:
repository_id = None
changeset_revision = None
lock = threading.Lock()
lock.acquire(True)
try:
folder_id = 0
# Datatypes container.
if datatypes:
folder_id, datatypes_root_folder = self.build_datatypes_folder(folder_id, datatypes)
containers_dict['datatypes'] = datatypes_root_folder
# Invalid tools container.
if invalid_tools:
folder_id, invalid_tools_root_folder = \
self.build_invalid_tools_folder(folder_id,
invalid_tools,
changeset_revision,
repository=repository,
label='Invalid tools')
containers_dict['invalid_tools'] = invalid_tools_root_folder
# Readme files container.
if readme_files_dict:
folder_id, readme_files_root_folder = self.build_readme_files_folder(folder_id, readme_files_dict)
containers_dict['readme_files'] = readme_files_root_folder
# Installed repository dependencies container.
if repository_dependencies:
if new_install:
label = 'Repository dependencies'
else:
label = 'Installed repository dependencies'
folder_id, repository_dependencies_root_folder = \
self.build_repository_dependencies_folder(folder_id=folder_id,
repository_dependencies=repository_dependencies,
label=label,
installed=True)
containers_dict['repository_dependencies'] = repository_dependencies_root_folder
# Missing repository dependencies container.
if missing_repository_dependencies:
folder_id, missing_repository_dependencies_root_folder = \
self.build_repository_dependencies_folder(folder_id=folder_id,
repository_dependencies=missing_repository_dependencies,
label='Missing repository dependencies',
installed=False)
containers_dict['missing_repository_dependencies'] = missing_repository_dependencies_root_folder
# Installed tool dependencies container.
if tool_dependencies:
if new_install:
label = 'Tool dependencies'
else:
label = 'Installed tool dependencies'
# We only want to display the Status column if the tool_dependency is missing.
folder_id, tool_dependencies_root_folder = \
self.build_tool_dependencies_folder(folder_id,
tool_dependencies,
label=label,
missing=False,
new_install=new_install,
reinstalling=reinstalling)
containers_dict['tool_dependencies'] = tool_dependencies_root_folder
# Missing tool dependencies container.
if missing_tool_dependencies:
# We only want to display the Status column if the tool_dependency is missing.
folder_id, missing_tool_dependencies_root_folder = \
self.build_tool_dependencies_folder(folder_id,
missing_tool_dependencies,
label='Missing tool dependencies',
missing=True,
new_install=new_install,
reinstalling=reinstalling)
containers_dict['missing_tool_dependencies'] = missing_tool_dependencies_root_folder
# Valid tools container.
if valid_tools:
folder_id, valid_tools_root_folder = self.build_tools_folder(folder_id,
valid_tools,
repository,
changeset_revision,
label='Valid tools')
containers_dict['valid_tools'] = valid_tools_root_folder
# Workflows container.
if workflows:
folder_id, workflows_root_folder = \
self.build_workflows_folder(folder_id=folder_id,
workflows=workflows,
repository_metadata_id=None,
repository_id=repository_id,
label='Workflows')
containers_dict['workflows'] = workflows_root_folder
if valid_data_managers:
folder_id, valid_data_managers_root_folder = \
self.build_data_managers_folder(folder_id=folder_id,
data_managers=valid_data_managers,
label='Valid Data Managers')
containers_dict['valid_data_managers'] = valid_data_managers_root_folder
if invalid_data_managers or data_managers_errors:
folder_id, invalid_data_managers_root_folder = \
self.build_invalid_data_managers_folder(folder_id=folder_id,
data_managers=invalid_data_managers,
error_messages=data_managers_errors,
label='Invalid Data Managers')
containers_dict['invalid_data_managers'] = invalid_data_managers_root_folder
except Exception as e:
log.debug(f"Exception in build_repository_containers: {str(e)}")
finally:
lock.release()
return containers_dict