aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/main
diff options
context:
space:
mode:
authorGravatar Momo <[email protected]>2018-06-23 23:13:03 +0000
committerGravatar Momo <[email protected]>2018-06-23 23:13:03 +0000
commit3c1348a959937bb1e6ee3fabe9892136e5b13167 (patch)
treeba9172b2b0a6d3fdbab69d19dc1fa93053c04a93 /pysite/views/main
parent[API] Check for DB-nuking empty data in users POST (diff)
parent[Jams/Teams] Hopefully optimize jam team list (diff)
Merge branch 'momo/optimize-teams-list' into 'master'
Optimize team lists and better relations See merge request python-discord/projects/site!10
Diffstat (limited to 'pysite/views/main')
-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
4 files changed, 18 insertions, 35 deletions
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)