from argparse import _SubParsersAction
from dataclasses import dataclass, fields
from functools import partial
from typing import Optional
from lxml.objectify import IntElement, StringElement
from q2_sdk.core.dynamic_imports import (
api_ExecuteStoredProcedure as ExecuteStoredProcedure,
)
from q2_sdk.hq.models.hq_params.stored_procedure import Param
from .db_object import DbObject
from .representation_row_base import RepresentationRowBase
D_TYPES = ExecuteStoredProcedure.DataType
[docs]
@dataclass
class CustomEndpointParameters:
shortName: Optional[str] = None
description: Optional[str] = None
wedgeAddressID: Optional[int] = None
author: Optional[str] = None
customEndpointID: Optional[int] = None
[docs]
def build_sql_parameters(self):
params = []
for field in fields(self):
name = field.name
value = getattr(self, name)
if value:
this_type = (
D_TYPES.Int
if field.type is int or field.type is Optional[int]
else D_TYPES.VarChar
)
Param(value, this_type, name).add_to_param_list(params)
return params
[docs]
class CaliperApiCustomEndpointsRow(RepresentationRowBase):
# object name: type hinting = "column name in the db response"
CustomEndpointID: IntElement = "CustomEndpointID"
ShortName: StringElement = "ShortName"
Description: StringElement = "Description"
WedgeAddressID: IntElement = "WedgeAddressID"
Author: StringElement = "Author"
[docs]
class CaliperApiCustomEndpoints(DbObject):
# GET_BY_NAME_KEY = "column in the db response"
NAME = "CaliperApiCustomEndpoints"
REPRESENTATION_ROW_CLASS = CaliperApiCustomEndpointsRow
[docs]
def add_arguments(self, parser: _SubParsersAction):
subparser = parser.add_parser("get_caliper_api_custom_endpoints")
subparser.set_defaults(parser="get")
subparser.set_defaults(func=partial(self.get, serialize_for_cli=True))
subparser = parser.add_parser("get_caliper_api_custom_endpoint")
subparser.set_defaults(parser="get_by_short_name")
subparser.set_defaults(
func=partial(self.get_by_short_name, serialize_for_cli=True)
)
subparser.add_argument(
"-s", "--short-name", help="sdk_CaliperAPICustomEndpoint.ShortName"
)
[docs]
async def get(self, serialize_for_cli=False) -> list[CaliperApiCustomEndpointsRow]:
response = await self.call_hq(
"sdk_GetCaliperAPICustomEndpoints", ExecuteStoredProcedure.SqlParameters([])
)
if serialize_for_cli:
columns = ["CustomEndpointID", "ShortName", "WedgeAddressID"]
response = self.serialize_for_cli(response, columns)
return response
[docs]
async def get_by_short_name(
self, short_name, serialize_for_cli=False
) -> list[CaliperApiCustomEndpointsRow]:
params = []
Param(short_name, D_TYPES.VarChar, "shortName").add_to_param_list(params)
response = await self.call_hq(
"sdk_GetCaliperAPICustomEndpoint",
ExecuteStoredProcedure.SqlParameters(params),
)
if serialize_for_cli:
columns = ["CustomEndpointID", "ShortName", "WedgeAddressID", "Url"]
response = self.serialize_for_cli(response, columns)
return response
[docs]
async def create(self, endpoint_parameters: CustomEndpointParameters):
sql_parameters = endpoint_parameters.build_sql_parameters()
await self.call_hq(
"sdk_CreateCaliperAPICustomEndpoint",
ExecuteStoredProcedure.SqlParameters(sql_parameters),
)
[docs]
async def update(self, endpoint_parameters: CustomEndpointParameters):
sql_parameters = endpoint_parameters.build_sql_parameters()
await self.call_hq(
"sdk_UpdateCaliperAPICustomEndpoint",
ExecuteStoredProcedure.SqlParameters(sql_parameters),
)
[docs]
async def delete(self, short_name):
remove_endpoint_param = []
Param(short_name, D_TYPES.VarChar, "shortName").add_to_param_list(
remove_endpoint_param
)
await self.call_hq(
"sdk_RemoveCaliperAPICustomEndpoint",
ExecuteStoredProcedure.SqlParameters(remove_endpoint_param),
)