"""Routes for Tool Versions."""
from http import HTTPStatus as StatusCodes
from typing import Any, cast, Dict
from flask import jsonify, request
import sqlalchemy
from sqlalchemy import select
import structlog
from jobmon.server.web.models.task_template import TaskTemplate
from jobmon.server.web.models.tool_version import ToolVersion
from jobmon.server.web.routes.v1 import api_v1_blueprint
from jobmon.server.web.routes.v2 import api_v2_blueprint
from jobmon.server.web.routes.v2 import SessionLocal
from jobmon.server.web.server_side_exception import InvalidUsage
[docs]
logger = structlog.get_logger(__name__)
@api_v1_blueprint.route("/tool_version", methods=["POST"])
@api_v2_blueprint.route("/tool_version", methods=["POST"])
@api_v1_blueprint.route(
"/tool_version/<tool_version_id>/task_templates", methods=["GET"]
)
@api_v2_blueprint.route(
"/tool_version/<tool_version_id>/task_templates", methods=["GET"]
)
[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")
session = SessionLocal()
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 = jsonify(task_templates=wire_format)
resp.status_code = StatusCodes.OK
return resp