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.item_tags
"""
API operations related to tagging items.
"""
import logging
from fastapi import (
Body,
Path,
)
from typing_extensions import Annotated
from galaxy.managers.context import ProvidesAppContext
from galaxy.managers.item_tags import ItemTagsManager
from galaxy.schema.fields import DecodedDatabaseIdField
from galaxy.schema.item_tags import (
ItemTagsCreatePayload,
ItemTagsListResponse,
ItemTagsResponse,
)
from galaxy.webapps.galaxy.api import (
depends,
DependsOnTrans,
Router,
)
log = logging.getLogger(__name__)
router = Router()
[docs]
@router.cbv
class FastAPIItemTags:
manager: ItemTagsManager = depends(ItemTagsManager)
[docs]
@classmethod
def create_class(cls, prefix, tagged_item_class, tagged_item_id, api_docs_tag, extra_path_params):
class Temp(cls):
@router.get(
f"/api/{prefix}/{{{tagged_item_id}}}/tags",
tags=[api_docs_tag],
summary=f"Show tags based on {tagged_item_id}",
openapi_extra=extra_path_params,
)
def index(
self,
item_id: Annotated[DecodedDatabaseIdField, Path(..., title="Item ID", alias=tagged_item_id)],
trans: ProvidesAppContext = DependsOnTrans,
) -> ItemTagsListResponse:
return self.manager.index(trans, tagged_item_class, item_id)
@router.get(
f"/api/{prefix}/{{{tagged_item_id}}}/tags/{{tag_name}}",
tags=[api_docs_tag],
summary=f"Show tag based on {tagged_item_id}",
openapi_extra=extra_path_params,
)
def show(
self,
item_id: Annotated[DecodedDatabaseIdField, Path(..., title="Item ID", alias=tagged_item_id)],
trans: ProvidesAppContext = DependsOnTrans,
tag_name: str = Path(..., title="Tag Name"),
) -> ItemTagsResponse:
return self.manager.show(trans, tagged_item_class, item_id, tag_name)
@router.post(
f"/api/{prefix}/{{{tagged_item_id}}}/tags/{{tag_name}}",
tags=[api_docs_tag],
summary=f"Create tag based on {tagged_item_id}",
openapi_extra=extra_path_params,
)
def create(
self,
item_id: Annotated[DecodedDatabaseIdField, Path(..., title="Item ID", alias=tagged_item_id)],
trans: ProvidesAppContext = DependsOnTrans,
tag_name: str = Path(..., title="Tag Name"),
payload: ItemTagsCreatePayload = Body(None),
) -> ItemTagsResponse:
if payload is None:
payload = ItemTagsCreatePayload()
return self.manager.create(trans, tagged_item_class, item_id, tag_name, payload)
@router.put(
f"/api/{prefix}/{{{tagged_item_id}}}/tags/{{tag_name}}",
tags=[api_docs_tag],
summary=f"Update tag based on {tagged_item_id}",
openapi_extra=extra_path_params,
)
def update(
self,
item_id: Annotated[DecodedDatabaseIdField, Path(..., title="Item ID", alias=tagged_item_id)],
trans: ProvidesAppContext = DependsOnTrans,
tag_name: str = Path(..., title="Tag Name"),
payload: ItemTagsCreatePayload = Body(...),
) -> ItemTagsResponse:
return self.manager.create(trans, tagged_item_class, item_id, tag_name, payload)
@router.delete(
f"/api/{prefix}/{{{tagged_item_id}}}/tags/{{tag_name}}",
tags=[api_docs_tag],
summary=f"Delete tag based on {tagged_item_id}",
openapi_extra=extra_path_params,
)
def delete(
self,
item_id: Annotated[DecodedDatabaseIdField, Path(..., title="Item ID", alias=tagged_item_id)],
trans: ProvidesAppContext = DependsOnTrans,
tag_name: str = Path(..., title="Tag Name"),
) -> bool:
return self.manager.delete(trans, tagged_item_class, item_id, tag_name)
return Temp
prefixes = {
"histories": ["History", "history_id", "histories"],
"histories/{history_id}/contents": ["HistoryDatasetAssociation", "history_content_id", "histories"],
"workflows": ["StoredWorkflow", "workflow_id", "workflows"],
}
for prefix, tagged_item in prefixes.items():
tagged_item_class, tagged_item_id, api_docs_tag = tagged_item
extra_path_params = None
if tagged_item_id == "history_content_id":
extra_path_params = {
"parameters": [
{
"in": "path",
"name": "history_id",
"required": True,
"schema": {"title": "History ID", "type": "string"},
}
]
}
router.cbv(FastAPIItemTags.create_class(prefix, tagged_item_class, tagged_item_id, api_docs_tag, extra_path_params))
# TODO: Visualization and Pages once APIs for those are available