from __future__ import annotations
from dataclasses import dataclass
from lxml import objectify # type: ignore
from q2_sdk.tools.utils import to_bool
from .base import BaseAuthRequest, BaseAuthResponse, Password
[docs]
@dataclass
class Request(BaseAuthRequest):
"""
Shape that comes in from HQ when creating a login.
This can be invoked in a sandbox with ``q2 db create_online_user``
.. code-block:: xml
<HQ request="CreateLogin" messageID="{0}">
<UserId>2</UserId>
<LoginId>3</LoginId>
<Login>LoginName</Login>
<CSRLogin>CSRLoginName</CSRLogin>
<Password Encrypted="true">tJ6HqNzIZH0iGVdmH5t6Tw==</Password>
<isLogon>True</isLogon>
</HQ>
"""
raw: objectify.Element
user_id: int
login_id: int
login_name: str
password: Password
is_logon: bool
@staticmethod
def from_xml(xml: objectify.Element) -> Request:
user_id = int(xml.UserId.text)
login_id = int(xml.LoginId.text)
login_name = xml.Login.text
password = Password(xml.Password.text, to_bool(xml.Password.get("Encrypted")))
is_logon = to_bool(getattr(xml, "isLogon", False))
return Request(
xml,
user_id,
login_id,
login_name,
password,
is_logon,
)
[docs]
@dataclass
class Response(BaseAuthResponse): ...