"""Routes for Tool Versions."""
from http import HTTPStatus as StatusCodes
from typing import Any, Dict, cast
import sqlalchemy
import structlog
from fastapi import Request
from sqlalchemy import select
from starlette.responses import JSONResponse
from jobmon.server.web.db import get_sessionmaker
from jobmon.server.web.models.task_template import TaskTemplate
from jobmon.server.web.models.tool_version import ToolVersion
from jobmon.server.web.routes.v2.fsm import fsm_router as api_v2_router
from jobmon.server.web.server_side_exception import InvalidUsage
[docs]
logger = structlog.get_logger(__name__)
[docs]
SessionMaker = get_sessionmaker()
@api_v2_router.post("/tool_version")
@api_v2_router.get("/tool_version/{tool_version_id}/task_templates")
[docs]
def get_task_templates(tool_version_id: int) -> Any:
"""Get the Tool Version."""
# check input variable
structlog.contextvars.bind_contextvars(tool_version_id=tool_version_id)
logger.info("Getting available task_templates")
with SessionMaker() as session:
with session.begin():
select_stmt = select(TaskTemplate).where(
TaskTemplate.tool_version_id == tool_version_id
)
task_templates = session.execute(select_stmt).scalars().all()
wire_format = [t.to_wire_as_client_task_template() for t in task_templates]
resp = JSONResponse(
content={"task_templates": wire_format}, status_code=StatusCodes.OK
)
return resp