Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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