Unverified Commit 217ef570 authored by Peter Stanko's avatar Peter Stanko
Browse files

Use the association proxy instead of the hybrid property

parent 74c0fa76
Pipeline #13273 canceled with stage
in 16 minutes and 20 seconds
...@@ -9,6 +9,7 @@ from typing import List ...@@ -9,6 +9,7 @@ from typing import List
from flask_sqlalchemy import BaseQuery from flask_sqlalchemy import BaseQuery
from sqlalchemy import event from sqlalchemy import event
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.hybrid import hybrid_property
from werkzeug.security import check_password_hash, generate_password_hash from werkzeug.security import check_password_hash, generate_password_hash
...@@ -888,20 +889,13 @@ class Submission(db.Model, EntityBase): ...@@ -888,20 +889,13 @@ class Submission(db.Model, EntityBase):
passive_deletes=True, uselist=False) passive_deletes=True, uselist=False)
async_task_id = db.Column(db.String(length=36)) async_task_id = db.Column(db.String(length=36))
course = association_proxy('project', 'course')
@property @property
def log_name(self): def log_name(self):
return f"{self.id} ({self.course.codename}/{self.project.codename} for " \ return f"{self.id} ({self.course.codename}/{self.project.codename} for " \
f"{self.user.username})" f"{self.user.username})"
@hybrid_property
def course(self):
return self.project.course
@course.expression
def course(cls):
return Project.course
def change_state(self, new_state): def change_state(self, new_state):
# open to extension (state transition validation, ...) # open to extension (state transition validation, ...)
self.state = new_state self.state = new_state
......
...@@ -54,7 +54,7 @@ def test_list_all_avail_for_user(rest_service, client): ...@@ -54,7 +54,7 @@ def test_list_all_avail_for_user(rest_service, client):
def test_list_all_avail_for_course(rest_service, client): def test_list_all_avail_for_course(rest_service, client):
course = rest_service.find.course('testcourse1') course = rest_service.find.course('testcourse1')
db_subm = Submission.query.filter(Submission.course == course.id).all() db_subm = Submission.query.filter(Submission.course == course).all()
response = utils.make_request(client, f'/submissions?course=testcourse1', method='get') response = utils.make_request(client, f'/submissions?course=testcourse1', method='get')
assert response.status_code == 200 assert response.status_code == 200
assert response.mimetype == 'application/json' assert response.mimetype == 'application/json'
...@@ -62,6 +62,7 @@ def test_list_all_avail_for_course(rest_service, client): ...@@ -62,6 +62,7 @@ def test_list_all_avail_for_course(rest_service, client):
resp_submissions = utils.extract_data(response) resp_submissions = utils.extract_data(response)
num_of_submissions = len(resp_submissions) num_of_submissions = len(resp_submissions)
assert num_of_submissions == len(db_subm) assert num_of_submissions == len(db_subm)
assert num_of_submissions == 4
def test_list_all_avail_for_project(rest_service, client): def test_list_all_avail_for_project(rest_service, client):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment