示例#1
0
 def get_repository_dependency_as_key(self, repository_dependency):
     tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
         common_util.parse_repository_dependency_tuple(repository_dependency)
     return container_util.generate_repository_dependencies_key_for_repository(tool_shed,
                                                                               name,
                                                                               owner,
                                                                               changeset_revision,
                                                                               prior_installation_required,
                                                                               only_if_compiling_contained_td)
示例#2
0
 def get_repository_dependency_as_key( self, repository_dependency ):
     tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
         common_util.parse_repository_dependency_tuple( repository_dependency )
     return container_util.generate_repository_dependencies_key_for_repository( tool_shed,
                                                                                name,
                                                                                owner,
                                                                                changeset_revision,
                                                                                prior_installation_required,
                                                                                only_if_compiling_contained_td )
 def is_subfolder_of(self, folder, repository_dependency):
     toolshed, repository_name, repository_owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
         common_util.parse_repository_dependency_tuple( repository_dependency )
     key = container_util.generate_repository_dependencies_key_for_repository(
         toolshed, repository_name, repository_owner, changeset_revision,
         prior_installation_required, only_if_compiling_contained_td)
     for sub_folder in folder.folders:
         if key == sub_folder.key:
             return True
     return False
示例#4
0
 def build_invalid_repository_dependencies_root_folder(
         self, folder_id, invalid_repository_dependencies_dict):
     """Return a folder hierarchy containing invalid repository dependencies."""
     label = 'Invalid repository dependencies'
     if invalid_repository_dependencies_dict:
         invalid_repository_dependency_id = 0
         folder_id += 1
         invalid_repository_dependencies_root_folder = \
             utility_container_manager.Folder( id=folder_id,
                                               key='root',
                                               label='root',
                                               parent=None )
         folder_id += 1
         invalid_repository_dependencies_folder = \
             utility_container_manager.Folder( id=folder_id,
                                               key='invalid_repository_dependencies',
                                               label=label,
                                               parent=invalid_repository_dependencies_root_folder )
         invalid_repository_dependencies_root_folder.folders.append(
             invalid_repository_dependencies_folder)
         invalid_repository_dependencies = invalid_repository_dependencies_dict[
             'repository_dependencies']
         for invalid_repository_dependency in invalid_repository_dependencies:
             folder_id += 1
             invalid_repository_dependency_id += 1
             toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td, error = \
                 common_util.parse_repository_dependency_tuple( invalid_repository_dependency, contains_error=True )
             key = container_util.generate_repository_dependencies_key_for_repository(
                 toolshed, name, owner, changeset_revision,
                 prior_installation_required,
                 only_if_compiling_contained_td)
             label = "Repository <b>%s</b> revision <b>%s</b> owned by <b>%s</b>" % (
                 name, changeset_revision, owner)
             folder = utility_container_manager.Folder(
                 id=folder_id,
                 key=key,
                 label=label,
                 parent=invalid_repository_dependencies_folder)
             ird = InvalidRepositoryDependency(
                 id=invalid_repository_dependency_id,
                 toolshed=toolshed,
                 repository_name=name,
                 repository_owner=owner,
                 changeset_revision=changeset_revision,
                 prior_installation_required=util.asbool(
                     prior_installation_required),
                 only_if_compiling_contained_td=util.asbool(
                     only_if_compiling_contained_td),
                 error=error)
             folder.invalid_repository_dependencies.append(ird)
             invalid_repository_dependencies_folder.folders.append(folder)
     else:
         invalid_repository_dependencies_root_folder = None
     return folder_id, invalid_repository_dependencies_root_folder
示例#5
0
 def get_key_for_repository_changeset_revision(self):
     # The received toolshed_base_url must include the port, but doesn't have to include the protocol.
     prior_installation_required, only_if_compiling_contained_td = \
         self.get_prior_installation_required_and_only_if_compiling_contained_td()
     # Create a key with the value of prior_installation_required defaulted to False.
     key = container_util.generate_repository_dependencies_key_for_repository(
         self.tool_shed_url, self.repository.name,
         self.repository.user.username,
         self.repository_metadata.changeset_revision,
         prior_installation_required, only_if_compiling_contained_td)
     return key
示例#6
0
 def get_key_for_repository_changeset_revision( self ):
     # The received toolshed_base_url must include the port, but doesn't have to include the protocol.
     prior_installation_required, only_if_compiling_contained_td = \
         self.get_prior_installation_required_and_only_if_compiling_contained_td()
     # Create a key with the value of prior_installation_required defaulted to False.
     key = container_util.generate_repository_dependencies_key_for_repository( self.tool_shed_url,
                                                                               self.repository.name,
                                                                               self.repository.user.username,
                                                                               self.repository_metadata.changeset_revision,
                                                                               prior_installation_required,
                                                                               only_if_compiling_contained_td )
     return key
 def is_subfolder_of( self, folder, repository_dependency ):
     toolshed, repository_name, repository_owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
         common_util.parse_repository_dependency_tuple( repository_dependency )
     key = container_util.generate_repository_dependencies_key_for_repository( toolshed,
                                                                               repository_name,
                                                                               repository_owner,
                                                                               changeset_revision,
                                                                               prior_installation_required,
                                                                               only_if_compiling_contained_td )
     for sub_folder in folder.folders:
         if key == sub_folder.key:
             return True
     return False
示例#8
0
 def build_invalid_repository_dependencies_root_folder( self, folder_id, invalid_repository_dependencies_dict ):
     """Return a folder hierarchy containing invalid repository dependencies."""
     label = 'Invalid repository dependencies'
     if invalid_repository_dependencies_dict:
         invalid_repository_dependency_id = 0
         folder_id += 1
         invalid_repository_dependencies_root_folder = \
             utility_container_manager.Folder( id=folder_id,
                                               key='root',
                                               label='root',
                                               parent=None )
         folder_id += 1
         invalid_repository_dependencies_folder = \
             utility_container_manager.Folder( id=folder_id,
                                               key='invalid_repository_dependencies',
                                               label=label,
                                               parent=invalid_repository_dependencies_root_folder )
         invalid_repository_dependencies_root_folder.folders.append( invalid_repository_dependencies_folder )
         invalid_repository_dependencies = invalid_repository_dependencies_dict[ 'repository_dependencies' ]
         for invalid_repository_dependency in invalid_repository_dependencies:
             folder_id += 1
             invalid_repository_dependency_id += 1
             toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td, error = \
                 common_util.parse_repository_dependency_tuple( invalid_repository_dependency, contains_error=True )
             key = container_util.generate_repository_dependencies_key_for_repository( toolshed,
                                                                                       name,
                                                                                       owner,
                                                                                       changeset_revision,
                                                                                       prior_installation_required,
                                                                                       only_if_compiling_contained_td )
             label = "Repository <b>%s</b> revision <b>%s</b> owned by <b>%s</b>" % ( name, changeset_revision, owner )
             folder = utility_container_manager.Folder( id=folder_id,
                                                        key=key,
                                                        label=label,
                                                        parent=invalid_repository_dependencies_folder )
             ird = InvalidRepositoryDependency( id=invalid_repository_dependency_id,
                                                toolshed=toolshed,
                                                repository_name=name,
                                                repository_owner=owner,
                                                changeset_revision=changeset_revision,
                                                prior_installation_required=util.asbool( prior_installation_required ),
                                                only_if_compiling_contained_td=util.asbool( only_if_compiling_contained_td ),
                                                error=error )
             folder.invalid_repository_dependencies.append( ird )
             invalid_repository_dependencies_folder.folders.append( folder )
     else:
         invalid_repository_dependencies_root_folder = None
     return folder_id, invalid_repository_dependencies_root_folder
def get_installed_and_missing_repository_dependencies( trans, repository ):
    """
    Return the installed and missing repository dependencies for a tool shed repository that has a record in the Galaxy database, but
    may or may not be installed.  In this case, the repository dependencies are associated with the repository in the database.  Do not
    include a repository dependency if it is required only to compile a tool dependency defined for the dependent repository since these
    special kinds of repository dependencies are really a dependency of the dependent repository's contained tool dependency, and only if
    that tool dependency requires compilation.
    """
    missing_repository_dependencies = {}
    installed_repository_dependencies = {}
    has_repository_dependencies = repository.has_repository_dependencies
    if has_repository_dependencies:
        # The repository dependencies container will include only the immediate repository dependencies of this repository, so the container
        # will be only a single level in depth.
        metadata = repository.metadata
        installed_rd_tups = []
        missing_rd_tups = []
        for tsr in repository.repository_dependencies:
            prior_installation_required = suc.set_prior_installation_required( repository, tsr )
            only_if_compiling_contained_td = suc.set_only_if_compiling_contained_td( repository, tsr )
            rd_tup = [ tsr.tool_shed,
                       tsr.name,
                       tsr.owner,
                       tsr.changeset_revision,
                       prior_installation_required,
                       only_if_compiling_contained_td,
                       tsr.id,
                       tsr.status ]
            if tsr.status == trans.install_model.ToolShedRepository.installation_status.INSTALLED:
                installed_rd_tups.append( rd_tup )
            else:
                # We'll only add the rd_tup to the missing_rd_tups list if the received repository has tool dependencies that are not
                # correctly installed.  This may prove to be a weak check since the repository in question may not have anything to do
                # with compiling the missing tool dependencies.  If we discover that this is a problem, more granular checking will be
                # necessary here.
                if repository.missing_tool_dependencies:
                    if not repository_dependency_needed_only_for_compiling_tool_dependency( repository, tsr ):
                        missing_rd_tups.append( rd_tup )
                else:
                    missing_rd_tups.append( rd_tup )
        if installed_rd_tups or missing_rd_tups:
            # Get the description from the metadata in case it has a value.
            repository_dependencies = metadata.get( 'repository_dependencies', {} )
            description = repository_dependencies.get( 'description', None )
            # We need to add a root_key entry to one or both of installed_repository_dependencies dictionary and the
            # missing_repository_dependencies dictionaries for proper display parsing.
            root_key = container_util.generate_repository_dependencies_key_for_repository( repository.tool_shed,
                                                                                           repository.name,
                                                                                           repository.owner,
                                                                                           repository.installed_changeset_revision,
                                                                                           prior_installation_required,
                                                                                           only_if_compiling_contained_td )
            if installed_rd_tups:
                installed_repository_dependencies[ 'root_key' ] = root_key
                installed_repository_dependencies[ root_key ] = installed_rd_tups
                installed_repository_dependencies[ 'description' ] = description
            if missing_rd_tups:
                missing_repository_dependencies[ 'root_key' ] = root_key
                missing_repository_dependencies[ root_key ] = missing_rd_tups
                missing_repository_dependencies[ 'description' ] = description
    return installed_repository_dependencies, missing_repository_dependencies