From 998ecbf118210b2c288a13349ab4a4ea88592bd0 Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 17:16:17 +0200 Subject: [PATCH 01/10] changed 200 to 400 --- backend/tests/endpoints/submissions_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/tests/endpoints/submissions_test.py b/backend/tests/endpoints/submissions_test.py index 083aeee5..5e34ed0c 100644 --- a/backend/tests/endpoints/submissions_test.py +++ b/backend/tests/endpoints/submissions_test.py @@ -158,7 +158,7 @@ def test_post_submissions_invalid_file(self, client: FlaskClient, file_no_name): headers = {"X-CSRF-TOKEN":get_csrf_from_login(client, "student")}, data = {"project_id":"zero", "files": file_no_name} ) - assert response.status_code == 200 + assert response.status_code == 400 From ec455d05d56f59659a05d1361eba4e9a47beba5b Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 17:21:50 +0200 Subject: [PATCH 02/10] changed != to == --- backend/tests/endpoints/endpoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/tests/endpoints/endpoint.py b/backend/tests/endpoints/endpoint.py index 2d686f0d..09767842 100644 --- a/backend/tests/endpoints/endpoint.py +++ b/backend/tests/endpoints/endpoint.py @@ -118,7 +118,7 @@ def query_parameter(self, test: tuple[str, Any, str, bool]): response = method(endpoint, headers = {"X-CSRF-TOKEN":csrf}) if wrong_parameter: - assert wrong_parameter == (response.status_code != 200) + assert wrong_parameter == (response.status_code == 200) if not wrong_parameter: assert response.json["data"] == [] From 6ffaace2d3bf737ee036e9ea5694eff266b4d973 Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 18:42:23 +0200 Subject: [PATCH 03/10] added filter functionlity to submissions --- backend/project/endpoints/submissions/submission_detail.py | 4 ++++ backend/project/endpoints/submissions/submissions.py | 7 +++++++ backend/tests/endpoints/endpoint.py | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/backend/project/endpoints/submissions/submission_detail.py b/backend/project/endpoints/submissions/submission_detail.py index 81b9c783..a2bc75d9 100644 --- a/backend/project/endpoints/submissions/submission_detail.py +++ b/backend/project/endpoints/submissions/submission_detail.py @@ -44,6 +44,10 @@ def get(self, submission_id: int) -> dict[str, any]: data["message"] = f"Submission (submission_id={submission_id}) not found" return data, 404 + if set(request.form.keys()) - {"grading", "submission_id", "uid", "project_id", "submission_time"}: + data["message"] = "Invalid data field given." + return data, 400 + return { "data": { "submission_id": urljoin(f"{BASE_URL}/", str(submission.submission_id)), diff --git a/backend/project/endpoints/submissions/submissions.py b/backend/project/endpoints/submissions/submissions.py index 96e18d2d..190bba13 100644 --- a/backend/project/endpoints/submissions/submissions.py +++ b/backend/project/endpoints/submissions/submissions.py @@ -43,6 +43,7 @@ def get(self, uid=None) -> dict[str, any]: "url": BASE_URL } filters = dict(request.args) + print(filters) try: # Check the uid query parameter user_id = filters.get("uid") @@ -51,6 +52,8 @@ def get(self, uid=None) -> dict[str, any]: return data, 400 # Check the project_id query parameter + print("hier tests") + print(filters) project_id = filters.get("project_id") if project_id: if not project_id.isdigit(): @@ -58,6 +61,10 @@ def get(self, uid=None) -> dict[str, any]: return data, 400 filters["project_id"] = int(project_id) + if set(filters.keys()) - {"grading", "submission_id", "uid", "project_id", "submission_time"}: + data["message"] = "Invalid data field given." + return data, 400 + # Get the courses courses = Course.query.filter_by(teacher=uid).\ with_entities(Course.course_id).all() diff --git a/backend/tests/endpoints/endpoint.py b/backend/tests/endpoints/endpoint.py index 09767842..2d686f0d 100644 --- a/backend/tests/endpoints/endpoint.py +++ b/backend/tests/endpoints/endpoint.py @@ -118,7 +118,7 @@ def query_parameter(self, test: tuple[str, Any, str, bool]): response = method(endpoint, headers = {"X-CSRF-TOKEN":csrf}) if wrong_parameter: - assert wrong_parameter == (response.status_code == 200) + assert wrong_parameter == (response.status_code != 200) if not wrong_parameter: assert response.json["data"] == [] From b5e37d31e4e206a38c88ad62374bc736c4d4a882 Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 18:43:59 +0200 Subject: [PATCH 04/10] removed prints --- backend/project/endpoints/submissions/submissions.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/project/endpoints/submissions/submissions.py b/backend/project/endpoints/submissions/submissions.py index 190bba13..28722685 100644 --- a/backend/project/endpoints/submissions/submissions.py +++ b/backend/project/endpoints/submissions/submissions.py @@ -52,8 +52,6 @@ def get(self, uid=None) -> dict[str, any]: return data, 400 # Check the project_id query parameter - print("hier tests") - print(filters) project_id = filters.get("project_id") if project_id: if not project_id.isdigit(): From 437277a1951553758d0d1311819419bbcf609bb8 Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 18:51:16 +0200 Subject: [PATCH 05/10] linter --- .../project/endpoints/submissions/submission_detail.py | 9 +++++++-- backend/project/endpoints/submissions/submissions.py | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/backend/project/endpoints/submissions/submission_detail.py b/backend/project/endpoints/submissions/submission_detail.py index a2bc75d9..b76a7d60 100644 --- a/backend/project/endpoints/submissions/submission_detail.py +++ b/backend/project/endpoints/submissions/submission_detail.py @@ -37,14 +37,19 @@ def get(self, submission_id: int) -> dict[str, any]: "url": urljoin(f"{BASE_URL}/", str(submission_id)) } try: - with db.session() as session: + with (db.session() as session): submission = session.get(Submission, submission_id) if submission is None: data["url"] = urljoin(f"{API_HOST}/", "/submissions") data["message"] = f"Submission (submission_id={submission_id}) not found" return data, 404 - if set(request.form.keys()) - {"grading", "submission_id", "uid", "project_id", "submission_time"}: + if set(request.form.keys()) - { + "grading", + "submission_id", + "uid", + "project_id", + "submission_time"}: data["message"] = "Invalid data field given." return data, 400 diff --git a/backend/project/endpoints/submissions/submissions.py b/backend/project/endpoints/submissions/submissions.py index 28722685..e68a240a 100644 --- a/backend/project/endpoints/submissions/submissions.py +++ b/backend/project/endpoints/submissions/submissions.py @@ -59,7 +59,12 @@ def get(self, uid=None) -> dict[str, any]: return data, 400 filters["project_id"] = int(project_id) - if set(filters.keys()) - {"grading", "submission_id", "uid", "project_id", "submission_time"}: + if set(filters.keys()) - { + "grading", + "submission_id", + "uid", + "project_id", + "submission_time"}: data["message"] = "Invalid data field given." return data, 400 From 2e97026a52cb6aa500eed59533b802a421435484 Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 18:55:20 +0200 Subject: [PATCH 06/10] linter again --- .../project/endpoints/submissions/submission_detail.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/project/endpoints/submissions/submission_detail.py b/backend/project/endpoints/submissions/submission_detail.py index b76a7d60..eecf1dc1 100644 --- a/backend/project/endpoints/submissions/submission_detail.py +++ b/backend/project/endpoints/submissions/submission_detail.py @@ -37,7 +37,7 @@ def get(self, submission_id: int) -> dict[str, any]: "url": urljoin(f"{BASE_URL}/", str(submission_id)) } try: - with (db.session() as session): + with db.session() as session: submission = session.get(Submission, submission_id) if submission is None: data["url"] = urljoin(f"{API_HOST}/", "/submissions") @@ -45,11 +45,11 @@ def get(self, submission_id: int) -> dict[str, any]: return data, 404 if set(request.form.keys()) - { + "submission_time", "grading", - "submission_id", - "uid", "project_id", - "submission_time"}: + "submission_id", + "uid"}: data["message"] = "Invalid data field given." return data, 400 From c2f82858595b40dec95c5c05989b1b1b3ca42d7d Mon Sep 17 00:00:00 2001 From: gerwoud Date: Sun, 19 May 2024 20:58:15 +0200 Subject: [PATCH 07/10] filters that aren't fields are now ignored in the code, tests for this are fixed --- backend/project/endpoints/courses/courses.py | 13 +++++-------- .../endpoints/submissions/submission_detail.py | 9 --------- .../project/endpoints/submissions/submissions.py | 16 +++++++--------- backend/tests/endpoints/endpoint.py | 2 +- 4 files changed, 13 insertions(+), 27 deletions(-) diff --git a/backend/project/endpoints/courses/courses.py b/backend/project/endpoints/courses/courses.py index eda221f3..306df744 100644 --- a/backend/project/endpoints/courses/courses.py +++ b/backend/project/endpoints/courses/courses.py @@ -39,14 +39,11 @@ def get(self, uid=None): """ try: - filter_params = request.args.to_dict() - - invalid_params = set(filter_params.keys()) - {f.name for f in fields(Course)} - if invalid_params: - return { - "url": RESPONSE_URL, - "message": f"Invalid query parameters {invalid_params}" - }, 400 + filter_params = { + key: value for key, value + in request.args.to_dict().items() + if key in {f.name for f in fields(Course)} + } # Start with a base query base_query = select(Course) diff --git a/backend/project/endpoints/submissions/submission_detail.py b/backend/project/endpoints/submissions/submission_detail.py index eecf1dc1..81b9c783 100644 --- a/backend/project/endpoints/submissions/submission_detail.py +++ b/backend/project/endpoints/submissions/submission_detail.py @@ -44,15 +44,6 @@ def get(self, submission_id: int) -> dict[str, any]: data["message"] = f"Submission (submission_id={submission_id}) not found" return data, 404 - if set(request.form.keys()) - { - "submission_time", - "grading", - "project_id", - "submission_id", - "uid"}: - data["message"] = "Invalid data field given." - return data, 400 - return { "data": { "submission_id": urljoin(f"{BASE_URL}/", str(submission.submission_id)), diff --git a/backend/project/endpoints/submissions/submissions.py b/backend/project/endpoints/submissions/submissions.py index e68a240a..f820df04 100644 --- a/backend/project/endpoints/submissions/submissions.py +++ b/backend/project/endpoints/submissions/submissions.py @@ -7,6 +7,7 @@ from datetime import datetime from zoneinfo import ZoneInfo from shutil import rmtree +from dataclasses import fields from flask import request from flask_restful import Resource from sqlalchemy import exc, and_ @@ -43,7 +44,7 @@ def get(self, uid=None) -> dict[str, any]: "url": BASE_URL } filters = dict(request.args) - print(filters) + try: # Check the uid query parameter user_id = filters.get("uid") @@ -59,14 +60,11 @@ def get(self, uid=None) -> dict[str, any]: return data, 400 filters["project_id"] = int(project_id) - if set(filters.keys()) - { - "grading", - "submission_id", - "uid", - "project_id", - "submission_time"}: - data["message"] = "Invalid data field given." - return data, 400 + filters = { + key: value for key, value + in filters.items() + if key in {f.name for f in fields(Submission)} + } # Get the courses courses = Course.query.filter_by(teacher=uid).\ diff --git a/backend/tests/endpoints/endpoint.py b/backend/tests/endpoints/endpoint.py index 2d686f0d..09767842 100644 --- a/backend/tests/endpoints/endpoint.py +++ b/backend/tests/endpoints/endpoint.py @@ -118,7 +118,7 @@ def query_parameter(self, test: tuple[str, Any, str, bool]): response = method(endpoint, headers = {"X-CSRF-TOKEN":csrf}) if wrong_parameter: - assert wrong_parameter == (response.status_code != 200) + assert wrong_parameter == (response.status_code == 200) if not wrong_parameter: assert response.json["data"] == [] From 9194ae0199d3c8ce4906ed3f0c0812446d04deac Mon Sep 17 00:00:00 2001 From: gerwoud Date: Mon, 20 May 2024 10:31:49 +0200 Subject: [PATCH 08/10] yeet --- backend/project/endpoints/submissions/submissions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/project/endpoints/submissions/submissions.py b/backend/project/endpoints/submissions/submissions.py index f820df04..2c1f22d0 100644 --- a/backend/project/endpoints/submissions/submissions.py +++ b/backend/project/endpoints/submissions/submissions.py @@ -63,7 +63,7 @@ def get(self, uid=None) -> dict[str, any]: filters = { key: value for key, value in filters.items() - if key in {f.name for f in fields(Submission)} + if key in model.__table__.columns } # Get the courses From 807fcdba17fc1c42f9b459814133cbc652bb250f Mon Sep 17 00:00:00 2001 From: gerwoud Date: Mon, 20 May 2024 10:35:46 +0200 Subject: [PATCH 09/10] idk tbh --- backend/project/endpoints/submissions/submissions.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/project/endpoints/submissions/submissions.py b/backend/project/endpoints/submissions/submissions.py index 2c1f22d0..a47ca63b 100644 --- a/backend/project/endpoints/submissions/submissions.py +++ b/backend/project/endpoints/submissions/submissions.py @@ -7,7 +7,6 @@ from datetime import datetime from zoneinfo import ZoneInfo from shutil import rmtree -from dataclasses import fields from flask import request from flask_restful import Resource from sqlalchemy import exc, and_ @@ -63,7 +62,7 @@ def get(self, uid=None) -> dict[str, any]: filters = { key: value for key, value in filters.items() - if key in model.__table__.columns + if key in Submission.__table__.columns } # Get the courses From a6fbb2345628861669bc83fa94361ff9fe467d4d Mon Sep 17 00:00:00 2001 From: gerwoud Date: Tue, 21 May 2024 20:34:52 +0200 Subject: [PATCH 10/10] run tests --- backend/project/endpoints/projects/endpoint_parser.py | 2 +- backend/tests/conftest.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/project/endpoints/projects/endpoint_parser.py b/backend/project/endpoints/projects/endpoint_parser.py index 48ef4874..3628cc01 100644 --- a/backend/project/endpoints/projects/endpoint_parser.py +++ b/backend/project/endpoints/projects/endpoint_parser.py @@ -42,7 +42,7 @@ def parse_project_params(): """ - Return a dict of every non None value in the param + Return a dictionary of every non None value in the param """ args = parser.parse_args() diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index 8404d35f..29d64156 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -155,7 +155,7 @@ def projects(session): deadlines=[("Deadline 1",datetime(2024,3,15,13,0,0))], course_id=course_id_ad3, visible_for_students=True, - archived=False, + archived=True, regex_expressions=["solution"] ), Project(