Source code for plynx.service.users

"""Main PLynx users service and utils"""
from typing import Optional

from plynx.db.user import User, UserCollectionManager

[docs]LIST_USERS = 'list_users'
[docs]CREATE_USER = 'create_user'
[docs]ACTIVATE_USER = 'activate_user'
[docs]DEACTIVATE_USER = 'deactivate_user'
[docs]MODES = [ LIST_USERS, CREATE_USER, ACTIVATE_USER, DEACTIVATE_USER,
]
[docs]def run_list_users() -> None: """List all users""" for user_dict in User.find_users(): user = User.from_dict(user_dict) print(','.join(map(str, [user._id, user.username])))
[docs]def run_create_user(email: Optional[str], username: Optional[str], password: Optional[str]) -> User: """Create a user""" if not username: raise ValueError('Username must be specified') password = password or '' user = User() user.username = username user.email = email user.hash_password(password) user.save() print(f"User `{username}` created") return user
[docs]def run_set_activation(username: Optional[str], value: bool) -> None: """Set user active status""" assert username, "Argument `username` is undifined" user = UserCollectionManager.find_user_by_name(username) if not user: raise ValueError(f"Username `{username}` not found") user.active = value user.save() print(f"User`s `{username}` active state changed to {value}")
[docs]def run_users(mode: str, email: Optional[str] = None, username: Optional[str] = None, password: Optional[str] = ''): """Users CLI entrypoint""" if mode not in MODES: raise ValueError(f"`mode` must be one of `{MODES}`. Value `{mode}` is given") if mode == LIST_USERS: run_list_users() elif mode == CREATE_USER: run_create_user(email, username, password) elif mode == ACTIVATE_USER: run_set_activation(username, True) elif mode == DEACTIVATE_USER: run_set_activation(username, False)