Example #1
0
    def import_workflows(self, trans, **kwd):
        """
        POST /api/tool_shed_repositories/import_workflows

        Import all of the exported workflows contained in the specified installed tool shed repository into Galaxy.

        :param key: the API key of the Galaxy user with which the imported workflows will be associated.
        :param id: the encoded id of the ToolShedRepository object
        """
        api_key = kwd.get('key', None)
        if api_key is None:
            raise HTTPBadRequest(
                detail=
                "Missing required parameter 'key' whose value is the API key for the Galaxy user importing the specified workflow."
            )
        tool_shed_repository_id = kwd.get('id', '')
        if not tool_shed_repository_id:
            raise HTTPBadRequest(detail="Missing required parameter 'id'.")
        repository = repository_util.get_tool_shed_repository_by_id(
            self.app, tool_shed_repository_id)
        exported_workflows = json.loads(
            self.exported_workflows(trans, tool_shed_repository_id))
        imported_workflow_dicts = []
        for exported_workflow_dict in exported_workflows:
            workflow_name = exported_workflow_dict['workflow_name']
            workflow, status, error_message = workflow_util.import_workflow(
                trans, repository, workflow_name)
            if status == 'error':
                log.debug(error_message)
            else:
                imported_workflow_dicts.append(
                    workflow.to_dict(view='element'))
        return imported_workflow_dicts
Example #2
0
    def status(self, trans, id, **kwd):
        """
        GET /api/tool_shed_repositories/{id}/status
        Display a dictionary containing information about a specified repository's installation
        status and a list of its dependencies and the status of each.

        :param id: the repository's encoded id
        """
        tool_shed_repository = repository_util.get_tool_shed_repository_by_id(
            self.app, id)
        if tool_shed_repository is None:
            log.debug(
                "Unable to locate tool_shed_repository record for id %s." %
                (str(id)))
            return {}
        tool_shed_repository_dict = tool_shed_repository.as_dict(
            value_mapper=self.__get_value_mapper(trans, tool_shed_repository))
        tool_shed_repository_dict['url'] = web.url_for(
            controller='tool_shed_repositories',
            action='show',
            id=trans.security.encode_id(tool_shed_repository.id))
        tool_shed_repository_dict[
            'repository_dependencies'] = self.__flatten_repository_dependency_list(
                trans, tool_shed_repository)
        return tool_shed_repository_dict
Example #3
0
    def import_workflow( self, trans, payload, **kwd ):
        """
        POST /api/tool_shed_repositories/import_workflow

        Import the specified exported workflow contained in the specified installed tool shed repository into Galaxy.

        :param key: the API key of the Galaxy user with which the imported workflow will be associated.
        :param id: the encoded id of the ToolShedRepository object

        The following parameters are included in the payload.
        :param index: the index location of the workflow tuple in the list of exported workflows stored in the metadata for the specified repository
        """
        api_key = kwd.get( 'key', None )
        if api_key is None:
            raise HTTPBadRequest( detail="Missing required parameter 'key' whose value is the API key for the Galaxy user importing the specified workflow." )
        tool_shed_repository_id = kwd.get( 'id', '' )
        if not tool_shed_repository_id:
            raise HTTPBadRequest( detail="Missing required parameter 'id'." )
        index = payload.get( 'index', None )
        if index is None:
            raise HTTPBadRequest( detail="Missing required parameter 'index'." )
        repository = repository_util.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
        exported_workflows = json.loads( self.exported_workflows( trans, tool_shed_repository_id ) )
        # Since we don't have an in-memory object with an id, we'll identify the exported workflow via its location (i.e., index) in the list.
        exported_workflow = exported_workflows[ int( index ) ]
        workflow_name = exported_workflow[ 'workflow_name' ]
        workflow, status, error_message = workflow_util.import_workflow( trans, repository, workflow_name )
        if status == 'error':
            log.debug( error_message )
            return {}
        return workflow.to_dict( view='element' )
Example #4
0
    def exported_workflows(self, trans, id, **kwd):
        """
        GET /api/tool_shed_repositories/{encoded_tool_shed_repository_id}/exported_workflows

        Display a list of dictionaries containing information about this tool shed repository's exported workflows.

        :param id: the encoded id of the ToolShedRepository object
        """
        # Example URL: http://localhost:8763/api/tool_shed_repositories/f2db41e1fa331b3e/exported_workflows
        # Since exported workflows are dictionaries with very few attributes that differentiate them from each
        # other, we'll build the list based on the following dictionary of those few attributes.
        exported_workflows = []
        repository = repository_util.get_tool_shed_repository_by_id(
            self.app, id)
        metadata = repository.metadata
        if metadata:
            exported_workflow_tups = metadata.get('workflows', [])
        else:
            exported_workflow_tups = []
        for index, exported_workflow_tup in enumerate(exported_workflow_tups):
            # The exported_workflow_tup looks like ( relative_path, exported_workflow_dict ), where the value of
            # relative_path is the location on disk (relative to the root of the installed repository) where the
            # exported_workflow_dict file (.ga file) is located.
            exported_workflow_dict = exported_workflow_tup[1]
            annotation = exported_workflow_dict.get('annotation', '')
            format_version = exported_workflow_dict.get('format-version', '')
            workflow_name = exported_workflow_dict.get('name', '')
            # Since we don't have an in-memory object with an id, we'll identify the exported workflow via its
            # location (i.e., index) in the list.
            display_dict = dict(index=index,
                                annotation=annotation,
                                format_version=format_version,
                                workflow_name=workflow_name)
            exported_workflows.append(display_dict)
        return exported_workflows
Example #5
0
    def import_workflows( self, trans, **kwd ):
        """
        POST /api/tool_shed_repositories/import_workflows

        Import all of the exported workflows contained in the specified installed tool shed repository into Galaxy.

        :param key: the API key of the Galaxy user with which the imported workflows will be associated.
        :param id: the encoded id of the ToolShedRepository object
        """
        api_key = kwd.get( 'key', None )
        if api_key is None:
            raise HTTPBadRequest( detail="Missing required parameter 'key' whose value is the API key for the Galaxy user importing the specified workflow." )
        tool_shed_repository_id = kwd.get( 'id', '' )
        if not tool_shed_repository_id:
            raise HTTPBadRequest( detail="Missing required parameter 'id'." )
        repository = repository_util.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
        exported_workflows = json.loads( self.exported_workflows( trans, tool_shed_repository_id ) )
        imported_workflow_dicts = []
        for exported_workflow_dict in exported_workflows:
            workflow_name = exported_workflow_dict[ 'workflow_name' ]
            workflow, status, error_message = workflow_util.import_workflow( trans, repository, workflow_name )
            if status == 'error':
                log.debug( error_message )
            else:
                imported_workflow_dicts.append( workflow.to_dict( view='element' ) )
        return imported_workflow_dicts
Example #6
0
    def exported_workflows( self, trans, id, **kwd ):
        """
        GET /api/tool_shed_repositories/{encoded_tool_shed_repository_id}/exported_workflows

        Display a list of dictionaries containing information about this tool shed repository's exported workflows.

        :param id: the encoded id of the ToolShedRepository object
        """
        # Example URL: http://localhost:8763/api/tool_shed_repositories/f2db41e1fa331b3e/exported_workflows
        # Since exported workflows are dictionaries with very few attributes that differentiate them from each
        # other, we'll build the list based on the following dictionary of those few attributes.
        exported_workflows = []
        repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
        metadata = repository.metadata
        if metadata:
            exported_workflow_tups = metadata.get( 'workflows', [] )
        else:
            exported_workflow_tups = []
        for index, exported_workflow_tup in enumerate( exported_workflow_tups ):
            # The exported_workflow_tup looks like ( relative_path, exported_workflow_dict ), where the value of
            # relative_path is the location on disk (relative to the root of the installed repository) where the
            # exported_workflow_dict file (.ga file) is located.
            exported_workflow_dict = exported_workflow_tup[ 1 ]
            annotation = exported_workflow_dict.get( 'annotation', '' )
            format_version = exported_workflow_dict.get( 'format-version', '' )
            workflow_name = exported_workflow_dict.get( 'name', '' )
            # Since we don't have an in-memory object with an id, we'll identify the exported workflow via its
            # location (i.e., index) in the list.
            display_dict = dict( index=index, annotation=annotation, format_version=format_version, workflow_name=workflow_name )
            exported_workflows.append( display_dict )
        return exported_workflows
    def import_workflow( self, trans, payload, **kwd ):
        """
        POST /api/tool_shed_repositories/import_workflow

        Import the specified exported workflow contained in the specified installed tool shed repository into Galaxy.

        :param key: the API key of the Galaxy user with which the imported workflow will be associated.
        :param id: the encoded id of the ToolShedRepository object

        The following parameters are included in the payload.
        :param index: the index location of the workflow tuple in the list of exported workflows stored in the metadata for the specified repository
        """
        api_key = kwd.get( 'key', None )
        if api_key is None:
            raise HTTPBadRequest( detail="Missing required parameter 'key' whose value is the API key for the Galaxy user importing the specified workflow." )
        tool_shed_repository_id = kwd.get( 'id', '' )
        if not tool_shed_repository_id:
            raise HTTPBadRequest( detail="Missing required parameter 'id'." )
        index = payload.get( 'index', None )
        if index is None:
            raise HTTPBadRequest( detail="Missing required parameter 'index'." )
        repository = repository_util.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
        exported_workflows = json.loads( self.exported_workflows( trans, tool_shed_repository_id ) )
        # Since we don't have an in-memory object with an id, we'll identify the exported workflow via its location (i.e., index) in the list.
        exported_workflow = exported_workflows[ int( index ) ]
        workflow_name = exported_workflow[ 'workflow_name' ]
        workflow, status, error_message = workflow_util.import_workflow( trans, repository, workflow_name )
        if status == 'error':
            log.debug( error_message )
            return {}
        return workflow.to_dict( view='element' )
Example #8
0
def generate_workflow_image(trans, workflow_name, repository_metadata_id=None, repository_id=None):
    """
    Return an svg image representation of a workflow dictionary created when the workflow was exported.  This method is called
    from both Galaxy and the tool shed.  When called from the tool shed, repository_metadata_id will have a value and repository_id
    will be None.  When called from Galaxy, repository_metadata_id will be None and repository_id will have a value.
    """
    workflow_name = encoding_util.tool_shed_decode(workflow_name)
    if trans.webapp.name == 'tool_shed':
        # We're in the tool shed.
        repository_metadata = metadata_util.get_repository_metadata_by_id(trans.app, repository_metadata_id)
        repository_id = trans.security.encode_id(repository_metadata.repository_id)
        changeset_revision = repository_metadata.changeset_revision
        metadata = repository_metadata.metadata
    else:
        # We're in Galaxy.
        repository = repository_util.get_tool_shed_repository_by_id(trans.app, repository_id)
        changeset_revision = repository.changeset_revision
        metadata = repository.metadata
    # metadata[ 'workflows' ] is a list of tuples where each contained tuple is
    # [ <relative path to the .ga file in the repository>, <exported workflow dict> ]
    for workflow_tup in metadata['workflows']:
        workflow_dict = workflow_tup[1]
        if workflow_dict['name'] == workflow_name:
            break
    if 'tools' in metadata:
        tools_metadata = metadata['tools']
    else:
        tools_metadata = []
    workflow, missing_tool_tups = get_workflow_from_dict(trans=trans,
                                                         workflow_dict=workflow_dict,
                                                         tools_metadata=tools_metadata,
                                                         repository_id=repository_id,
                                                         changeset_revision=changeset_revision)
    workflow_canvas = WorkflowCanvas()
    canvas = workflow_canvas.canvas
    # Store px width for boxes of each step.
    for step in workflow.steps:
        step.upgrade_messages = {}
        module = module_factory.from_workflow_step(trans, repository_id, changeset_revision, tools_metadata, step)
        tool_errors = module.type == 'tool' and not module.tool
        module_data_inputs = get_workflow_data_inputs(step, module)
        module_data_outputs = get_workflow_data_outputs(step, module, workflow.steps)
        module_name = get_workflow_module_name(module, missing_tool_tups)
        workflow_canvas.populate_data_for_step(
            step,
            module_name,
            module_data_inputs,
            module_data_outputs,
            tool_errors=tool_errors
        )
    workflow_canvas.add_steps(highlight_errors=True)
    workflow_canvas.finish()
    trans.response.set_content_type("image/svg+xml")
    return canvas.tostring()
Example #9
0
def generate_workflow_image( trans, workflow_name, repository_metadata_id=None, repository_id=None ):
    """
    Return an svg image representation of a workflow dictionary created when the workflow was exported.  This method is called
    from both Galaxy and the tool shed.  When called from the tool shed, repository_metadata_id will have a value and repository_id
    will be None.  When called from Galaxy, repository_metadata_id will be None and repository_id will have a value.
    """
    workflow_name = encoding_util.tool_shed_decode( workflow_name )
    if trans.webapp.name == 'tool_shed':
        # We're in the tool shed.
        repository_metadata = metadata_util.get_repository_metadata_by_id( trans.app, repository_metadata_id )
        repository_id = trans.security.encode_id( repository_metadata.repository_id )
        changeset_revision = repository_metadata.changeset_revision
        metadata = repository_metadata.metadata
    else:
        # We're in Galaxy.
        repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
        changeset_revision = repository.changeset_revision
        metadata = repository.metadata
    # metadata[ 'workflows' ] is a list of tuples where each contained tuple is
    # [ <relative path to the .ga file in the repository>, <exported workflow dict> ]
    for workflow_tup in metadata[ 'workflows' ]:
        workflow_dict = workflow_tup[1]
        if workflow_dict[ 'name' ] == workflow_name:
            break
    if 'tools' in metadata:
        tools_metadata = metadata[ 'tools' ]
    else:
        tools_metadata = []
    workflow, missing_tool_tups = get_workflow_from_dict( trans=trans,
                                                          workflow_dict=workflow_dict,
                                                          tools_metadata=tools_metadata,
                                                          repository_id=repository_id,
                                                          changeset_revision=changeset_revision )
    workflow_canvas = WorkflowCanvas()
    canvas = workflow_canvas.canvas
    # Store px width for boxes of each step.
    for step in workflow.steps:
        step.upgrade_messages = {}
        module = module_factory.from_workflow_step( trans, repository_id, changeset_revision, tools_metadata, step )
        tool_errors = module.type == 'tool' and not module.tool
        module_data_inputs = get_workflow_data_inputs( step, module )
        module_data_outputs = get_workflow_data_outputs( step, module, workflow.steps )
        module_name = get_workflow_module_name( module, missing_tool_tups )
        workflow_canvas.populate_data_for_step(
            step,
            module_name,
            module_data_inputs,
            module_data_outputs,
            tool_errors=tool_errors
        )
    workflow_canvas.add_steps( highlight_errors=True )
    workflow_canvas.finish( )
    trans.response.set_content_type( "image/svg+xml" )
    return canvas.tostring()
Example #10
0
 def __get_repo_dict_by_id(self, id):
     tool_shed_repository = repository_util.get_tool_shed_repository_by_id(self.app, id)
     if tool_shed_repository is None:
         log.debug("Unable to locate tool_shed_repository record for id %s." % (str(id)))
         return {}
     tool_shed_repository_dict = tool_shed_repository.as_dict(value_mapper=self.__get_value_mapper(tool_shed_repository))
     tool_shed_repository_dict['url'] = web.url_for(controller='tool_shed_repositories',
                                                    action='show',
                                                    id=self.app.security.encode_id(tool_shed_repository.id))
     tool_shed_repository_dict['repository_dependencies'] = self.__flatten_repository_dependency_list(tool_shed_repository)
     return tool_shed_repository_dict
Example #11
0
    def uninstall_repository(self, trans, id=None, **kwd):
        """
        DELETE /api/tool_shed_repositories/id
        DELETE /api/tool_shed_repositories/

        :param id:  encoded repository id. Either id or name, owner, changeset_revision and tool_shed_url need to be supplied
        :param kwd: 'remove_from_disk'  : Remove repository from disk or deactivate repository.
                                          Defaults to `True` (= remove repository from disk).
                    'name'   : Repository name
                    'owner'  : Repository owner
                    'changeset_revision': Changeset revision to uninstall
                    'tool_shed_url'     : Tool Shed URL
        """
        if id:
            try:
                repository = repository_util.get_tool_shed_repository_by_id(
                    self.app, id)
            except ValueError:
                raise HTTPBadRequest(
                    detail="No repository with id '%s' found" % id)
        else:
            tsr_arguments = [
                'name', 'owner', 'changeset_revision', 'tool_shed_url'
            ]
            try:
                tsr_arguments = {key: kwd[key] for key in tsr_arguments}
            except KeyError as e:
                raise HTTPBadRequest(detail="Missing required parameter '%s'" %
                                     e.args[0])
            repository = repository_util.get_installed_repository(
                app=self.app,
                tool_shed=tsr_arguments['tool_shed_url'],
                name=tsr_arguments['name'],
                owner=tsr_arguments['owner'],
                changeset_revision=tsr_arguments['changeset_revision'])
            if not repository:
                raise HTTPBadRequest(detail="Repository not found")
        irm = InstalledRepositoryManager(app=self.app)
        errors = irm.uninstall_repository(repository=repository,
                                          remove_from_disk=kwd.get(
                                              'remove_from_disk', True))
        if not errors:
            action = 'removed' if kwd.get('remove_from_disk',
                                          True) else 'deactivated'
            return {
                'message':
                'The repository named %s has been %s.' %
                (repository.name, action)
            }
        else:
            raise Exception(
                'Attempting to uninstall tool dependencies for repository named %s resulted in errors: %s'
                % (repository.name, errors))
    def show( self, trans, id, **kwd ):
        """
        GET /api/tool_shed_repositories/{encoded_tool_shed_repsository_id}
        Display a dictionary containing information about a specified tool_shed_repository.

        :param id: the encoded id of the ToolShedRepository object
        """
        # Example URL: http://localhost:8763/api/tool_shed_repositories/df7a1f0c02a5b08e
        tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
        if tool_shed_repository is None:
            log.debug( "Unable to locate tool_shed_repository record for id %s." % ( str( id ) ) )
            return {}
        tool_shed_repository_dict = tool_shed_repository.as_dict( value_mapper=self.__get_value_mapper( trans, tool_shed_repository ) )
        tool_shed_repository_dict[ 'url' ] = web.url_for( controller='tool_shed_repositories',
                                                          action='show',
                                                          id=trans.security.encode_id( tool_shed_repository.id ) )
        return tool_shed_repository_dict
Example #13
0
    def show( self, trans, id, **kwd ):
        """
        GET /api/tool_shed_repositories/{encoded_tool_shed_repsository_id}
        Display a dictionary containing information about a specified tool_shed_repository.

        :param id: the encoded id of the ToolShedRepository object
        """
        # Example URL: http://localhost:8763/api/tool_shed_repositories/df7a1f0c02a5b08e
        tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
        if tool_shed_repository is None:
            log.debug( "Unable to locate tool_shed_repository record for id %s." % ( str( id ) ) )
            return {}
        tool_shed_repository_dict = tool_shed_repository.as_dict( value_mapper=self.__get_value_mapper( trans, tool_shed_repository ) )
        tool_shed_repository_dict[ 'url' ] = web.url_for( controller='tool_shed_repositories',
                                                          action='show',
                                                          id=trans.security.encode_id( tool_shed_repository.id ) )
        return tool_shed_repository_dict
 def get_components_from_repository_dependency_for_installed_repository(
         self, repository_dependency):
     """
     Parse a repository dependency and return components necessary for proper display
     in Galaxy on the Manage repository page.
     """
     # Default prior_installation_required and only_if_compiling_contained_td to False.
     prior_installation_required = 'False'
     only_if_compiling_contained_td = 'False'
     if len(repository_dependency) == 6:
         # Metadata should have been reset on this installed repository, but it wasn't.
         tool_shed_repository_id = repository_dependency[4]
         installation_status = repository_dependency[5]
         tool_shed, name, owner, changeset_revision = repository_dependency[
             0:4]
         repository_dependency = [
             tool_shed, name, owner, changeset_revision,
             prior_installation_required, only_if_compiling_contained_td
         ]
     elif len(repository_dependency) == 7:
         # We have a repository dependency tuple that includes a prior_installation_required value but not a only_if_compiling_contained_td value.
         tool_shed_repository_id = repository_dependency[5]
         installation_status = repository_dependency[6]
         tool_shed, name, owner, changeset_revision, prior_installation_required = repository_dependency[
             0:5]
         repository_dependency = \
             [ tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td ]
     elif len(repository_dependency) == 8:
         # We have a repository dependency tuple that includes both a prior_installation_required value
         # and a only_if_compiling_contained_td value.
         tool_shed_repository_id = repository_dependency[6]
         installation_status = repository_dependency[7]
         repository_dependency = repository_dependency[0:6]
     else:
         tool_shed_repository_id = None
         installation_status = 'unknown'
     if tool_shed_repository_id:
         tool_shed_repository = repository_util.get_tool_shed_repository_by_id(
             self.app, self.app.security.encode_id(tool_shed_repository_id))
         if tool_shed_repository:
             if tool_shed_repository.missing_repository_dependencies:
                 installation_status = '%s, missing repository dependencies' % installation_status
             elif tool_shed_repository.missing_tool_dependencies:
                 installation_status = '%s, missing tool dependencies' % installation_status
     return tool_shed_repository_id, installation_status, repository_dependency
Example #15
0
    def status( self, trans, id, **kwd ):
        """
        GET /api/tool_shed_repositories/{id}/status
        Display a dictionary containing information about a specified repository's installation
        status and a list of its dependencies and the status of each.

        :param id: the repository's encoded id
        """
        tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
        if tool_shed_repository is None:
            log.debug( "Unable to locate tool_shed_repository record for id %s." % ( str( id ) ) )
            return {}
        tool_shed_repository_dict = tool_shed_repository.as_dict( value_mapper=self.__get_value_mapper( trans, tool_shed_repository ) )
        tool_shed_repository_dict[ 'url' ] = web.url_for( controller='tool_shed_repositories',
                                                          action='show',
                                                          id=trans.security.encode_id( tool_shed_repository.id ) )
        tool_shed_repository_dict[ 'repository_dependencies' ] = self.__flatten_repository_dependency_list( trans, tool_shed_repository )
        return tool_shed_repository_dict
 def get_components_from_repository_dependency_for_installed_repository(self, repository_dependency):
     """
     Parse a repository dependency and return components necessary for proper display
     in Galaxy on the Manage repository page.
     """
     # Default prior_installation_required and only_if_compiling_contained_td to False.
     prior_installation_required = 'False'
     only_if_compiling_contained_td = 'False'
     if len(repository_dependency) == 6:
         # Metadata should have been reset on this installed repository, but it wasn't.
         tool_shed_repository_id = repository_dependency[4]
         installation_status = repository_dependency[5]
         tool_shed, name, owner, changeset_revision = repository_dependency[0:4]
         repository_dependency = [tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td]
     elif len(repository_dependency) == 7:
         # We have a repository dependency tuple that includes a prior_installation_required value but not a only_if_compiling_contained_td value.
         tool_shed_repository_id = repository_dependency[5]
         installation_status = repository_dependency[6]
         tool_shed, name, owner, changeset_revision, prior_installation_required = repository_dependency[0:5]
         repository_dependency = \
             [tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td]
     elif len(repository_dependency) == 8:
         # We have a repository dependency tuple that includes both a prior_installation_required value
         # and a only_if_compiling_contained_td value.
         tool_shed_repository_id = repository_dependency[6]
         installation_status = repository_dependency[7]
         repository_dependency = repository_dependency[0:6]
     else:
         tool_shed_repository_id = None
         installation_status = 'unknown'
     if tool_shed_repository_id:
         tool_shed_repository = repository_util.get_tool_shed_repository_by_id(self.app,
                                                                               self.app.security.encode_id(tool_shed_repository_id))
         if tool_shed_repository:
             if tool_shed_repository.missing_repository_dependencies:
                 installation_status = '%s, missing repository dependencies' % installation_status
             elif tool_shed_repository.missing_tool_dependencies:
                 installation_status = '%s, missing tool dependencies' % installation_status
     return tool_shed_repository_id, installation_status, repository_dependency
Example #17
0
    def uninstall_repository(self, trans, id=None, **kwd):
        """
        DELETE /api/tool_shed_repositories/id
        DELETE /api/tool_shed_repositories/

        :param id:  encoded repository id. Either id or name, owner, changeset_revision and tool_shed_url need to be supplied
        :param kwd: 'remove_from_disk'  : Remove repository from disk or deactivate repository.
                                          Defaults to `True` (= remove repository from disk).
                    'name'   : Repository name
                    'owner'  : Repository owner
                    'changeset_revision': Changeset revision to uninstall
                    'tool_shed_url'     : Tool Shed URL
        """
        if id:
            try:
                repository = repository_util.get_tool_shed_repository_by_id(self.app, id)
            except ValueError:
                raise HTTPBadRequest(detail="No repository with id '%s' found" % id)
        else:
            tsr_arguments = ['name', 'owner', 'changeset_revision', 'tool_shed_url']
            try:
                tsr_arguments = {key: kwd[key] for key in tsr_arguments}
            except KeyError as e:
                raise HTTPBadRequest(detail="Missing required parameter '%s'" % e.args[0])
            repository = repository_util.get_installed_repository(app=self.app,
                                                                  tool_shed=tsr_arguments['tool_shed_url'],
                                                                  name=tsr_arguments['name'],
                                                                  owner=tsr_arguments['owner'],
                                                                  changeset_revision=tsr_arguments['changeset_revision'])
            if not repository:
                raise HTTPBadRequest(detail="Repository not found")
        irm = InstalledRepositoryManager(app=self.app)
        errors = irm.uninstall_repository(repository=repository, remove_from_disk=kwd.get('remove_from_disk', True))
        if not errors:
            action = 'removed' if kwd.get('remove_from_disk', True) else 'deactivated'
            return {'message': 'The repository named %s has been %s.' % (repository.name, action)}
        else:
            raise Exception('Attempting to uninstall tool dependencies for repository named %s resulted in errors: %s' % (repository.name, errors))