from argparse import _SubParsersAction
from functools import partial
from typing import List
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 q2_sdk.tools.decorators import dev_only
from .db_object import DbObject
from .representation_row_base import RepresentationRowBase
D_TYPES = ExecuteStoredProcedure.DataType
[docs]
class HostTranCodeGroupRow(RepresentationRowBase):
TranCodeGroupID: IntElement = "TranCodeGroupID"
Description: StringElement = "Description"
[docs]
class HostTranCodeGroup(DbObject):
GET_BY_NAME_KEY = "Description"
NAME = "HostTranCodeGroup"
REPRESENTATION_ROW_CLASS = HostTranCodeGroupRow
[docs]
def add_arguments(self, parser: _SubParsersAction):
subparser = parser.add_parser("get_host_tran_code_groups")
subparser.set_defaults(parser="get")
subparser.set_defaults(func=partial(self.get, serialize_for_cli=True))
subparser = parser.add_parser("create_host_tran_code_group")
subparser.set_defaults(parser="create")
subparser.set_defaults(func=partial(self.create))
subparser.add_argument("description", help="Q2_HostTranCodeGroup.Description")
subparser = parser.add_parser("delete_host_tran_code_group")
subparser.set_defaults(parser="delete")
subparser.set_defaults(func=partial(self.delete))
subparser.add_argument("description", help="Q2_HostTranCodeGroup.Description")
[docs]
async def get(self, serialize_for_cli=False) -> List[HostTranCodeGroupRow]:
response = await self.call_hq("sdk_GetHostTranCodeGroup")
if serialize_for_cli:
columns = ["TranCodeGroupID", "Description"]
response = self.serialize_for_cli(response, columns)
return response
[docs]
async def create(self, description):
params = []
tran_code_group_id = -1
Param(tran_code_group_id, D_TYPES.Int, "TranCodeGroupID").add_to_param_list(
params
)
Param(description, D_TYPES.VarChar, "Description").add_to_param_list(params)
await self.call_hq(
"Q2_HostTranCodeGroupInsert", ExecuteStoredProcedure.SqlParameters(params)
)
[docs]
@dev_only
async def delete(self, description):
"""Note: this only works in the dev environment"""
await self.call_hq(
"sdk_RemoveHostTranCodeGroup",
ExecuteStoredProcedure.SqlParameters([
ExecuteStoredProcedure.SqlParam(
ExecuteStoredProcedure.DataType.VarChar,
"Description",
description,
)
]),
)