From 2c79fbe4617c849190fc19c55adabec80b9aa289 Mon Sep 17 00:00:00 2001 From: jakobsn Date: Fri, 29 Nov 2019 12:42:09 +0100 Subject: [PATCH] checkpoint --- src/app/views/apply.py | 5 +- src/app/views/forms.py | 27 +++----- src/app/views/new_project.py | 116 ++++++++++++++--------------------- src/app/views/register.py | 2 +- src/app/views/utils.py | 19 ++++++ 5 files changed, 77 insertions(+), 92 deletions(-) diff --git a/src/app/views/apply.py b/src/app/views/apply.py index f589312..d4b948c 100644 --- a/src/app/views/apply.py +++ b/src/app/views/apply.py @@ -1,9 +1,8 @@ import web import models.project from models.login import get_user_name_by_id -from views.utils import get_nav_bar +from views.utils import get_nav_bar, get_element_count from views.forms import get_apply_form, get_user_dropdown -from views.new_project import get_user_count # Get html templates render = web.template.render('templates/') @@ -68,7 +67,7 @@ class Apply: def get_applicants(self, data, operation): print(operation) print(data) - user_count = get_user_count(data) + user_count = get_element_count(data, "user_name_") print("count", user_count) applicants = [] for i in range (0, user_count): diff --git a/src/app/views/forms.py b/src/app/views/forms.py index 852d85e..29e5cb3 100644 --- a/src/app/views/forms.py +++ b/src/app/views/forms.py @@ -3,6 +3,12 @@ from models.project import get_categories from models.login import get_users, get_user_id_by_name +# Regex for input validation +vemail = form.regexp(r".*@.*", "- Must be a valid email address") +vpass = form.regexp(r".{6,100}$", '- Must be atleast 6 characters long') +number = form.regexp(r"^[1-9]+$", "- Must be a number") +not_empty = form.regexp(r".+", "- This field is required") + # Define the login form login_form = form.Form( form.Textbox("username", description="Username"), @@ -11,10 +17,6 @@ login_form = form.Form( form.Button("Log In", type="submit", description="Login"), ) -vemail = form.regexp(r".*@.*", "- Must be a valid email address") -vpass = form.regexp(r".{6,100}$", '- Must be atleast 6 characters long') -number = form.regexp(r"^[1-9]+$", "- Must be a number") -not_empty = form.regexp(r".+", "- This field is required") # Define the register form register_form = form.Form( form.Textbox("username", not_empty, description="Username"), @@ -70,24 +72,15 @@ def get_project_form_elements(project_title="", project_description="", category return project_form_elements def get_user_form_elements(identifier=0, user_name="", read_permission=True, write_permission=False, modify_permission=False): - users = get_users() user_form_elements = ( form.Textbox("user_name_" + str(identifier), description="User", value=user_name), - form.Checkbox("read_permission_" + str(identifier), description="Read Permission", checked=read_permission), - form.Checkbox("write_permission_" + str(identifier), description="Write Permission", checked=write_permission), - form.Checkbox("modify_permission_" + str(identifier), description="Modify Permission", checked=modify_permission) + form.Checkbox("read_permission_" + str(identifier), description="Read Permission", checked=read_permission, value=True), + form.Checkbox("write_permission_" + str(identifier), description="Write Permission", checked=write_permission, value=True), + form.Checkbox("modify_permission_" + str(identifier), description="Modify Permission", checked=modify_permission, value=True) ) return user_form_elements -def get_new_project_form(elements): - """ - Combine a project form element and task elements to make a complete project form - - :param elemets: All the project and task form elements - :return: The ready to use project form - """ - return form.Form(*elements) - +# Define buttons to modify the project form or create a project project_buttons = form.Form( form.Button("add_user", type="submit", description="Add User", value="add_user", html="Add User"), form.Button("remove_user", type="submit", description="Remove User", value="remove_user", html="Remove User"), diff --git a/src/app/views/new_project.py b/src/app/views/new_project.py index 149e506..9c74c30 100644 --- a/src/app/views/new_project.py +++ b/src/app/views/new_project.py @@ -1,8 +1,9 @@ import web -from views.forms import get_task_form_elements, get_new_project_form, get_project_form_elements, get_user_form_elements, project_buttons +from web import form +from views.forms import get_task_form_elements, get_project_form_elements, get_user_form_elements, project_buttons import models.project import models.login -from views.utils import get_nav_bar +from views.utils import get_nav_bar, get_element_count # Get html templates render = web.template.render('templates/') @@ -17,10 +18,12 @@ class New_project: """ session = web.ctx.session nav = get_nav_bar(session) + + # Retrive the required components to compose the form project_form_elements = get_project_form_elements() task_form_elements = get_task_form_elements() user_form_elements = get_user_form_elements() - project_form = get_new_project_form((project_form_elements + task_form_elements + user_form_elements)) + project_form = form.Form(*(project_form_elements + task_form_elements + user_form_elements)) return render.new_project(nav, project_form, project_buttons, "") def POST(self): @@ -61,8 +64,8 @@ class New_project: if not project_form.validates(): return render.new_project(nav, project_form, project_buttons, "") - task_count = get_task_count(data) - user_count = get_user_count(data) + task_count = get_element_count(data, "task_title_") + user_count = get_element_count(data, "user_name_") # If there already are users assignet to the project the status will be set to in progress status = "open" @@ -72,7 +75,7 @@ class New_project: # Validate the input user names for i in range(0, user_count): if len(data["user_name_"+str(i)]) and not models.login.get_user_id_by_name(data["user_name_"+str(i)]): - return render.register(nav, project_form, project_buttons, "Invalid user: " + data["user_name_"+str(i)]) + return render.new_project(nav, project_form, project_buttons, "Invalid user: " + data["user_name_"+str(i)]) # Save the project to the database projectid = models.project.set_project(data.category_name, str(session.userid), @@ -83,7 +86,7 @@ class New_project: models.project.set_task(str(projectid), (data["task_title_" + str(i)]), (data["task_description_" + str(i)]), (data["budget_" + str(i)])) - # Save the users in the database + # Save the users in the database given that the input field is not empty for i in range(0, user_count): if len(data["user_name_"+str(i)]): userid = models.login.get_user_id_by_name(data["user_name_"+str(i)]) @@ -106,7 +109,6 @@ class New_project: except Exception as e: # This error will be raised if no permission is set modify = "FALSE" - raise e models.project.set_projects_user(str(projectid), str(userid), read, write, modify) @@ -117,92 +119,64 @@ class New_project: Compose a new project form by adding or removing a task :param data: The data object from web.input - :param add: True or False - :type add: boolean - :return: A complete project form object + :param operation: Can be one of the four: add_task, add_user, remove_task, remove user + :type operation: str + :return: A project form object with all the required input fields """ - task_count = get_task_count(data) - user_count = get_user_count(data) - print(user_count) + task_count = get_element_count(data, "task_title_") + user_count = get_element_count(data, "user_name_") + if operation == "remove_task" and task_count > 1: task_count -= 1 - if operation == "remove_user" and user_count >=1: user_count -= 1 + # Recreate project form fields project_form_elements = get_project_form_elements(data.project_title, data.project_description, data.category_name) - task_form_elements = () - user_form_elements = () + # Recreate task form fields + task_form_elements = () for i in range(0, task_count): old_task_form_element = get_task_form_elements(i, data["task_title_"+str(i)], data["task_description_"+str(i)], data["budget_"+str(i)]) task_form_elements = (task_form_elements + old_task_form_element) + # Recreate user form fields + user_form_elements = () for i in range(0, user_count): - + read, write, modify = "FALSE", "FALSE", "FALSE" try: - old_user_form_element = get_user_form_elements(i, data["user_name_"+str(i)], - data["read_permission_"+str(i)], data["write_permission_"+str(i)], data["modify_permission_"+str(i)]) - user_form_elements = (user_form_elements + old_user_form_element) + data["read_permission_"+str(i)] + read = True except Exception as e: - try: - old_user_form_element = get_user_form_elements(i, data["user_name_"+str(i)], - data["read_permission_"+str(i)], data["write_permission_"+str(i)]) - user_form_elements = (user_form_elements + old_user_form_element) - pass - except Exception as e: - try: - old_user_form_element = get_user_form_elements(i, data["user_name_"+str(i)], - data["read_permission_"+str(i)]) - user_form_elements = (user_form_elements + old_user_form_element) - pass - except Exception as e: - try: - old_user_form_element = get_user_form_elements(i, data["user_name_"+str(i)]) - user_form_elements = (user_form_elements + old_user_form_element) - pass - except Exception as e: - raise e + read = False + pass + try: + data["write_permission_"+str(i)] + write = True + except Exception as e: + write = False + pass + try: + data["modify_permission_"+str(i)] + modify = True + except Exception as e: + # This error will be raised if no permission is set + modify = False + pass + old_user_form_element = get_user_form_elements(i, data["user_name_"+str(i)], read, write, modify) + user_form_elements = (user_form_elements + old_user_form_element) if operation == "add_task": new_task_form_elements = get_task_form_elements(task_count) - project_form = get_new_project_form((project_form_elements + task_form_elements + new_task_form_elements + user_form_elements)) + project_form = form.Form(*(project_form_elements + task_form_elements + new_task_form_elements + user_form_elements)) return project_form if operation == "add_user": new_user_form_elements = get_user_form_elements(user_count) - project_form = get_new_project_form((project_form_elements + task_form_elements + user_form_elements + new_user_form_elements)) + project_form = form.Form(*(project_form_elements + task_form_elements + user_form_elements + new_user_form_elements)) return project_form - project_form = get_new_project_form((project_form_elements + task_form_elements + user_form_elements)) + project_form = form.Form(*(project_form_elements + task_form_elements + user_form_elements)) return project_form - - -def get_task_count(data): - """ - Determine the number of tasks created by removing - the four other elements from count and divide by the - number of variables in one task. - - :param data: The data object from web.input - :return: The number of tasks opened by the client - """ - task_count = 0 - while True: - try: - data["task_title_"+str(task_count)] - task_count += 1 - except: - break - return task_count - -def get_user_count(data): - user_count = 0 - while True: - try: - data["user_name_"+str(user_count)] - user_count += 1 - except: - break - return user_count \ No newline at end of file + \ No newline at end of file diff --git a/src/app/views/register.py b/src/app/views/register.py index 48a1ab6..f44059b 100644 --- a/src/app/views/register.py +++ b/src/app/views/register.py @@ -33,7 +33,7 @@ class Register: data = web.input() register = register_form() - if not f.validates(): + if not register.validates(): return render.register(nav, register, "All fields must be valid.") # Check if user exists diff --git a/src/app/views/utils.py b/src/app/views/utils.py index d08d076..3cf62a2 100644 --- a/src/app/views/utils.py +++ b/src/app/views/utils.py @@ -19,3 +19,22 @@ def get_nav_bar(session): result += ' ' result += '' return result + + +def get_element_count(data, element): + """ + Determine the number of tasks created by removing + the four other elements from count and divide by the + number of variables in one task. + + :param data: The data object from web.input + :return: The number of tasks opened by the client + """ + task_count = 0 + while True: + try: + data[element+str(task_count)] + task_count += 1 + except: + break + return task_count