def github_register(username: str, email: str, full_name: str, github_id: int, bio: str, token: str = None): """ Register a new user from github. This can raise `exc.IntegrityError` exceptions in case of conflics found. :returns: User """ auth_data_model = apps.get_model("users", "AuthData") user_model = apps.get_model("users", "User") try: # Github user association exist? auth_data = auth_data_model.objects.get(key="github", value=github_id) user = auth_data.user except auth_data_model.DoesNotExist: try: # Is a user with the same email as the github user? user = user_model.objects.get(email=email) auth_data_model.objects.create(user=user, key="github", value=github_id, extra={}) except user_model.DoesNotExist: # Create a new user username_unique = slugify_uniquely(username, user_model, slugfield="username") user = user_model.objects.create(email=email, username=username_unique, full_name=full_name, bio=bio) auth_data_model.objects.create(user=user, key="github", value=github_id, extra={}) send_register_email(user) user_registered_signal.send(sender=user.__class__, user=user) if token: membership = get_membership_by_token(token) try: membership.user = user membership.save(update_fields=["user"]) except IntegrityError: raise exc.IntegrityError( _("This user is already a member of the project.")) return user
def accept_invitation_by_existing_user(token:str, user_id:int): user_model = get_user_model() user = user_model.objects.get(id=user_id) membership = get_membership_by_token(token) try: membership.user = user membership.save(update_fields=["user"]) except IntegrityError: raise exc.IntegrityError(_("This user is already a member of the project.")) return user
def set_notify_policy_level(notify_policy, notify_level, live=False): """ Set notification level for specified policy. """ if notify_level not in [e.value for e in NotifyLevel]: raise exc.IntegrityError(_("Invalid value for notify level")) if live: notify_policy.live_notify_level = notify_level else: notify_policy.notify_level = notify_level notify_policy.save()
def create_user_project_settings(project, user, homepage=Section.timeline): """ Given a project and user, create notification policy for it. """ model_cls = apps.get_model("settings", "UserProjectSettings") try: return model_cls.objects.create(project=project, user=user, homepage=homepage) except IntegrityError as e: raise exc.IntegrityError( _("Notify exists for specified user and project")) from e
def create_notify_policy(project, user, level=NotifyLevel.involved, live_level=NotifyLevel.involved): """ Given a project and user, create notification policy for it. """ model_cls = apps.get_model("notifications", "NotifyPolicy") try: return model_cls.objects.create(project=project, user=user, notify_level=level, live_notify_level=live_level) except IntegrityError as e: raise exc.IntegrityError( _("Notify exists for specified user and project")) from e
def create_notify_policy_if_not_exists(project, user, level=NotifyLevel.involved, live_level=NotifyLevel.involved, web_level=True): """ Given a project and user, create notification policy for it. """ model_cls = apps.get_model("notifications", "NotifyPolicy") try: result = model_cls.objects.get_or_create( project=project, user=user, defaults={ "notify_level": level, "live_notify_level": live_level, "web_notify_level": web_level } ) return result[0] except IntegrityError as e: raise exc.IntegrityError( _("Notify exists for specified user and project")) from e