import logging
import uuid
from typing import Type
from lxml.builder import E, ElementMaker
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 PoweronQuery(SymXchangeBaseQuery):
def __init__(
self,
logger: logging.Logger,
rg_name: str,
rg_state: str,
rg_usrchr_params: list,
rg_usrnum_params: list,
credentials: Type[Credentials],
device_info: DeviceInformation,
mock_response_string: str = None,
mock_failure: bool = False,
):
self.rg_name = rg_name.strip()
self.rg_state = rg_state.strip()
self.rg_usrchr_params = rg_usrchr_params or []
self.rg_usrnum_params = rg_usrnum_params or []
super().__init__(
logger, credentials, device_info, mock_response_string, mock_failure
)
@property
def service(self) -> str:
return "poweron"
[docs]
def build(self) -> str:
poweron = ElementMaker(
namespace=namespaces.SYMXCHANGE_POWERON,
nsmap={"pow": namespaces.SYMXCHANGE_POWERON},
)
# User chr parameters
user_params = []
for i, param in enumerate(self.rg_usrchr_params, start=1):
user_params.append(E.RGUserChr(E.ID(str(i)), E.Value(param.strip())))
# User num parameters
for i, param in enumerate(self.rg_usrnum_params, start=1):
user_params.append(E.RGUserNum(E.ID(str(i)), E.Value(str(param))))
execute_poweron = poweron.executePowerOn(
E.Request(
self.create_credentials(),
self.create_device_info(),
E.Header(E.MessageID(str(uuid.uuid4())), E.RGState(self.rg_state)),
E.Body(
E.File(self.rg_name),
E.RGSession("1"),
E.UserDefinedParameters(*user_params),
),
)
)
envelope = self.create_envelope(execute_poweron)
return super().serialize(envelope)