from argparse import _SubParsersAction
from functools import partial
from typing import List, 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]
class AdminLogonsRow(RepresentationRowBase):
AdminUserLogonID: IntElement = "AdminUserLogonID"
AdminUserID: IntElement = "AdminUserID"
LoginName: StringElement = "LoginName"
DeletedDate: StringElement = "DeletedDate"
[docs]
class AdminLogons(DbObject):
"""
Note:
This database object should only be used to support integrations that rely on it.
If that is not the case, use the AdminUserLogon DBObject instead.
"""
GET_BY_NAME_KEY = "LoginName"
NAME = "AdminLogons"
REPRESENTATION_ROW_CLASS = AdminLogonsRow
[docs]
def add_arguments(self, parser: _SubParsersAction):
subparser = parser.add_parser("get_admin_logons")
subparser.set_defaults(parser="get")
subparser.set_defaults(func=partial(self.get, serialize_for_cli=True))
subparser.add_argument("-l", "--login-name", help="Q2_AdminLogons.LoginName")
subparser.add_argument(
"-d",
"--include-deleted",
action="store_true",
help="include deleted admins",
)
[docs]
async def get(
self,
login_name: Optional[int] = None,
include_deleted=False,
serialize_for_cli=False,
) -> List[AdminLogonsRow]:
sql_params = []
if login_name:
Param(login_name, D_TYPES.VarChar, "login_name").add_to_param_list(
sql_params
)
if include_deleted:
Param(include_deleted, D_TYPES.Bit, "include_deleted").add_to_param_list(
sql_params
)
response = await self.call_hq(
"sdk_GetAdminLogons", ExecuteStoredProcedure.SqlParameters(sql_params)
)
if serialize_for_cli:
columns = ["AdminUserLogonID", "AdminUserID", "LoginName", "DeletedDate"]
response = self.serialize_for_cli(response, columns)
return response