Source code for rlapi.ext.tier_breakdown.rltracker

# Copyright 2018-present Jakub Kuczys (https://github.com/jack1142)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import logging
from collections import defaultdict
from typing import Any, Dict, List

from rlapi import Client, errors
from rlapi.player import RANKS

log = logging.getLogger(__name__)

__all__ = ("get_tier_breakdown",)

TIER_MAX = len(RANKS)


[docs]async def get_tier_breakdown( client: Client, ) -> Dict[int, Dict[int, Dict[int, List[float]]]]: """ Get tier breakdown from rltracker.pro. Parameters ---------- client: `rlapi.Client` Client object. Returns ------- `dict` Tier breakdown. Raises ------ HTTPException Downloading tier breakdown did not succeed. """ tier_breakdown: Dict[int, Dict[int, Dict[int, List[float]]]] = defaultdict( lambda: defaultdict(dict) ) for tier_id in range(1, TIER_MAX): try: tier = await _get_division_stats(client, tier_id) except errors.HTTPException: log.error("Downloading tier breakdown did not succeed.") raise for breakdown in tier: playlist_id: int = breakdown["playlist_id"] division: int = breakdown["division"] begin = float(breakdown["from"]) end = float(breakdown["to"]) tier_breakdown[playlist_id][tier_id][division] = [begin, end] return tier_breakdown
async def _get_division_stats(client: Client, tier_id: int) -> List[Dict[str, Any]]: url = f"http://rltracker.pro/tier_breakdown/get_division_stats?tier_id={tier_id}" # RLTracker.pro API returns JSON list on success text: List[Dict[str, Any]] = await client._request(url) return text