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 '')
| -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 +        ) | 
