Fix leaderboard 500 on production (NotImplementedError) (#563)

* leaderboard: correct LB set when !ENABLE_SERVICES

* leaderboard: fix NotImplementedError

UserBlockLeaderboard did not, in fact, implement `value_func`. Nor did
its superclass. The bug was replicated by having at least one UserBlock
in the test data.
This commit is contained in:
Snakes 2023-03-29 18:45:28 -04:00 committed by GitHub
parent 1f7e7afad3
commit 1cf017c42a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 2 deletions

View file

@ -168,6 +168,10 @@ class UserBlockLeaderboard(_CountedAndRankedLeaderboard):
def v_value(self) -> int: def v_value(self) -> int:
return self._v_value return self._v_value
@property
def value_func(self) -> Callable[[User], int]:
return lambda u: self._all_users[u]
class RawSqlLeaderboard(Leaderboard): class RawSqlLeaderboard(Leaderboard):
def __init__(self, meta:LeaderboardMeta, db:Session, query:str) -> None: # should be LiteralString on py3.11+ def __init__(self, meta:LeaderboardMeta, db:Session, query:str) -> None: # should be LiteralString on py3.11+
super().__init__(None, meta) super().__init__(None, meta)

View file

@ -46,6 +46,9 @@ def pusher_thread2(interests, notifbody, username):
_lb_received_downvotes_meta = LeaderboardMeta("Downvotes", "received downvotes", "received-downvotes", "downvotes", "downvoted") _lb_received_downvotes_meta = LeaderboardMeta("Downvotes", "received downvotes", "received-downvotes", "downvotes", "downvoted")
_lb_given_upvotes_meta = LeaderboardMeta("Upvotes", "given upvotes", "given-upvotes", "upvotes", "upvoting") _lb_given_upvotes_meta = LeaderboardMeta("Upvotes", "given upvotes", "given-upvotes", "upvotes", "upvoting")
lb_downvotes_received: ReceivedDownvotesLeaderboard | None = None
lb_upvotes_given: GivenUpvotesLeaderboard | None = None
def leaderboard_thread(): def leaderboard_thread():
global lb_downvotes_received, lb_upvotes_given global lb_downvotes_received, lb_upvotes_given

View file

@ -382,7 +382,9 @@ def leaderboard(v:User):
# note: lb_downvotes_received and lb_upvotes_given are global variables # note: lb_downvotes_received and lb_upvotes_given are global variables
# that are populated by leaderboard_thread() in files.helpers.services # that are populated by leaderboard_thread() in files.helpers.services
leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, blocks, lb_downvotes_received, lb_upvotes_given] leaderboards = [coins, coins_spent, truescore, subscribers, posts, comments, received_awards, badges, blocks]
if lb_downvotes_received is not None and lb_upvotes_given is not None:
leaderboards.extend([lb_downvotes_received, lb_upvotes_given])
return render_template("leaderboard.html", v=v, leaderboards=leaderboards) return render_template("leaderboard.html", v=v, leaderboards=leaderboards)