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 galaxy.webapps.galaxy.api.tool_data
from fastapi import (
Body,
Path,
)
from pydantic import (
BaseModel,
Field,
)
from galaxy.celery.tasks import import_data_bundle
from galaxy.managers.tool_data import ToolDataManager
from galaxy.schema.schema import (
AsyncTaskResultSummary,
ImportToolDataBundleSource,
)
from galaxy.tool_util.data._schema import (
ToolDataDetails,
ToolDataEntryList,
ToolDataField,
ToolDataItem,
)
from galaxy.webapps.base.api import GalaxyFileResponse
from galaxy.webapps.galaxy.services.base import async_task_summary
from . import (
depends,
Router,
)
router = Router(tags=["tool data tables"])
ToolDataTableName = Path(
..., # Mark this field as required
title="Data table name",
description="The name of the tool data table",
example="all_fasta",
)
ToolDataTableFieldName = Path(
..., # Mark this field as required
title="Field name",
description="The name of the tool data table field",
)
[docs]class ImportToolDataBundle(BaseModel):
source: ImportToolDataBundleSource = Field(..., discriminator="src")
[docs]@router.cbv
class FastAPIToolData:
tool_data_manager: ToolDataManager = depends(ToolDataManager)
[docs] @router.get(
"/api/tool_data",
summary="Lists all available data tables",
response_description="A list with details on individual data tables.",
require_admin=True,
)
async def index(self) -> ToolDataEntryList:
"""Get the list of all available data tables."""
return self.tool_data_manager.index()
[docs] @router.post(
"/api/tool_data",
summary="Import a data manager bundle",
require_admin=True,
)
async def create(
self, tool_data_file_path=None, import_bundle_model: ImportToolDataBundle = Body(...)
) -> AsyncTaskResultSummary:
source = import_bundle_model.source
result = import_data_bundle.delay(tool_data_file_path=tool_data_file_path, **source.dict())
summary = async_task_summary(result)
return summary
[docs] @router.get(
"/api/tool_data/{table_name}",
summary="Get details of a given data table",
response_description="A description of the given data table and its content",
require_admin=True,
)
async def show(self, table_name: str = ToolDataTableName) -> ToolDataDetails:
"""Get details of a given tool data table."""
return self.tool_data_manager.show(table_name)
[docs] @router.get(
"/api/tool_data/{table_name}/reload",
summary="Reloads a tool data table",
response_description="A description of the reloaded data table and its content",
require_admin=True,
)
async def reload(self, table_name: str = ToolDataTableName) -> ToolDataDetails:
"""Reloads a data table and return its details."""
return self.tool_data_manager.reload(table_name)
[docs] @router.get(
"/api/tool_data/{table_name}/fields/{field_name}",
summary="Get information about a particular field in a tool data table",
response_description="Information about a data table field",
require_admin=True,
)
async def show_field(
self,
table_name: str = ToolDataTableName,
field_name: str = ToolDataTableFieldName,
) -> ToolDataField:
"""Reloads a data table and return its details."""
return self.tool_data_manager.show_field(table_name, field_name)
[docs] @router.get(
"/api/tool_data/{table_name}/fields/{field_name}/files/{file_name}",
summary="Get information about a particular field in a tool data table",
response_description="Information about a data table field",
response_class=GalaxyFileResponse,
require_admin=True,
)
async def download_field_file(
self,
table_name: str = ToolDataTableName,
field_name: str = ToolDataTableFieldName,
file_name: str = Path(
..., # Mark this field as required
title="File name",
description="The name of a file associated with this data table field",
),
):
"""Download a file associated with the data table field."""
path = self.tool_data_manager.get_field_file_path(table_name, field_name, file_name)
return GalaxyFileResponse(str(path))
[docs] @router.delete(
"/api/tool_data/{table_name}",
summary="Removes an item from a data table",
response_description="A description of the affected data table and its content",
require_admin=True,
)
async def delete(
self,
payload: ToolDataItem,
table_name: str = ToolDataTableName,
) -> ToolDataDetails:
"""Removes an item from a data table and reloads it to return its updated details."""
return self.tool_data_manager.delete(table_name, payload.values)