diff options
author | 2018-05-19 20:20:51 +0100 | |
---|---|---|
committer | 2018-05-19 20:20:51 +0100 | |
commit | c438ec429c0d9f2bb8b7fffd0dc97041445b97a3 (patch) | |
tree | 2feff91c88780a9d60f9e60bead51838187bff30 /pysite | |
parent | Fix infractions setup (diff) |
Jammer profiles
Diffstat (limited to 'pysite')
-rw-r--r-- | pysite/tables.py | 3 | ||||
-rw-r--r-- | pysite/views/main/jams/join.py | 14 | ||||
-rw-r--r-- | pysite/views/main/jams/profile.py | 59 |
3 files changed, 72 insertions, 4 deletions
diff --git a/pysite/tables.py b/pysite/tables.py index c68feba0..25e630b2 100644 --- a/pysite/tables.py +++ b/pysite/tables.py @@ -110,8 +110,7 @@ TABLES = { primary_key="id", keys=sorted([ "id", # str - "skill_level", # str - "age", # str + "dob", # str "github_username", # str "timezone" # str ]) diff --git a/pysite/views/main/jams/join.py b/pysite/views/main/jams/join.py index eeae1f76..83013a01 100644 --- a/pysite/views/main/jams/join.py +++ b/pysite/views/main/jams/join.py @@ -1,7 +1,7 @@ from email.utils import parseaddr -from flask import request, redirect, url_for -from werkzeug.exceptions import NotFound, BadRequest +from flask import redirect, request, url_for +from werkzeug.exceptions import BadRequest, NotFound from pysite.base_route import RouteView from pysite.decorators import csrf @@ -48,6 +48,11 @@ class JamsJoinView(RouteView, DBMixin, OauthMixin): # They already tried to apply for this jam return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) + participant = self.db.get(self.participants_table, self.user_data["user_id"]) + + if not participant: + return redirect(url_for("info.jams.profile")) + if self.get_response(jam, self.user_data["user_id"]): return self.render("main/jams/already.html", jam=jam_obj) @@ -93,6 +98,11 @@ class JamsJoinView(RouteView, DBMixin, OauthMixin): # They already tried to apply for this jam return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj) + participant = self.db.get(self.participants_table, self.user_data["user_id"]) + + if not participant: + return redirect(url_for("info.jams.profile")) + if self.get_response(jam, self.user_data["user_id"]): return self.render("main/jams/already.html", jam=jam_obj) diff --git a/pysite/views/main/jams/profile.py b/pysite/views/main/jams/profile.py new file mode 100644 index 00000000..407f842e --- /dev/null +++ b/pysite/views/main/jams/profile.py @@ -0,0 +1,59 @@ +import datetime + +from flask import redirect, request, url_for +from werkzeug.exceptions import BadRequest + +from pysite.base_route import RouteView +from pysite.decorators import csrf +from pysite.mixins import DBMixin, OauthMixin + + +class JamsProfileView(RouteView, DBMixin, OauthMixin): + path = "/jams/profile" + name = "jams.profile" + + table_name = "code_jam_participants" + + def get(self): + if not self.user_data: + return redirect(url_for("discord.login")) + + participant = self.db.get(self.table_name, self.user_data["user_id"]) + + if not participant: + participant = {"id": self.user_data["user_id"]} + + return self.render( + "main/jams/profile.html", participant=participant + ) + + @csrf + def post(self): + if not self.user_data: + return redirect(url_for("discord.login")) + + participant = self.db.get(self.table_name, self.user_data["user_id"]) + + if not participant: + participant = {"id": self.user_data["user_id"]} + + dob = request.form.get("dob") + github_username = request.form.get("github_username") + timezone = request.form.get("timezone") + + if not dob or not github_username or not timezone: + return BadRequest() + + # Convert given datetime strings into actual objects, adding timezones to keep rethinkdb happy + dob = datetime.datetime.strptime(dob, "%Y-%m-%d") + dob = dob.replace(tzinfo=datetime.timezone.utc) + + participant["dob"] = dob + participant["github_username"] = github_username + participant["timezone"] = timezone + + self.db.insert(self.table_name, participant, conflict="replace") + + return self.render( + "main/jams/profile.html", participant=participant, done=True + ) |