from typing import Optional
from q2_sdk.core.exceptions import ConfigurationError
from q2_sdk.core.q2_logging.logger import Q2LoggerType
from q2_sdk.hq.models.hq_credentials import HqCredentials, BackOfficeHqCredentials
from q2_sdk.core.configuration import get_settings
from q2_sdk.core import contexts
from .base import BaseParamsObj
[docs]
class Q2ApiParamsObj(BaseParamsObj):
"""
For use with HQ Endpoints defined within the Q2API.asmx route
"""
ENDPOINT_PATH = "Q2API"
def __init__(
self, logger: Q2LoggerType, hq_credentials: Optional[HqCredentials] = None
):
settings = get_settings()
if not hq_credentials:
current_request = contexts.get_current_request(raise_if_none=False)
if current_request:
hq_credentials = current_request.request_handler.hq_credentials
if settings.MULTITENANT and not hq_credentials and settings.DEBUG:
logger.error(
f'Multitenant mode set to TRUE: this requires HQ credentials to be explicitly passed to ParamsObj for "{self.__class__.__module__}".',
stack_info=True,
)
raise ConfigurationError(
"Multitenant mode enabled but no credentials available"
)
if isinstance(hq_credentials, BackOfficeHqCredentials):
hq_credentials = hq_credentials.base_hq_credentials
super().__init__(logger, hq_credentials=hq_credentials)
self.request_params.update({
"CsrLogonName": self.hq_credentials.csr_user,
"CsrPassword": self.hq_credentials.csr_pwd,
"ABA": self.hq_credentials.aba,
})