diff options
author | 2018-06-12 13:43:46 +0100 | |
---|---|---|
committer | 2018-06-12 13:43:46 +0100 | |
commit | b5b339cdfde254367eccd49d296178314a159ba7 (patch) | |
tree | d9b4d463bb3738bd5b561dd08a4313d40fb76308 /pysite/views/staff/jams/participants.py | |
parent | Merge branch 'log-dir' into 'master' (diff) |
[Jams] Approvals interface
Diffstat (limited to 'pysite/views/staff/jams/participants.py')
-rw-r--r-- | pysite/views/staff/jams/participants.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/pysite/views/staff/jams/participants.py b/pysite/views/staff/jams/participants.py new file mode 100644 index 00000000..6b95db76 --- /dev/null +++ b/pysite/views/staff/jams/participants.py @@ -0,0 +1,52 @@ +from rethinkdb import ReqlNonExistenceError +from werkzeug.exceptions import NotFound + +from pysite.base_route import RouteView +from pysite.constants import ALL_STAFF_ROLES +from pysite.decorators import require_roles +from pysite.mixins import DBMixin + +REQUIRED_KEYS = ["title", "date_start", "date_end"] + + +class StaffView(RouteView, DBMixin): + path = "/jams/participants/<int:jam>" + name = "jams.participants" + + forms_table = "code_jam_forms" + participants_table = "code_jam_participants" + questions_table = "code_jam_questions" + responses_table = "code_jam_responses" + table_name = "code_jams" + users_table = "users" + + @require_roles(*ALL_STAFF_ROLES) + def get(self, jam: int): + try: + query = self.db.query(self.table_name).get(jam).merge( + lambda jam_obj: { + "participants": + self.db.query(self.responses_table) + .filter({"jam": jam_obj["number"]}) + .eq_join("snowflake", self.db.query(self.users_table)) + .without({"left": "snowflake"}) + .zip() + .coerce_to("array") + } + ) + + jam_data = self.db.run(query) + except ReqlNonExistenceError: + raise NotFound() + + form_obj = self.db.get(self.forms_table, jam) + questions = {} + + if form_obj: + for question in form_obj["questions"]: + questions[question] = self.db.get(self.questions_table, question) + + return self.render( + "staff/jams/participants.html", + jam=jam_data, form=form_obj, questions=questions + ) |