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 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
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_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 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
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