import logging
from typing import Type
from lxml.builder import ElementMaker, E
from q2_cores.SymXchange.models import namespaces
from q2_cores.SymXchange.models import Credentials, DeviceInformation
from q2_cores.SymXchange.queries.base_query import SymXchangeBaseQuery
[docs]
class AccountQuery(SymXchangeBaseQuery):
def __init__(
self,
logger: logging.Logger,
account_number: str,
credentials: Type[Credentials],
device_info: DeviceInformation,
request: ElementMaker,
mock_failure: bool = False,
):
self.account_number = account_number
self._request = request
super().__init__(logger, credentials, device_info, mock_failure)
@property
def service(self) -> str:
return "account"
[docs]
@staticmethod
def create_request() -> ElementMaker:
return ElementMaker(
namespace=namespaces.SYMXCHANGE_ACCOUNT,
nsmap={"acc": namespaces.SYMXCHANGE_ACCOUNT},
)
[docs]
def build(self) -> str:
# Grab the first child element which should be the <Request> element
request = self._request[0]
if request:
request.insert(0, E("AccountNumber", self.account_number))
request.insert(1, self.create_credentials())
request.insert(2, self.create_device_info())
envelope = self.create_envelope(self._request)
return super().serialize(envelope)