Warning

This document is for an in-development version 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 galaxy.webapps.galaxy.api.toolshed

import json
import logging
from urllib.parse import quote

from galaxy.exceptions import MessageException
from galaxy.util import url_get
from galaxy.web import (
    expose_api,
    require_admin,
)
from . import BaseGalaxyAPIController

log = logging.getLogger(__name__)


[docs]class ToolShedController(BaseGalaxyAPIController): """RESTful controller for interactions with Toolsheds."""
[docs] @expose_api def index(self, trans, **kwd): """ GET /api/tool_shed Interact with the Toolshed registry of this instance. """ tool_sheds = [] for name, url in trans.app.tool_shed_registry.tool_sheds.items(): tool_sheds.append(dict(name=name, url=quote(url, ""))) return tool_sheds
[docs] @require_admin @expose_api def request(self, trans, **params): """ GET /api/tool_shed/request """ tool_shed_url = params.pop("tool_shed_url") controller = params.pop("controller") if controller is None: raise MessageException("Please provide a toolshed controller name.") tool_shed_registry = trans.app.tool_shed_registry if tool_shed_registry is None: raise MessageException("Toolshed registry not available.") if tool_shed_url in tool_shed_registry.tool_sheds.values(): pathspec = ["api", controller] if "id" in params: pathspec.append(params.pop("id")) if "action" in params: pathspec.append(params.pop("action")) try: return json.loads(url_get(tool_shed_url, params=dict(params), pathspec=pathspec)) except Exception as e: raise MessageException(f"Invalid server response. {str(e)}.") else: raise MessageException("Invalid toolshed url.")