99from cachetools import TTLCache
1010
1111from .errors import Forbidden , NotFoundError , RateLimitError , ServerError , UnexpectedError
12- from .models import BattleLog , Club , Constants , Members , Player , Ranking
12+ from .models import BattleLog , Brawlers , Club , Constants , Members , Player , Ranking
1313from .utils import API , bstag , typecasted
1414
1515log = logging .getLogger (__name__ )
@@ -50,16 +50,16 @@ def __init__(self, token, session=None, timeout=30, is_async=False, **options):
5050 self .loop = options .get ('loop' , asyncio .get_event_loop ()) if self .is_async else None
5151 self .connector = options .get ('connector' )
5252
53+ self .debug = options .get ('debug' , False )
54+ self .cache = TTLCache (3200 * 3 , 60 * 3 ) # 3200 requests per minute
55+
5356 # Session and request options
5457 self .session = options .get ('session' ) or (
5558 aiohttp .ClientSession (loop = self .loop , connector = self .connector ) if self .is_async else requests .Session ()
5659 )
5760 self .timeout = timeout
5861 self .prevent_ratelimit = options .get ('prevent_ratelimit' , False )
59- self .api = API (options .get ('base_url' ), version = 1 )
60-
61- self .debug = options .get ('debug' , False )
62- self .cache = TTLCache (3200 * 3 , 60 * 3 ) # 3200 requests per minute
62+ self .api = API (base_url = options .get ('base_url' ), version = 1 )
6363
6464 # Request/response headers
6565 self .headers = {
@@ -68,6 +68,17 @@ def __init__(self, token, session=None, timeout=30, is_async=False, **options):
6868 'Accept-Encoding' : 'gzip'
6969 }
7070
71+ # Load brawlers for get_rankings
72+ if self .is_async :
73+ self .loop .create_task (self .__ainit__ ())
74+ else :
75+ brawlers_info = self .get_brawlers ()
76+ self .api .set_brawlers (brawlers_info )
77+
78+ async def __ainit__ (self ):
79+ """Task created to run `get_brawlers` asynchronously"""
80+ self .api .set_brawlers (await self .get_brawlers ())
81+
7182 def __repr__ (self ):
7283 return '<Client async={} timeout={} debug={}>' .format (self .is_async , self .timeout , self .debug )
7384
@@ -272,19 +283,20 @@ def get_rankings(self, *, ranking: str, region=None, limit: int=200, brawler=Non
272283
273284 Returns Ranking
274285 """
275- if region is None :
276- region = 'global'
277-
278286 if brawler is not None :
279287 if isinstance (brawler , str ):
280288 brawler = brawler .lower ()
289+
281290 # Replace brawler name with ID
282- if brawler in self .api .BRAWLERS .keys ():
283- brawler = self .api .BRAWLERS [brawler ]
291+ if brawler in self .api .CURRENT_BRAWLERS .keys ():
292+ brawler = self .api .CURRENT_BRAWLERS [brawler ]
284293
285- if brawler not in self .api .BRAWLERS .values ():
294+ if brawler not in self .api .CURRENT_BRAWLERS .values ():
286295 raise ValueError ('Invalid brawler.' )
287296
297+ if region is None :
298+ region = 'global'
299+
288300 # Check for invalid parameters
289301 if ranking not in ('players' , 'clubs' , 'brawlers' ):
290302 raise ValueError ("'ranking' must be 'players', 'clubs' or 'brawlers'." )
@@ -310,3 +322,13 @@ def get_constants(self, key=None):
310322 Returns Constants
311323 """
312324 return self ._get_model (self .api .CONSTANTS , model = Constants , key = key )
325+
326+ def get_brawlers (self ):
327+ """
328+ Get available brawlers and information about them.
329+
330+ No parameters
331+
332+ Returns Brawlers
333+ """
334+ return self ._get_model (self .api .BRAWLERS , model = Brawlers )
0 commit comments