def take_app_action(self, parsed_args: argparse.Namespace, app_context: AppEnvironment) -> None: # TODO - G.M - 05-04-2018 -Refactor this in order # to not setup object var outside of __init__ . self._session = app_context["request"].dbsession self._app_config = app_context["registry"].settings["CFG"] self._user_api = UserApi(current_user=None, session=self._session, config=self._app_config) user = self._user_api.get_one_by_login(parsed_args.login) profile = None if parsed_args.profile: profile = Profile.get_profile_from_slug(parsed_args.profile) try: user = self._user_api.update( user=user, email=parsed_args.email, name=parsed_args.public_name, password=parsed_args.password, timezone=parsed_args.timezone, username=parsed_args.username, allowed_space=parsed_args.allowed_space, profile=profile, do_save=True, ) self._user_api.execute_created_user_actions(user) except TracimException as exc: self._session.rollback() print("Error: " + str(exc)) print("User not updated.") raise exc print("User updated")
def create_user(self, context, request: TracimRequest, hapic_data=None): """ Create new user """ app_config = request.registry.settings["CFG"] # type: CFG uapi = UserApi( current_user=request.current_user, session=request.dbsession, config=app_config # User ) if hapic_data.body.profile: profile = Profile.get_profile_from_slug(hapic_data.body.profile) else: profile = None password = hapic_data.body.password if not password and hapic_data.body.email_notification: password = password_generator() user = uapi.create_user( auth_type=AuthType.UNKNOWN, email=hapic_data.body.email, password=password, timezone=hapic_data.body.timezone, lang=hapic_data.body.lang, name=hapic_data.body.public_name, do_notify=hapic_data.body.email_notification, allowed_space=hapic_data.body.allowed_space, profile=profile, do_save=True, ) uapi.execute_created_user_actions(user) return uapi.get_user_with_context(user)
def create_minimal_user(self, email, profile: typing.Optional[Profile] = None, save_now=False) -> User: """Previous create_user method""" lowercase_email = email.lower() if email is not None else None validator = TracimValidator() validator.add_validator("email", lowercase_email, user_email_validator) validator.validate_all() self._check_email(lowercase_email) user = User() user.email = lowercase_email # TODO - G.M - 2018-11-29 - Check if this default_value can be # incorrect according to user_public_name_validator user.display_name = email.split("@")[0] user.created = datetime.datetime.utcnow() if not profile: profile = Profile.get_profile_from_slug( self._config.USER__DEFAULT_PROFILE) user.profile = profile self._session.add(user) if save_now: self._session.flush() return user
def test_profile__ok__get_profile__from_slug__ok__nominal_case(self): profile = Profile.get_profile_from_slug("administrators") assert profile assert profile.slug assert isinstance(profile.slug, str) assert profile.id > 0 assert isinstance(profile.id, int)
def take_app_action(self, parsed_args: argparse.Namespace, app_context: AppEnvironment) -> None: # TODO - G.M - 05-04-2018 -Refactor this in order # to not setup object var outside of __init__ . self._session = app_context["request"].dbsession self._app_config = app_context["registry"].settings["CFG"] self._user_api = UserApi(current_user=None, session=self._session, config=self._app_config) user = self._proceed_user(parsed_args) if parsed_args.profile: user.profile = Profile.get_profile_from_slug(parsed_args.profile) print("User created/updated")
def allowed_to_invite_new_user(self, email: str) -> bool: # INFO - G.M - 2018-10-25 - disallow account creation if no # email provided or email_notification disabled. if not email: return False if (not self._config.EMAIL__NOTIFICATION__ACTIVATED and self._config.NEW_USER__INVITATION__DO_NOTIFY): return False # INFO - G.M - 2018-10-25 - do not allow all profile to invite new user invite_minimal_profile = Profile.get_profile_from_slug( self._config.NEW_USER__INVITATION__MINIMAL_PROFILE) if not self._user.profile.id >= invite_minimal_profile.id: return False return True
def set_profile(self, context, request: TracimRequest, hapic_data=None): """ set user profile """ app_config = request.registry.settings["CFG"] # type: CFG uapi = UserApi( current_user=request.current_user, session=request.dbsession, config=app_config # User ) profile = Profile.get_profile_from_slug(hapic_data.body.profile) uapi.update( user=request.candidate_user, auth_type=request.candidate_user.auth_type, profile=profile, do_save=True, ) return
def create_minimal_user( self, email: typing.Optional[str] = None, username: typing.Optional[str] = None, profile: typing.Optional[Profile] = None, save_now=False, ) -> User: """Previous create_user method""" if not email: if self._config.EMAIL__REQUIRED: raise EmailRequired("Email is required to create an user") if not username: raise EmailOrUsernameRequired( "Email or username is required to create an user") lowercase_email = email.lower() if email is not None else None validator = TracimValidator() validator.add_validator("email", lowercase_email, user_email_validator) validator.validate_all() if lowercase_email is not None: self._check_email(lowercase_email) if username is not None: self.check_username(username) user = User() user.email = lowercase_email user.username = username # TODO - G.M - 2018-11-29 - Check if this default_value can be # incorrect according to user_public_name_validator user.display_name = email.split("@")[0] if email else username user.created = datetime.datetime.utcnow() if not profile: profile = Profile.get_profile_from_slug( self._config.USER__DEFAULT_PROFILE) user.profile = profile if save_now: self.save(user) return user
def take_app_action(self, parsed_args: argparse.Namespace, app_context: AppEnvironment) -> None: # TODO - G.M - 05-04-2018 -Refactor this in order # to not setup object var outside of __init__ . if parsed_args.send_email and not parsed_args.email: print("Warning: No email provided, can not send email to user.") self._session = app_context["request"].dbsession self._app_config = app_context["registry"].settings["CFG"] self._user_api = UserApi(current_user=None, session=self._session, config=self._app_config) profile = None if parsed_args.profile: profile = Profile.get_profile_from_slug(parsed_args.profile) if not parsed_args.password and parsed_args.send_email: parsed_args.password = password_generator() try: user = self._user_api.create_user( email=parsed_args.email, name=parsed_args.public_name, password=parsed_args.password, username=parsed_args.username, timezone=parsed_args.timezone, lang=parsed_args.lang, allowed_space=parsed_args.allowed_space, profile=profile, do_save=True, do_notify=parsed_args.send_email, ) self._user_api.execute_created_user_actions(user) except TracimException as exc: self._session.rollback() print("Error: " + str(exc)) print("User not created.") raise exc print("User created")
def test_profile__ok__get_role__from_slug__err__profile_does_not_exist( self): with pytest.raises(ProfileDoesNotExist): Profile.get_profile_from_slug("this slug does not exist")