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)
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)
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)
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))
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
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)
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))
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)
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)
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"