+ update_user = {
+ "_id": myuser["_id"],
+ "name": myuser["user"],
+ "project_role_mappings": myuser["project_role_mappings"]
+ }
+
+ # if password is defined, update the password
+ if user["password"]:
+ update_user["password"] = user["password"]
+
+ if user["set-project"]:
+ for set_project in user["set-project"]:
+ set_project_clean = [m.trim() for m in set_project.split(",")]
+ project, roles = set_project_clean[0], set_project_clean[1:]
+
+ update_user["project_role_mappings"] = [mapping for mapping
+ in update_user["project_role_mappings"]
+ if mapping[0] != project]
+
+ for role in roles:
+ update_user["project_role_mappings"].append([project, role])
+
+ if user["remove-project"]:
+ for remove_project in user["remove-project"]:
+ update_user["project_role_mappings"] = [mapping for mapping
+ in update_user["project_role_mappings"]
+ if mapping[0] != remove_project]
+
+ if user["add-project-role"]:
+ for add_project_role in user["add-project-role"]:
+ add_project_role_clean = [m.trim() for m in add_project_role.split(",")]
+ project, roles = add_project_role_clean[0], add_project_role_clean[1:]
+
+ for role in roles:
+ mapping = [project, role]
+ if mapping not in update_user["project_role_mappings"]:
+ update_user["project_role_mappings"].append(mapping)
+
+ if user["remove-project-role"]:
+ for remove_project_role in user["remove-project-role"]:
+ remove_project_role_clean = [m.trim() for m in remove_project_role.split(",")]
+ project, roles = remove_project_role_clean[0], remove_project_role_clean[1:]
+
+ for role in roles:
+ mapping_to_remove = [project, role]
+ update_user["project_role_mappings"] = [mapping for mapping
+ in update_user["project_role_mappings"]
+ if mapping != mapping_to_remove]
+
+ if not user["password"] and not user["set-project"] and not user["remove-project"] \
+ and not user["add-project-role"] and not user["remove-project-role"]:
+ raise ClientException("At least one parameter should be defined.")
+