def test_get_highscores(self, mock_get_db): """Test getting highscores.""" mock_get_hs = mock_get_db.return_value.get_highscores mock_get_hs.return_value = "DUMMY_RESULT" # Basic call passed onto local DB. result = get_highscores() assert result == "DUMMY_RESULT" mock_get_hs.assert_called_once_with( difficulty=None, per_cell=None, drag_select=None, name=None ) mock_get_hs.reset_mock() # Pass filters through. get_highscores(drag_select=True, name="FOO") mock_get_hs.assert_called_once_with( difficulty=None, per_cell=None, drag_select=True, name="FOO" ) mock_get_hs.reset_mock() # Settings take precedent. get_highscores( settings=HighscoreSettingsStruct.get_default(), drag_select=True, name="BAR", ) mock_get_hs.assert_called_once_with( difficulty=Difficulty.BEGINNER, per_cell=1, drag_select=False, name="BAR", )
def api_v1_highscores_ranks(): """Provide a REST API to get highscores from the DB.""" logger.debug("GET highscores with args: %s", dict(request.args)) difficulty = request.args.get("difficulty") per_cell = request.args.get("per_cell") drag_select = request.args.get("drag_select") if not difficulty or not per_cell or not drag_select: abort(404) difficulty = Difficulty.from_str(difficulty) per_cell = int(per_cell) drag_select = bool(int(drag_select)) return jsonify([ attr.asdict(h) for h in hs.filter_and_sort( hs.get_highscores( hs.HighscoresDatabases.REMOTE, drag_select=drag_select, per_cell=per_cell, difficulty=difficulty, )) ])
def api_v1_highscores(): """Provide a REST API to get highscores from the DB.""" logger.debug("GET highscores with args: %s", dict(request.args)) difficulty = request.args.get("difficulty") if difficulty: difficulty = Difficulty.from_str(difficulty) per_cell = request.args.get("per_cell") if per_cell: per_cell = int(per_cell) drag_select = request.args.get("drag_select") if drag_select: drag_select = bool(int(drag_select)) name = request.args.get("name") return jsonify([ attr.asdict(h) for h in hs.get_highscores( hs.HighscoresDatabases.REMOTE, drag_select=drag_select, per_cell=per_cell, difficulty=difficulty, name=name, ) ])
def player(args, username: str, allow_markdown=False, **kwargs): parser = BotMsgParser() parser.add_positional_arg("username", choices=list(utils.USER_NAMES) + ["me"]) parser.add_difficulty_arg() parser.add_per_cell_arg() parser.add_drag_select_arg() args = parser.parse_args(args) if args.username == "me": args.username = username highscores = hs.get_highscores( hs.HighscoresDatabases.REMOTE, name=utils.USER_NAMES[args.username], difficulty=args.difficulty, drag_select=args.drag_select, per_cell=args.per_cell, ) filters_str = formatter.format_filters(None, args.drag_select, args.per_cell, no_difficulty=True) if filters_str: filters_str = " with " + filters_str lines = [ "Player info for {} ({}){}:".format(args.username, utils.USER_NAMES[args.username], filters_str) ] lines.extend( formatter.format_player_highscores(list(highscores), difficulty=args.difficulty)) linebreak = " \n" if allow_markdown else "\n" return linebreak.join(lines)
def is_highscore_new_best(h: hs.HighscoreStruct) -> Optional[str]: all_highscores = hs.get_highscores(hs.HighscoresDatabases.REMOTE, settings=h) return hs.is_highscore_new_best(h, all_highscores)
def _get_highscores(*args, **kwargs) -> Iterable[hs.HighscoreStruct]: return hs.get_highscores(hs.HighscoresDatabases.REMOTE, *args, **kwargs)