mirror of
https://github.com/aljazceru/CTFd.git
synced 2026-02-22 06:34:34 +01:00
Properly cache User.place and User.score constants (#1525)
* Cache accesses of `User.place` and `User.score` in the user attrs wrapper via Jinja
This commit is contained in:
17
CTFd/cache/__init__.py
vendored
17
CTFd/cache/__init__.py
vendored
@@ -30,14 +30,31 @@ def clear_standings():
|
||||
from CTFd.utils.scores import get_standings, get_team_standings, get_user_standings
|
||||
from CTFd.api.v1.scoreboard import ScoreboardDetail, ScoreboardList
|
||||
from CTFd.api import api
|
||||
from CTFd.utils.user import (
|
||||
get_user_score,
|
||||
get_user_place,
|
||||
get_team_score,
|
||||
get_team_place,
|
||||
)
|
||||
|
||||
# Clear out the bulk standings functions
|
||||
cache.delete_memoized(get_standings)
|
||||
cache.delete_memoized(get_team_standings)
|
||||
cache.delete_memoized(get_user_standings)
|
||||
|
||||
# Clear out the individual helpers for accessing score via the model
|
||||
cache.delete_memoized(Users.get_score)
|
||||
cache.delete_memoized(Users.get_place)
|
||||
cache.delete_memoized(Teams.get_score)
|
||||
cache.delete_memoized(Teams.get_place)
|
||||
|
||||
# Clear the Jinja Attrs constants
|
||||
cache.delete_memoized(get_user_score)
|
||||
cache.delete_memoized(get_user_place)
|
||||
cache.delete_memoized(get_team_score)
|
||||
cache.delete_memoized(get_team_place)
|
||||
|
||||
# Clear out HTTP request responses
|
||||
cache.delete(make_cache_key(path="scoreboard.listing"))
|
||||
cache.delete(make_cache_key(path=api.name + "." + ScoreboardList.endpoint))
|
||||
cache.delete(make_cache_key(path=api.name + "." + ScoreboardDetail.endpoint))
|
||||
|
||||
@@ -29,21 +29,15 @@ class _TeamAttrsWrapper:
|
||||
|
||||
@property
|
||||
def place(self):
|
||||
from CTFd.utils.user import get_current_team
|
||||
from CTFd.utils.user import get_team_place
|
||||
|
||||
team = get_current_team()
|
||||
if team:
|
||||
return team.place
|
||||
return None
|
||||
return get_team_place(team_id=self.id)
|
||||
|
||||
@property
|
||||
def score(self):
|
||||
from CTFd.utils.user import get_current_team
|
||||
from CTFd.utils.user import get_team_score
|
||||
|
||||
team = get_current_team()
|
||||
if team:
|
||||
return team.score
|
||||
return None
|
||||
return get_team_score(team_id=self.id)
|
||||
|
||||
|
||||
Team = _TeamAttrsWrapper()
|
||||
|
||||
@@ -31,21 +31,15 @@ class _UserAttrsWrapper:
|
||||
|
||||
@property
|
||||
def place(self):
|
||||
from CTFd.utils.user import get_current_user
|
||||
from CTFd.utils.user import get_user_place
|
||||
|
||||
user = get_current_user()
|
||||
if user:
|
||||
return user.place
|
||||
return None
|
||||
return get_user_place(user_id=self.id)
|
||||
|
||||
@property
|
||||
def score(self):
|
||||
from CTFd.utils.user import get_current_user
|
||||
from CTFd.utils.user import get_user_score
|
||||
|
||||
user = get_current_user()
|
||||
if user:
|
||||
return user.score
|
||||
return None
|
||||
return get_user_score(user_id=self.id)
|
||||
|
||||
|
||||
User = _UserAttrsWrapper()
|
||||
|
||||
@@ -52,6 +52,38 @@ def get_user_attrs(user_id):
|
||||
return None
|
||||
|
||||
|
||||
@cache.memoize(timeout=300)
|
||||
def get_user_place(user_id):
|
||||
user = Users.query.filter_by(id=user_id).first()
|
||||
if user:
|
||||
return user.account.place
|
||||
return None
|
||||
|
||||
|
||||
@cache.memoize(timeout=300)
|
||||
def get_user_score(user_id):
|
||||
user = Users.query.filter_by(id=user_id).first()
|
||||
if user:
|
||||
return user.account.score
|
||||
return None
|
||||
|
||||
|
||||
@cache.memoize(timeout=300)
|
||||
def get_team_place(team_id):
|
||||
team = Teams.query.filter_by(id=team_id).first()
|
||||
if team:
|
||||
return team.place
|
||||
return None
|
||||
|
||||
|
||||
@cache.memoize(timeout=300)
|
||||
def get_team_score(team_id):
|
||||
team = Teams.query.filter_by(id=team_id).first()
|
||||
if team:
|
||||
return team.score
|
||||
return None
|
||||
|
||||
|
||||
def get_current_team():
|
||||
if authed():
|
||||
user = get_current_user()
|
||||
|
||||
Reference in New Issue
Block a user