"""
User models for Centralize
Models for user management, RBAC, and user relations (REST API).
"""
from datetime import date
from typing import List, Optional
from ace.centralize.models.base import ModelBase
[docs]
class BaseEmail(ModelBase):
[docs]
def __init__(
self,
email_type_id: Optional[int] = None,
email_address: Optional[str] = None,
main: Optional[bool] = None,
operation: Optional[str] = None,
email_id: Optional[int] = None
):
if email_type_id is not None:
self.emailTypeId = email_type_id
if email_address is not None:
self.emailAddress = email_address
if main is not None:
self.main = main
if operation is not None:
self.operation = operation
if email_id is not None:
self.id = email_id
[docs]
class BasePhone(ModelBase):
[docs]
def __init__(
self,
phone_type_id: Optional[int] = None,
phone_value: Optional[str] = None,
extension: Optional[str] = None,
main: Optional[bool] = None,
operation: Optional[str] = None,
phone_id: Optional[int] = None,
):
if phone_type_id is not None:
self.phoneTypeId = phone_type_id
if phone_value is not None:
self.phoneValue = phone_value
if extension is not None:
self.extension = extension
if main is not None:
self.main = main
if operation is not None:
self.operation = operation
if phone_id is not None:
self.id = phone_id
[docs]
class UpdateEmail(BaseEmail):
[docs]
def __init__(
self,
operation: str,
email_id: Optional[int] = None,
email_type_id: Optional[int] = None,
email_address: Optional[str] = None,
main: Optional[bool] = None,
):
super().__init__(
email_type_id=email_type_id,
email_address=email_address,
main=main,
email_id=email_id,
operation=operation
)
[docs]
class UpdatePhone(BasePhone):
[docs]
def __init__(
self,
operation: str,
phone_id: Optional[int] = None,
phone_type_id: Optional[int] = None,
phone_value: Optional[str] = None,
extension: Optional[str] = None,
main: Optional[bool] = None,
):
super().__init__(
phone_type_id=phone_type_id,
phone_value=phone_value,
extension=extension,
main=main,
phone_id=phone_id,
operation=operation
)
[docs]
class UpdateUserGroup(ModelBase):
[docs]
def __init__(
self,
add: Optional[list[int]] = None,
remove: Optional[list[int]] = None,
replace: Optional[list[int]] = None
):
if add is not None:
self.add = add
if remove is not None:
self.remove = remove
if replace is not None:
self.replace = replace
[docs]
class CreateUserObject(ModelBase):
[docs]
def __init__(
self,
user_name: str,
password: Optional[str],
user_information: Optional[UserInformations],
email_information: Optional[List[EmailInformations]],
phone_information: Optional[List[PhoneInformations]],
user_group_ids: Optional[UpdateUserGroup] = None,
):
self.userName = user_name
self.password = password
self.userInformations = user_information
self.phoneInformations = phone_information
self.emailInformations = email_information
self.groups = user_group_ids
[docs]
class UpdateUser(ModelBase):
[docs]
def __init__(
self,
user_name: str,
password: Optional[str] = None,
user_information: Optional[UserInformations] = None,
email_information: Optional[List[UpdateEmail]] = None,
phone_information: Optional[List[UpdatePhone]] = None,
user_group_ids: Optional[UpdateUserGroup] = None,
):
self.userName = user_name
if password is not None:
self.password = password
if user_information is not None:
self.userInformations = user_information
if email_information is not None:
self.emailInformations = email_information
if phone_information is not None:
self.phoneInformations = phone_information
if user_group_ids is not None:
self.groups = user_group_ids
[docs]
class CreateRBACUserObject(ModelBase):
[docs]
def __init__(
self,
user_name: str,
email_id: str,
password: str,
password_expiration_date: str,
effective_date: str,
expiration_date: str,
organization_uuid: str,
is_disabled: bool = False
):
self.userName = user_name
self.emailId = email_id
self.password = password
self.passwordExpirationDate = password_expiration_date
self.effectiveDate = effective_date
self.expirationDate = expiration_date
self.organizationUuid = organization_uuid
self.isDisabled = is_disabled
[docs]
class CreateUserRelationsObject(ModelBase):
[docs]
def __init__(
self,
entity_type_id: str,
entity_id: int,
relation_role_id: int,
effective_date: Optional[date] = None,
expiration_date: Optional[date] = None,
):
self.entityTypeId = entity_type_id
self.entityId = entity_id
self.relationRoleId = relation_role_id
self.effectiveDate = effective_date.strftime("%Y-%m-%d") if effective_date else None
self.expirationDate = expiration_date.strftime("%Y-%m-%d") if expiration_date else None