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))
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 })
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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 })
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)
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
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()
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)
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)
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)
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 })
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)