aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/staff/jams/edit_ending.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysite/views/staff/jams/edit_ending.py')
-rw-r--r--pysite/views/staff/jams/edit_ending.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/pysite/views/staff/jams/edit_ending.py b/pysite/views/staff/jams/edit_ending.py
new file mode 100644
index 00000000..69b91e29
--- /dev/null
+++ b/pysite/views/staff/jams/edit_ending.py
@@ -0,0 +1,54 @@
+from flask import redirect, request, url_for
+from werkzeug.exceptions import BadRequest, NotFound
+
+from pysite.base_route import RouteView
+from pysite.constants import ALL_STAFF_ROLES
+from pysite.decorators import csrf, require_roles
+from pysite.mixins import DBMixin
+from pysite.rst import render
+
+REQUIRED_KEYS = ["end_rst"]
+
+
+class StaffView(RouteView, DBMixin):
+ path = "/jams/<int:jam>/edit/ending"
+ name = "jams.edit.ending"
+ table_name = "code_jams"
+
+ @require_roles(*ALL_STAFF_ROLES)
+ def get(self, jam):
+ jam_obj = self.db.get(self.table_name, jam)
+
+ if not jam_obj:
+ return NotFound()
+
+ if not jam_obj["state"] == "judging":
+ return BadRequest()
+
+ return self.render("staff/jams/edit_ending.html", jam=jam_obj)
+
+ @require_roles(*ALL_STAFF_ROLES)
+ @csrf
+ def post(self, jam):
+ jam_obj = self.db.get(self.table_name, jam)
+
+ if not jam_obj:
+ return NotFound()
+
+ if not jam_obj["state"] == "judging":
+ return BadRequest()
+
+ print(request.form)
+ for key in REQUIRED_KEYS:
+ arg = request.form.get(key)
+
+ if not arg:
+ return BadRequest()
+
+ jam_obj[key] = arg
+
+ jam_obj["end_html"] = render(jam_obj["end_rst"], link_headers=False)["html"]
+
+ self.db.insert(self.table_name, jam_obj, conflict="replace")
+
+ return redirect(url_for("staff.jams.index"))