Esempio n. 1
0
def assign_responsible(name, form):
    """
    Assigning a responsible to a project. Admins do that without check with any
    users. For non admins several conditions has to be satisfied:
    1) New responsible has to be different user.
    2) New responsible should be one of project's users
    :param name: String. Name of the project
    :param form: WTForm. Form with data
    :return: object. Instance of ProjectLog object
    """
    if not form.validate_on_submit():
        raise ValueError(form_error_string(form.errors))
    uid = form.login.data
    send = form.send.data
    user = user_by_id(uid)
    if "admin" in current_user.permissions():
        project = get_project_by_name(name)
    else:
        project = check_responsible(name)
    if user == project.responsible:
        raise ValueError("User %s is already responsible for the project %s" %
                         (user.full_name(), project.get_name()))
    if "admin" in current_user.permissions():
        task = TaskQueue().project(project).responsible_assign(user).task
        Task(task).accept()
        return ProjectLog(project).send_message(send).responsible_assign(task)
    if user not in project.users:
        raise ValueError("New responsible has to be one of the project users")
    task = TaskQueue().project(project).responsible_assign(user).task
    return ProjectLog(project).responsible_assign(task)
Esempio n. 2
0
def user_project_update(user, projects):
    old = user.project_names()
    idz = []
    for name in projects:
        project = Project.query.filter_by(name=name).first()
        if not project:
            continue
        if name in old:
            task = TaskQueue().project(project).user_remove(user)
        else:
            task = TaskQueue().project(project).user_assign(user)
        idz.append(task.task.id)
    s, ids = "s" if len(idz) > 1 else "", ", ".join(map(str, idz))
    return "Project change task%s with id%s has been created: %s" % (s, s, ids)
Esempio n. 3
0
def project_create_user(name, form):
    """
    Function which creates a temporary user based on provide info and add a
    create user task in the task queue
    :param name: String. Name of the project where a use should be created
    :param form: Instance of WTForm
    :return: Instance of a project to which a new user has to be attached and an
    instance of TmpUser class
    """
    project = check_responsible(name)
    prenom = form.prenom.data.strip().lower()
    surname = form.surname.data.strip().lower()
    email = form.email.data.strip().lower()
    if User.query.filter(User.email == email).first():
        raise ValueError("User with e-mail %s has been registered already" %
                         email)
    user = TmpUser()
    user.login = generate_login(prenom, surname)
    user.password = generate_password(16)
    user.name = prenom
    user.surname = surname
    user.email = email
    task = TaskQueue().project(project).user_create(user).task
    if current_user.login and "admin" in current_user.permissions():
        Task(task).accept()
    return ProjectLog(project).user_create(task)
Esempio n. 4
0
def user_create_by_admin(form):
    email = form.email.data.strip().lower()
    if User.query.filter_by(email=email).first():
        raise ValueError("User with e-mail %s has been registered already" %
                         email)

    user = TmpUser()
    user.name = form.name.data.strip().lower()
    user.surname = form.surname.data.strip().lower()
    user.email = email
    user.login = form.login.data.strip().lower()
    user.active = True if form.active.data else False
    user.is_user = True if form.is_user.data else False
    user.is_responsible = True if form.is_responsible.data else False
    user.is_manager = True if form.is_manager.data else False
    user.is_tech = True if form.is_tech.data else False
    user.is_admin = True if form.is_admin.data else False
    user.is_committee = True if form.is_committee.data else False

    real = filter(lambda x: True if x != "None" else False, form.project.data)
    names = list(real)
    if not names:
        raise ValueError("Can't create a user in not existing project: %s" %
                         ", ".join(form.project.data))
    for name in names:
        project = get_project_by_name(name)
        tid = TaskQueue().project(project).user_create(user).task.id
        TaskOld(tid).accept()
        msg = "Add a new user: %s '%s %s <%s>'" % (user.login, user.name,
                                                   user.surname, user.email)
        ProjectLog(project).event(msg)
    return "Add creation of the user %s for %s to the execution queue" % (
        user.login, ", ".join(form.project.data))
Esempio n. 5
0
def update_user_details(user, form):
    info = {}
    for name in ["login", "name", "surname", "email", "activate"]:
        if name not in form:
            continue
        data = getattr(form, name).data.strip().lower()
        if getattr(user, name).lower() == data:
            continue
        setattr(user, name, data)
        info[name] = data
    if not info:
        return
    db.session.commit()
    if "activate" in info.keys():
        task = TaskQueue().user(user).user_activate(info)
    else:
        task = TaskQueue().user(user).user_update(info)
    UserLog(user).info_update(info=info)
    return "User info update with id '%s' has been created" % task.id
Esempio n. 6
0
def update_user_project(user, form):
    names = filter(lambda x: True if x != "None" else False, form.project.data)
    new = list(set(user.project_names()) ^ set(list(names)))
    old = user.project_names()
    idz = []
    for name in new:
        project = Project.query.filter_by(name=name).first()
        if not project:
            continue
        if name in old:
            project.users.remove(user)
            task = TaskQueue().project(project).user_remove(user)
        else:
            project.users.append(user)
            task = TaskQueue().project(project).user_assign(user)
        idz.append(task.task.id)
    if not idz:
        return
    db.session.commit()
    s, ids = "s" if len(idz) > 1 else "", ", ".join(map(str, idz))
    return "Project change task%s with id%s %s has been created" % (s, s, ids)
Esempio n. 7
0
def web_project_delete_user():
    data = request.get_json()
    if not data:
        raise ValueError("Expecting application/json requests")
    pid = check_int(data["project"])
    login = check_str(data["login"].strip().lower())
    project = get_project_record(pid)
    users = list(map(lambda x: x.login, project.users))
    if login not in users:
        raise ValueError(
            "User '%s' seems not to be registered in project '%s'" %
            (login, project.get_name()))
    user = get_user_record(login)
    task = TaskQueue().project(project).user_remove(user).task
    return jsonify(message=ProjectLog(project).user_delete(task))
Esempio n. 8
0
def project_attach_user(name, form):
    """
    Function which attach an existing user to a given project
    :param name: String. Name of the project to which user should be attached
    :param form: Instance of WTForm
    :return: Instance of a project to which a new user has to be attached and an
    instance of User class
    """
    project = check_responsible(name)
    uid = form.login.data
    user = User.query.filter(User.id == uid).first()
    if not user:
        raise ValueError("Failed to find user with ID '%s' in database" % uid)
    if user in project.users:
        raise ValueError("User %s has been already attached to project %s" %
                         (user.full(), project.get_name()))
    task = TaskQueue().project(project).user_assign(user).task
    if "admin" in current_user.permissions():
        Task(task).accept()
    return ProjectLog(project).user_assign(task)
Esempio n. 9
0
def user_edit(login, form):
    if not form.validate_on_submit():
        raise ValueError(form_error_string(form.errors))
    user = get_user_record(login)
    old = {"name": user.name, "surname": user.surname, "email": user.email,
           "login": user.login}
    new = {"name": form.prenom.data, "surname": form.surname.data,
           "email": form.email.data, "login": login}

    c_dict = {}
    for key in ["name", "surname", "email", "login"]:
        old_value = old[key].lower()
        new_value = new[key].lower()
        if old_value == new_value:
            continue
        c_dict[key] = new_value

    if not c_dict:
        raise ValueError("No changes in submitted user information found")
    TaskQueue().user(user).user_update(c_dict)
    return UserLog(user).user_update(info=c_dict)
Esempio n. 10
0
def user_reset_pass(uid):
    user = user_by_id(uid)
    task = TaskQueue().user(user).password_reset().task
    Task(task).accept()
    return "Password reset task has been added to execution queue"