Example #1
0
    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",
        )
Example #2
0
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,
            ))
    ])
Example #3
0
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,
        )
    ])
Example #4
0
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)
Example #5
0
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)
Example #6
0
def _get_highscores(*args, **kwargs) -> Iterable[hs.HighscoreStruct]:
    return hs.get_highscores(hs.HighscoresDatabases.REMOTE, *args, **kwargs)