diff options
Diffstat (limited to '')
| -rw-r--r-- | pysite/migrations/tables/code_jam_teams/__init__.py | 0 | ||||
| -rw-r--r-- | pysite/migrations/tables/code_jam_teams/v1.py | 13 | ||||
| -rw-r--r-- | pysite/migrations/tables/code_jams/v2.py | 10 | ||||
| -rw-r--r-- | pysite/tables.py | 3 | ||||
| -rw-r--r-- | pysite/views/main/jams/jam_team_list.py | 38 | ||||
| -rw-r--r-- | pysite/views/main/jams/team_edit_repo.py | 5 | ||||
| -rw-r--r-- | pysite/views/main/jams/team_view.py | 5 | ||||
| -rw-r--r-- | pysite/views/main/jams/user_team_list.py | 5 | ||||
| -rw-r--r-- | pysite/views/staff/jams/actions.py | 15 | 
9 files changed, 57 insertions, 37 deletions
| diff --git a/pysite/migrations/tables/code_jam_teams/__init__.py b/pysite/migrations/tables/code_jam_teams/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/pysite/migrations/tables/code_jam_teams/__init__.py diff --git a/pysite/migrations/tables/code_jam_teams/v1.py b/pysite/migrations/tables/code_jam_teams/v1.py new file mode 100644 index 00000000..165d3100 --- /dev/null +++ b/pysite/migrations/tables/code_jam_teams/v1.py @@ -0,0 +1,13 @@ +def run(db, table, table_obj): +    """ +    Associate the ID of each team's code jam (team -> jam) +    """ + +    for document in db.get_all(table): +        if "jam" not in document: +            # find the code jam containing this team +            for jam in db.get_all("code_jams"): +                if document["id"] in jam["teams"]: +                    document["jam"] = jam["number"] +                    db.insert(table, document, conflict="update", durability="soft") +    db.sync(table) diff --git a/pysite/migrations/tables/code_jams/v2.py b/pysite/migrations/tables/code_jams/v2.py new file mode 100644 index 00000000..df4752c8 --- /dev/null +++ b/pysite/migrations/tables/code_jams/v2.py @@ -0,0 +1,10 @@ +def run(db, table, table_obj): +    """ +    Clean list of teams from teams that do not exist anymore. +    """ +    for document in db.get_all(table): +        for team_id in document["teams"]: +            if db.get("code_jam_teams", team_id) is None: +                document["teams"].remove(team_id) +            db.insert(table, document, conflict="update", durability="soft") +    db.sync(table) diff --git a/pysite/tables.py b/pysite/tables.py index 8a336ad5..de9499e8 100644 --- a/pysite/tables.py +++ b/pysite/tables.py @@ -94,7 +94,8 @@ TABLES = {              "id",  # uuid              "name",  # str              "members",  # list[str] -            "repo"  # str +            "repo",  # str +            "jam"  # int          ])      ), diff --git a/pysite/views/main/jams/jam_team_list.py b/pysite/views/main/jams/jam_team_list.py index 0eb43a5a..49587e36 100644 --- a/pysite/views/main/jams/jam_team_list.py +++ b/pysite/views/main/jams/jam_team_list.py @@ -1,6 +1,5 @@  import logging -from rethinkdb import ReqlNonExistenceError  from werkzeug.exceptions import NotFound  from pysite.base_route import RouteView @@ -17,32 +16,25 @@ class JamsTeamListView(RouteView, DBMixin, OAuthMixin):      jams_table = "code_jams"      def get(self, jam_id): -        try: -            query = self.db.query(self.jams_table).get(jam_id).merge( -                lambda jam_obj: { -                    "teams": -                        self.db.query(self.table_name) -                            .filter(lambda team_row: jam_obj["teams"].contains(team_row["id"])) -                            .pluck(["id", "name", "members", "repo"]) -                            .merge( -                            lambda team: { -                                "members": -                                    self.db.query("users") -                                        .filter(lambda user: team["members"].contains(user["user_id"])) -                                        .coerce_to("array") -                            }).coerce_to("array") -                } -            ) - -            jam_data = self.db.run(query) -        except ReqlNonExistenceError: -            log.exception("Failed RethinkDB query") +        jam_obj = self.db.get(self.jams_table, jam_id) +        if not jam_obj:              raise NotFound() +        query = self.db.query(self.table_name).get_all(self.table_name, *jam_obj["teams"]).pluck( +            ["id", "name", "members", "repo"]).merge( +            lambda team: { +                "members": +                    self.db.query("users") +                        .filter(lambda user: team["members"].contains(user["user_id"])) +                        .coerce_to("array") +            }).coerce_to("array") + +        jam_obj["teams"] = self.db.run(query) +          return self.render(              "main/jams/team_list.html", -            jam=jam_data, -            teams=jam_data["teams"], +            jam=jam_obj, +            teams=jam_obj["teams"],              member_ids=self.member_ids          ) diff --git a/pysite/views/main/jams/team_edit_repo.py b/pysite/views/main/jams/team_edit_repo.py index 03f23f17..03e752bc 100644 --- a/pysite/views/main/jams/team_edit_repo.py +++ b/pysite/views/main/jams/team_edit_repo.py @@ -33,10 +33,7 @@ class JamsTeamEditRepo(APIView, DBMixin, OAuthMixin):          try:              query = self.db.query(self.table_name).get(team_id).merge(                  lambda team: { -                    "jam": -                        self.db.query("code_jams").filter( -                            lambda jam: jam["teams"].contains(team["id"]) -                        ).coerce_to("array")[0] +                    "jam": self.db.query("code_jams").get(team["jam"])                  }              ) diff --git a/pysite/views/main/jams/team_view.py b/pysite/views/main/jams/team_view.py index 2d99828c..8be8bc0f 100644 --- a/pysite/views/main/jams/team_view.py +++ b/pysite/views/main/jams/team_view.py @@ -29,10 +29,7 @@ class JamsTeamView(RouteView, DBMixin, OAuthMixin):                                  ).coerce_to("array")[0]["gitlab_username"]                              }                          ).coerce_to("array"), -                    "jam": -                        self.db.query("code_jams").filter( -                            lambda jam: jam["teams"].contains(team["id"]) -                        ).coerce_to("array")[0] +                    "jam": self.db.query("code_jams").get(team["jam"])                  }              ) diff --git a/pysite/views/main/jams/user_team_list.py b/pysite/views/main/jams/user_team_list.py index 272c0a74..226cc4b0 100644 --- a/pysite/views/main/jams/user_team_list.py +++ b/pysite/views/main/jams/user_team_list.py @@ -25,10 +25,7 @@ class JamsUserTeamListView(RouteView, DBMixin, OAuthMixin):                                  self.db.query("code_jam_participants").filter({"id": user["user_id"]})                                  .coerce_to("array")[0]["gitlab_username"]                          }).coerce_to("array"), -                "jam": -                    self.db.query("code_jams").filter( -                        lambda jam: jam["teams"].contains(team["id"]) -                    ).coerce_to("array")[0] +                "jam": self.db.query("code_jams").get(team["jam"])              }          ).order_by(rethinkdb.desc("jam.number"))          teams = self.db.run(query) diff --git a/pysite/views/staff/jams/actions.py b/pysite/views/staff/jams/actions.py index 3f8b4c20..c97f0d8c 100644 --- a/pysite/views/staff/jams/actions.py +++ b/pysite/views/staff/jams/actions.py @@ -221,7 +221,8 @@ class ActionView(APIView, DBMixin, RMQMixin):              team = {                  "name": f"{adjective} {noun}".title(), -                "members": [] +                "members": [], +                "jam": jam              }              result = self.db.insert(self.teams_table, team) @@ -538,6 +539,18 @@ class ActionView(APIView, DBMixin, RMQMixin):                      ErrorCodes.incorrect_parameters, "Team ID required"                  ) +            team_obj = self.db.get(self.teams_table, team) + +            if not team_obj: +                return self.error( +                    ErrorCodes.incorrect_parameters, "Unknown team ID" +                ) + +            jam_obj = self.db.get(self.table_name, team_obj["jam"]) +            if jam_obj: +                jam_obj["teams"].remove(team) +                self.db.insert(self.table_name, jam_obj, conflict="update") +              self.db.delete(self.teams_table, team)              return jsonify({"result": True}) | 
