aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/staff/jams/participants.py
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-06-12 13:43:46 +0100
committerGravatar Gareth Coles <[email protected]>2018-06-12 13:43:46 +0100
commitb5b339cdfde254367eccd49d296178314a159ba7 (patch)
treed9b4d463bb3738bd5b561dd08a4313d40fb76308 /pysite/views/staff/jams/participants.py
parentMerge 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.py52
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
+ )