Warning
This document is for an old release 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 tool_shed.webapp.api.tools
import json
import logging
from galaxy import (
exceptions,
util,
)
from galaxy.web import (
expose_api,
expose_api_raw_anonymous_and_sessionless,
require_admin,
)
from tool_shed.managers.tools import search
from tool_shed.util.shed_index import build_index
from . import BaseShedAPIController
log = logging.getLogger(__name__)
[docs]class ToolsController(BaseShedAPIController):
"""RESTful controller for interactions with tools in the Tool Shed."""
[docs] @expose_api
@require_admin
def build_search_index(self, trans, **kwd):
"""
PUT /api/tools/build_search_index
Not part of the stable API, just something to simplify bootstrapping tool sheds,
scripting, testing, etc...
"""
repos_indexed, tools_indexed = build_index(
trans.app.config.whoosh_index_dir,
trans.app.config.file_path,
trans.app.config.hgweb_config_dir,
trans.app.config.hgweb_repo_prefix,
trans.app.config.database_connection,
)
return {
"repositories_indexed": repos_indexed,
"tools_indexed": tools_indexed,
}
[docs] @expose_api_raw_anonymous_and_sessionless
def index(self, trans, **kwd):
"""
GET /api/tools
Displays a collection of tools with optional criteria.
:param q: (optional)if present search on the given query will be performed
:type q: str
:param page: (optional)requested page of the search
:type page: int
:param page_size: (optional)requested page_size of the search
:type page_size: int
:param jsonp: (optional)flag whether to use jsonp format response, defaults to False
:type jsonp: bool
:param callback: (optional)name of the function to wrap callback in
used only when jsonp is true, defaults to 'callback'
:type callback: str
:returns dict: object containing list of results and metadata
Examples:
GET http://localhost:9009/api/tools
GET http://localhost:9009/api/tools?q=fastq
"""
q = kwd.get("q", "")
if not q:
raise exceptions.NotImplemented(
'Listing of all the tools is not implemented. Provide parameter "q" to search instead.'
)
else:
page = kwd.get("page", 1)
page_size = kwd.get("page_size", 10)
try:
page = int(page)
page_size = int(page_size)
except ValueError:
raise exceptions.RequestParameterInvalidException('The "page" and "page_size" have to be integers.')
return_jsonp = util.asbool(kwd.get("jsonp", False))
callback = kwd.get("callback", "callback")
search_results = search(trans, q, page, page_size)
if return_jsonp:
response = str(f"{callback}({json.dumps(search_results)});")
else:
response = json.dumps(search_results)
return response