def get_many_int(
            self,
            query: Mapping[str, Any],
            context: PipelineContext = None) -> Generator[int, None, None]:
        value = query.get(VALUE_KEY)
        count = query.get(COUNT_KEY)

        try:
            value = int(value)
        except ValueError:
            raise NotFoundError("Couldn't cast the query value to \"int\"")

        return (value for _ in range(count))
Esempio n. 2
0
    def get_versions(self,
                     query: MutableMapping[str, Any],
                     context: PipelineContext = None) -> VersionListDto:
        url = "https://ddragon.leagueoflegends.com/api/versions.json"
        try:
            body = json.loads(self._client.get(url)[0])
        except HTTPError as e:
            raise NotFoundError(str(e)) from e

        return VersionListDto({
            "region": query["platform"].region.value,
            "versions": body
        })
Esempio n. 3
0
    def get_league_position(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> LeaguePositionsDto:
        url = "https://{platform}.api.riotgames.com/lol/league/v3/positions/by-summoner/{summonerId}".format(platform=query["platform"].value.lower(), summonerId=query["summoner.id"])
        try:
            data = self._get(url, {}, self._get_rate_limiter(query["platform"], "positions/by-summoner/summonerId {}".format(query["platform"].value)))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data = {"positions": data}
        data["region"] = query["platform"].region.value
        data["summonerId"] = query["summoner.id"]
        for position in data["positions"]:
            position["region"] = data["region"]
        return LeaguePositionsDto(data)
Esempio n. 4
0
        def generator():
            for id in query["summoner.ids"]:
                url = "https://{platform}.api.riotgames.com/lol/league/v3/leagues/by-summoner/{summonerId}".format(platform=query["platform"].value.lower(), summonerId=id)
                try:
                    data = self._get(url, {}, self._get_rate_limiter(query["platform"], "leagues/by-summoner/summonerId {}".format(query["platform"].value)))
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data["region"] = query["platform"].region.value
                data["summonerId"] = id
                for entry in data["entries"]:
                    entry["region"] = data["region"]
                yield LeaguesListDto(data)
Esempio n. 5
0
    def get_current_game(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> CurrentGameInfoDto:
        if "region" in query and "platform" not in query:
            query["platform"] = Region(query["region"]).platform.value
        SpectatorAPI._validate_get_current_game_query(query, context)

        url = "https://{platform}.api.riotgames.com/lol/spectator/v3/active-games/by-summoner/{id}".format(platform=query["platform"].value.lower(), id=query["summoner.id"])
        try:
            data = self._get(url, {}, self._get_rate_limiter(query["platform"], "spectator/active-games/by-summoner"))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["region"] = query["platform"].region.value
        return CurrentGameInfoDto(data)
Esempio n. 6
0
    def get_positional_queues(
            self,
            query: MutableMapping[str, Any],
            context: PipelineContext = None) -> PositionalQueuesDto:
        parameters = {"platform": query["platform"].value}
        endpoint = "lol/league/v4/positional-rank-queues".format()
        try:
            data = self._get(endpoint=endpoint, parameters=parameters)
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        return PositionalQueuesDto(region=query["platform"].region.value,
                                   queues=data)
Esempio n. 7
0
    def get_status(self,
                   query: MutableMapping[str, Any],
                   context: PipelineContext = None) -> ShardStatusDto:
        url = "https://{platform}.api.riotgames.com/lol/status/v3/shard-data".format(
            platform=query["platform"].value.lower())
        try:
            data = self._get(
                url, {}, self._get_rate_limiter(query["platform"], "status"))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["region"] = query["platform"].region.value
        return ShardStatusDto(data)
Esempio n. 8
0
        def generator():
            for platform, summoner_id in zip(query["platforms"], query["summoner.ids"]):
                platform = Platform(platform.upper())
                url = "https://{platform}.api.riotgames.com/lol/platform/v4/third-party-code/by-summoner/{summonerId}".format(platform=platform.value.lower(), summonerId=summoner_id)
                try:
                    app_limiter, method_limiter = self._get_rate_limiter(query["platform"], "thirdpartycode")
                    data = self._get(url, {}, app_limiter=app_limiter, method_limiter=method_limiter)
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data = {"string": data}
                data["region"] = platform.region.value
                data["summonerId"] = summoner_id
                yield VerificationStringDto(data)
Esempio n. 9
0
        def generator():
            for id in query["summoner.ids"]:
                url = "https://{platform}.api.riotgames.com/lol/platform/v3/runes/by-summoner/{summonerId}".format(
                    platform=query["platform"].value.lower(), summonerId=id)
                try:
                    data = self._get(
                        url, {},
                        self._get_rate_limiter(query["platform"],
                                               "runes/by-summoner/summonerId"))
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data["region"] = query["platform"].region.value
                yield RunePagesDto(data)
Esempio n. 10
0
        def generator():
            for id in query["ids"]:
                try:
                    summoner_spell = data["data"][id]
                except KeyError as error:
                    raise NotFoundError(
                        "No summoner spell exists with id \"{id}\"".format(
                            id=id)) from error

                summoner_spell["region"] = query["platform"].region.value
                summoner_spell["version"] = data["version"]
                summoner_spell["locale"] = query["locale"]
                summoner_spell["includedData"] = query["includedData"]
                yield SummonerSpellDto(summoner_spell)
Esempio n. 11
0
        def generator():
            for id in query["ids"]:
                try:
                    rune = data["data"][str(id)]
                except KeyError as error:
                    raise NotFoundError(
                        "No rune exists with id \"{id}\"".format(
                            id=id)) from error

                rune["region"] = query["platform"].region.value
                rune["version"] = data["version"]
                rune["locale"] = query["locale"]
                rune["includedData"] = query["includedData"]
                yield RuneDto(rune)
Esempio n. 12
0
        def generator():
            for id in query["ids"]:
                try:
                    mastery = data["data"][str(id)]
                except KeyError as error:
                    raise NotFoundError(
                        "No mastery exists with id \"{id}\"".format(
                            id=id)) from error

                mastery["region"] = query["platform"].region.value
                mastery["version"] = data["version"]
                mastery["locale"] = query["locale"]
                mastery["includedData"] = query["includedData"]
                yield MasteryDto(mastery)
Esempio n. 13
0
        def generator():
            for id in query["ids"]:
                try:
                    champion = data["data"][str(id)]
                except KeyError as error:
                    raise NotFoundError(
                        "No champion exists with id \"{id}\"".format(
                            id=id)) from error

                champion["region"] = query["platform"].region.value
                champion["version"] = data["version"]
                champion["locale"] = query["locale"]
                champion["includedData"] = query["includedData"]
                yield ChampionDto(champion)
Esempio n. 14
0
        def generator():
            for platform in query["platforms"]:
                platform = Platform(platform.upper())
                url = "https://{platform}.api.riotgames.com/lol/static-data/v3/realms".format(
                    platform=platform.value.lower())
                try:
                    data = self._get(
                        url, {},
                        self._get_rate_limiter(platform, "staticdata/realms"))
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data["region"] = platform.region.value
                yield RealmDto(data)
Esempio n. 15
0
    def get_champion_status_list(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> ChampionListDto:
        params = {
            "freeToPlay": query["freeToPlay"]
        }

        url = "https://{platform}.api.riotgames.com/lol/platform/v3/champions".format(platform=query["platform"].value.lower())
        try:
            data = self._get(url, params, self._get_rate_limiter(query["platform"], "champions"))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["region"] = query["platform"].region.value
        data["freeToPlay"] = query["freeToPlay"]
        return ChampionListDto(data)
Esempio n. 16
0
    def get_match_timeline(self,
                           query: MutableMapping[str, Any],
                           context: PipelineContext = None) -> TimelineDto:
        parameters = {"platform": query["platform"].value}
        endpoint = "lol/match/v4/timelines/by-match/{id}".format(
            id=query["id"])
        try:
            data = self._get(endpoint=endpoint, parameters=parameters)
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["matchId"] = query["id"]
        data["region"] = query["platform"].region.value
        return TimelineDto(data)
Esempio n. 17
0
        def generator():
            for queue in query["queues"]:
                url = "https://{platform}.api.riotgames.com/lol/league/v3/masterleagues/by-queue/{queueName}".format(platform=query["platform"].value.lower(), queueName=queue.value)
                try:
                    data = self._get(url, {}, self._get_rate_limiter(query["platform"], "masterleagues/by-queue {}".format(query["platform"].value)))
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data = {"leagues": data}
                data["region"] = query["platform"].region.value
                data["queue"] = queue.value
                for entry in data["entries"]:
                    entry["region"] = data["region"]
                yield MasterLeagueListDto(data)
Esempio n. 18
0
    def get_realms(self,
                   query: MutableMapping[str, Any],
                   context: PipelineContext = None) -> RealmDto:
        region = query["platform"].region
        url = "https://ddragon.leagueoflegends.com/realms/{region}.json".format(
            region=region.value.lower())
        try:
            body = json.loads(self._client.get(url)[0])

        except HTTPError as e:
            raise NotFoundError(str(e)) from e

        body["region"] = query["platform"].region.value
        return RealmDto(body)
Esempio n. 19
0
    def get_challenger_league(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> ChallengerLeagueListDto:
        if "region" in query and "platform" not in query:
            query["platform"] = Region(query["region"]).platform.value
        LeaguesAPI._validate_get_challenger_league_query(query, context)

        url = "https://{platform}.api.riotgames.com/lol/league/v3/challengerleagues/by-queue/{queueName}".format(platform=query["platform"].value.lower(), queueName=query["queue"].value)
        try:
            data = self._get(url, {}, self._get_rate_limiter(query["platform"], "challengerleagues/by-queue"))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["region"] = query["platform"].region.value
        data["queue"] = query["queue"].value
        return ChallengerLeagueListDto(data)
Esempio n. 20
0
    def get_master_league_list(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> MasterLeagueListDto:
        url = "https://{platform}.api.riotgames.com/lol/league/v3/masterleagues/by-queue/{queueName}".format(platform=query["platform"].value.lower(), queueName=query["queue"].value)
        try:
            endpoint = "masterleagues/by-queue {}".format(query["platform"].value)
            app_limiter, method_limiter = self._get_rate_limiter(query["platform"], endpoint)
            data = self._get(url, {}, app_limiter=app_limiter, method_limiter=method_limiter)
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["region"] = query["platform"].region.value
        data["queue"] = query["queue"].value
        for entry in data["entries"]:
            entry["region"] = data["region"]
        return MasterLeagueListDto(data)
Esempio n. 21
0
    def get_leagues_list(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> LeagueListDto:
        url = "https://{platform}.api.riotgames.com/lol/league/v3/leagues/{leagueId}".format(platform=query["platform"].value.lower(), leagueId=query["id"])
        try:
            endpoint = "leagues/leagueId {}".format(query["platform"].value)
            app_limiter, method_limiter = self._get_rate_limiter(query["platform"], endpoint)
            data = self._get(url, {}, app_limiter=app_limiter, method_limiter=method_limiter)
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["region"] = query["platform"].region.value
        for entry in data["entries"]:
            entry["region"] = data["region"]
            entry["tier"] = data["tier"]
        return LeagueListDto(data)
Esempio n. 22
0
        def generator():
            parameters = {"platform": query["platform"].value}
            for summoner_id in query["summoner.ids"]:
                endpoint = "lol/champion-mastery/v4/scores/by-summoner/{summonerId}".format(summonerId=summoner_id)
                try:
                    data = self._get(endpoint=endpoint, parameters=parameters)
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                yield ChampionMasteryScoreDto({
                    "region": query["platform"].region.value,
                    "summonerId": summoner_id,
                    "score": data
                })
Esempio n. 23
0
    def get_champion_rotation(
            self,
            query: MutableMapping[str, Any],
            context: PipelineContext = None) -> ChampionRotationDto:
        parameters = {"platform": query["platform"].value}
        endpoint = "lol/platform/v3/champion-rotations"
        try:
            data = self._get(endpoint=endpoint, parameters=parameters)
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data["platform"] = query["platform"].value
        data["region"] = query["platform"].region.value
        return ChampionRotationDto(**data)
Esempio n. 24
0
    def get_item_list(self,
                      query: MutableMapping[str, Any],
                      context: PipelineContext = None) -> ItemListDto:
        locale = query["locale"] if "locale" in query else query[
            "platform"].default_locale
        query["locale"] = locale

        ahash = self.calculate_hash(query)
        try:
            return self._cache[ItemListDto][ahash]
        except KeyError:
            pass

        url = "http://ddragon.leagueoflegends.com/cdn/{version}/data/{locale}/item.json".format(
            version=query["version"], locale=locale)
        try:
            body = json.loads(self._client.get(url)[0])
        except HTTPError as e:
            raise NotFoundError(str(e)) from e

        body.pop("basic")

        for group in body["groups"]:
            # key in static data -> id on DDragon
            group["key"] = group.pop("id")

        for item_id, item in body["data"].items():
            item = ItemDto(item)
            body["data"][item_id] = item
            item["id"] = int(item_id)
            # TODO: Sanitizer?
            item["sanitizedDescription"] = item["description"]
            if item["id"] == 3632:  # This item doesn't have a name.
                item["name"] = ""
            if "tags" not in item:
                item["tags"] = []
            if "depth" not in item:
                item["depth"] = 1
            if "colloq" not in item:
                item["colloq"] = ""
            if "plaintext" not in item:
                item["plaintext"] = ""

        body["region"] = query["platform"].region.value
        body["locale"] = locale
        body["includedData"] = {"all"}
        result = ItemListDto(body)
        self._cache[ItemListDto][ahash] = result
        return result
Esempio n. 25
0
    def get_many_item(
            self,
            query: MutableMapping[str, Any],
            context: PipelineContext = None) -> Generator[ItemDto, None, None]:
        StaticDataAPI._validate_get_many_item_query(query, context)

        params = {
            "locale": query["locale"],
            "tags": ",".join(list(query["includedData"]))
        }

        if "version" in query:
            params["version"] = query["version"]

        url = "https://{platform}.api.riotgames.com/lol/static-data/v3/items".format(
            platform=query["platform"].value.lower())
        try:
            data = self._get(
                url, params,
                self._get_rate_limiter(query["platform"], "staticdata/item"))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        def generator():
            for id in query["ids"]:
                try:
                    item = data["data"][str(id)]
                except KeyError as error:
                    raise NotFoundError(
                        "No item exists with id \"{id}\"".format(
                            id=id)) from error

                item["region"] = query["platform"].region.value
                item["version"] = data["version"]
                item["locale"] = query["locale"]
                item["includedData"] = query["includedData"]
                if item["id"] == 3632:  # This item doesn't have a name.
                    item["name"] = ""
                if "tags" not in item:
                    item["tags"] = []
                if "depth" not in item:
                    item["depth"] = 1
                if "colloq" not in item:
                    item["colloq"] = ""
                if "plaintext" not in item:
                    item["plaintext"] = ""
                yield ItemDto(item)

        return generator()
Esempio n. 26
0
        def generator():
            for id in query["ids"]:
                url = "https://{platform}.api.riotgames.com/lol/match/v3/timelines/by-match/{id}".format(
                    platform=query["platform"].value.lower(), id=id)
                try:
                    data = self._get(
                        url, {},
                        self._get_rate_limiter(query["platform"],
                                               "timelines/by-match/id"))
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data["matchId"] = id
                data["region"] = query["platform"].region.value
                yield TimelineDto(data)
Esempio n. 27
0
    def get_league(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> LeaguesListDto:
        if "region" in query and "platform" not in query:
            query["platform"] = Region(query["region"]).platform.value
        LeaguesAPI._validate_get_leagues_query(query, context)

        url = "https://{platform}.api.riotgames.com/lol/league/v3/leagues/by-summoner/{summonerId}".format(platform=query["platform"].value.lower(), summonerId=query["summoner.id"])
        try:
            data = self._get(url, {}, self._get_rate_limiter(query["platform"], "leagues/by-summoner/summonerId"))
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        data = {"leagues": data}
        data["region"] = query["platform"].region.value
        data["summonerId"] = query["summoner.id"]
        return LeaguesListDto(data)
Esempio n. 28
0
        def generator():
            for platform in query["platforms"]:
                platform = Platform(platform.upper())
                url = "https://{platform}.api.riotgames.com/lol/platform/v3/champions".format(
                    platform=platform.value.lower())
                try:
                    data = self._get(
                        url, params,
                        self._get_rate_limiter(platform, "champions"))
                except APINotFoundError as error:
                    raise NotFoundError(str(error)) from error

                data["region"] = platform.region.value
                data["freeToPlay"] = query["freeToPlay"]
                yield ChampionListDto(data)
Esempio n. 29
0
    def get_champion_mastery_list(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> ChampionMasteryListDto:
        parameters = {"platform": query["platform"].value}
        endpoint = "lol/champion-mastery/v4/champion-masteries/by-summoner/{summonerId}".format(summonerId=query["summoner.id"])
        try:
            data = self._get(endpoint=endpoint, parameters=parameters)
        except APINotFoundError as error:
            raise NotFoundError(str(error)) from error

        for cm in data:
            cm["region"] = query["region"]
        return ChampionMasteryListDto({
            "masteries": data,
            "summonerId": query["summoner.id"],
            "region": query["platform"].region.value
        })
Esempio n. 30
0
    def get_language_strings(self, query: MutableMapping[str, Any], context: PipelineContext = None) -> LanguageStringsDto:
        locale = query["locale"] if "locale" in query else query["platform"].default_locale

        url = "https://ddragon.leagueoflegends.com/cdn/{version}/data/{locale}/language.json".format(
            version=query["version"],
            locale=locale
        )
        try:
            body = json.loads(self._client.get(url)[0])
        except HTTPError as e:
            raise NotFoundError(str(e)) from e

        body["region"] = query["platform"].region.value
        body["locale"] = locale
        return LanguageStringsDto(body)