aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pysite/migrations/tables/code_jam_teams/__init__.py0
-rw-r--r--pysite/migrations/tables/code_jam_teams/v1.py13
-rw-r--r--pysite/migrations/tables/code_jams/v2.py10
-rw-r--r--pysite/tables.py3
-rw-r--r--pysite/views/main/jams/jam_team_list.py38
-rw-r--r--pysite/views/main/jams/team_edit_repo.py5
-rw-r--r--pysite/views/main/jams/team_view.py5
-rw-r--r--pysite/views/main/jams/user_team_list.py5
-rw-r--r--pysite/views/staff/jams/actions.py15
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 191b52bd..c7072909 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})