def handle_key_rd_dicts_for_repository(self, current_repository_key, repository_key_rd_dicts): key_rd_dict = repository_key_rd_dicts.pop(0) repository_dependency = key_rd_dict[current_repository_key] toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \ common_util.parse_repository_dependency_tuple(repository_dependency) if suc.tool_shed_is_this_tool_shed(toolshed): required_repository = tool_shed.util.repository_util.get_repository_by_name_and_owner(self.app, name, owner) self.repository = required_repository repository_id = self.app.security.encode_id(required_repository.id) required_repository_metadata = \ metadata_util.get_repository_metadata_by_repository_id_changeset_revision(self.app, repository_id, changeset_revision) self.repository_metadata = required_repository_metadata if required_repository_metadata: # The required_repository_metadata changeset_revision is installable. required_metadata = required_repository_metadata.metadata if required_metadata: for current_repository_key_rd_dict in repository_key_rd_dicts: if not self.in_key_rd_dicts(current_repository_key_rd_dict, self.key_rd_dicts_to_be_processed): # Add the current repository_dependency into self.key_rd_dicts_to_be_processed. self.key_rd_dicts_to_be_processed.append(current_repository_key_rd_dict) if not self.in_key_rd_dicts(key_rd_dict, self.handled_key_rd_dicts): # Add the current repository_dependency into self.handled_key_rd_dicts. self.handled_key_rd_dicts.append(key_rd_dict) if self.in_key_rd_dicts(key_rd_dict, self.key_rd_dicts_to_be_processed): # Remove the current repository from self.key_rd_dicts_to_be_processed. self.key_rd_dicts_to_be_processed = self.remove_from_key_rd_dicts(key_rd_dict, self.key_rd_dicts_to_be_processed) else: # The repository is in a different tool shed, so build an url and send a request. error_message = "Repository dependencies are currently supported only within the same Tool Shed. " error_message += "Ignoring repository dependency definition for tool shed " error_message += "{}, name {}, owner {}, changeset revision {}".format(toolshed, name, owner, changeset_revision) log.debug(error_message)
def handle_key_rd_dicts_for_repository( self, current_repository_key, repository_key_rd_dicts ): key_rd_dict = repository_key_rd_dicts.pop( 0 ) repository_dependency = key_rd_dict[ current_repository_key ] toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \ common_util.parse_repository_dependency_tuple( repository_dependency ) if suc.tool_shed_is_this_tool_shed( toolshed ): required_repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( self.app, name, owner ) self.repository = required_repository repository_id = self.app.security.encode_id( required_repository.id ) required_repository_metadata = \ metadata_util.get_repository_metadata_by_repository_id_changeset_revision( self.app, repository_id, changeset_revision ) self.repository_metadata = required_repository_metadata if required_repository_metadata: # The required_repository_metadata changeset_revision is installable. required_metadata = required_repository_metadata.metadata if required_metadata: for current_repository_key_rd_dict in repository_key_rd_dicts: if not self.in_key_rd_dicts( current_repository_key_rd_dict, self.key_rd_dicts_to_be_processed ): # Add the current repository_dependency into self.key_rd_dicts_to_be_processed. self.key_rd_dicts_to_be_processed.append( current_repository_key_rd_dict ) if not self.in_key_rd_dicts( key_rd_dict, self.handled_key_rd_dicts ): # Add the current repository_dependency into self.handled_key_rd_dicts. self.handled_key_rd_dicts.append( key_rd_dict ) if self.in_key_rd_dicts( key_rd_dict, self.key_rd_dicts_to_be_processed ): # Remove the current repository from self.key_rd_dicts_to_be_processed. self.key_rd_dicts_to_be_processed = self.remove_from_key_rd_dicts( key_rd_dict, self.key_rd_dicts_to_be_processed ) else: # The repository is in a different tool shed, so build an url and send a request. error_message = "Repository dependencies are currently supported only within the same Tool Shed. " error_message += "Ignoring repository dependency definition for tool shed " error_message += "%s, name %s, owner %s, changeset revision %s" % ( toolshed, name, owner, changeset_revision ) log.debug( error_message )
def get_updated_changeset_revisions_for_repository_dependencies(self, key_rd_dicts): updated_key_rd_dicts = [] for key_rd_dict in key_rd_dicts: key = next(iter(key_rd_dict)) repository_dependency = key_rd_dict[key] rd_toolshed, rd_name, rd_owner, rd_changeset_revision, \ rd_prior_installation_required, \ rd_only_if_compiling_contained_td = \ common_util.parse_repository_dependency_tuple(repository_dependency) if suc.tool_shed_is_this_tool_shed(rd_toolshed): repository = tool_shed.util.repository_util.get_repository_by_name_and_owner(self.app, rd_name, rd_owner) if repository: repository_id = self.app.security.encode_id(repository.id) repository_metadata = \ metadata_util.get_repository_metadata_by_repository_id_changeset_revision(self.app, repository_id, rd_changeset_revision) if repository_metadata: # The repository changeset_revision is installable, so no updates are available. new_key_rd_dict = {} new_key_rd_dict[key] = repository_dependency updated_key_rd_dicts.append(key_rd_dict) else: # The repository changeset_revision is no longer installable, so see if there's been an update. changeset_revision = metadata_util.get_next_downloadable_changeset_revision(self.app, repository, rd_changeset_revision) if changeset_revision != rd_changeset_revision: repository_metadata = \ metadata_util.get_repository_metadata_by_repository_id_changeset_revision(self.app, repository_id, changeset_revision) if repository_metadata: new_key_rd_dict = {} new_key_rd_dict[key] = \ [rd_toolshed, rd_name, rd_owner, repository_metadata.changeset_revision, rd_prior_installation_required, rd_only_if_compiling_contained_td] # We have the updated changeset revision. updated_key_rd_dicts.append(new_key_rd_dict) else: repository_components_tuple = container_util.get_components_from_key(key) components_list = tool_shed.util.repository_util.extract_components_from_tuple(repository_components_tuple) toolshed, repository_name, repository_owner, repository_changeset_revision = components_list[0:4] # For backward compatibility to the 12/20/12 Galaxy release. if len(components_list) in (4, 5): rd_only_if_compiling_contained_td = 'False' message = "The revision %s defined for repository %s owned by %s is invalid, so repository " % \ (str(rd_changeset_revision), str(rd_name), str(rd_owner)) message += "dependencies defined for repository %s will be ignored." % str(repository_name) log.debug(message) else: repository_components_tuple = container_util.get_components_from_key(key) components_list = tool_shed.util.repository_util.extract_components_from_tuple(repository_components_tuple) toolshed, repository_name, repository_owner, repository_changeset_revision = components_list[0:4] message = "The revision %s defined for repository %s owned by %s is invalid, so repository " % \ (str(rd_changeset_revision), str(rd_name), str(rd_owner)) message += "dependencies defined for repository %s will be ignored." % str(repository_name) log.debug(message) return updated_key_rd_dicts
def get_updated_changeset_revisions_for_repository_dependencies( self, key_rd_dicts ): updated_key_rd_dicts = [] for key_rd_dict in key_rd_dicts: key = next(iter(key_rd_dict)) repository_dependency = key_rd_dict[ key ] rd_toolshed, rd_name, rd_owner, rd_changeset_revision, \ rd_prior_installation_required, \ rd_only_if_compiling_contained_td = \ common_util.parse_repository_dependency_tuple( repository_dependency ) if suc.tool_shed_is_this_tool_shed( rd_toolshed ): repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( self.app, rd_name, rd_owner ) if repository: repository_id = self.app.security.encode_id( repository.id ) repository_metadata = \ metadata_util.get_repository_metadata_by_repository_id_changeset_revision( self.app, repository_id, rd_changeset_revision ) if repository_metadata: # The repository changeset_revision is installable, so no updates are available. new_key_rd_dict = {} new_key_rd_dict[ key ] = repository_dependency updated_key_rd_dicts.append( key_rd_dict ) else: # The repository changeset_revision is no longer installable, so see if there's been an update. repo = hg_util.get_repo_for_repository( self.app, repository=repository, repo_path=None, create=False ) changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository, repo, rd_changeset_revision ) if changeset_revision != rd_changeset_revision: repository_metadata = \ metadata_util.get_repository_metadata_by_repository_id_changeset_revision( self.app, repository_id, changeset_revision ) if repository_metadata: new_key_rd_dict = {} new_key_rd_dict[ key ] = \ [ rd_toolshed, rd_name, rd_owner, repository_metadata.changeset_revision, rd_prior_installation_required, rd_only_if_compiling_contained_td ] # We have the updated changeset revision. updated_key_rd_dicts.append( new_key_rd_dict ) else: repository_components_tuple = container_util.get_components_from_key( key ) components_list = tool_shed.util.repository_util.extract_components_from_tuple( repository_components_tuple ) toolshed, repository_name, repository_owner, repository_changeset_revision = components_list[ 0:4 ] # For backward compatibility to the 12/20/12 Galaxy release. if len( components_list ) in (4, 5): rd_only_if_compiling_contained_td = 'False' message = "The revision %s defined for repository %s owned by %s is invalid, so repository " % \ ( str( rd_changeset_revision ), str( rd_name ), str( rd_owner ) ) message += "dependencies defined for repository %s will be ignored." % str( repository_name ) log.debug( message ) else: repository_components_tuple = container_util.get_components_from_key( key ) components_list = tool_shed.util.repository_util.extract_components_from_tuple( repository_components_tuple ) toolshed, repository_name, repository_owner, repository_changeset_revision = components_list[ 0:4 ] message = "The revision %s defined for repository %s owned by %s is invalid, so repository " % \ ( str( rd_changeset_revision ), str( rd_name ), str( rd_owner ) ) message += "dependencies defined for repository %s will be ignored." % str( repository_name ) log.debug( message ) return updated_key_rd_dicts