Skip to content

Commit 3f4714c

Browse files
committed
Some changes (read desc)
- change back to testenv - fix to load brawlers for async clients (tox doesnt work currently but should work for users)
1 parent 6ae7d1c commit 3f4714c

File tree

5 files changed

+40
-40
lines changed

5 files changed

+40
-40
lines changed

brawlstats/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from .models import *
33
from .errors import *
44

5-
65
############
76
# METADATA #
87
############

brawlstats/core.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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,13 @@ 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+
brawlers_info = self.loop.run_until_complete(self.get_brawlers())
74+
else:
75+
brawlers_info = self.get_brawlers()
76+
self.api.set_brawlers(brawlers_info)
77+
7178
def __repr__(self):
7279
return '<Client async={} timeout={} debug={}>'.format(self.is_async, self.timeout, self.debug)
7380

@@ -272,19 +279,20 @@ def get_rankings(self, *, ranking: str, region=None, limit: int=200, brawler=Non
272279
273280
Returns Ranking
274281
"""
275-
if region is None:
276-
region = 'global'
277-
278282
if brawler is not None:
279283
if isinstance(brawler, str):
280284
brawler = brawler.lower()
285+
281286
# Replace brawler name with ID
282-
if brawler in self.api.BRAWLERS.keys():
283-
brawler = self.api.BRAWLERS[brawler]
287+
if brawler in self.api.CURRENT_BRAWLERS.keys():
288+
brawler = self.api.CURRENT_BRAWLERS[brawler]
284289

285-
if brawler not in self.api.BRAWLERS.values():
290+
if brawler not in self.api.CURRENT_BRAWLERS.values():
286291
raise ValueError('Invalid brawler.')
287292

293+
if region is None:
294+
region = 'global'
295+
288296
# Check for invalid parameters
289297
if ranking not in ('players', 'clubs', 'brawlers'):
290298
raise ValueError("'ranking' must be 'players', 'clubs' or 'brawlers'.")
@@ -319,4 +327,4 @@ def get_brawlers(self):
319327
320328
Returns Brawlers
321329
"""
322-
return self._get_model(self.api.BRAWLERS_URL, model=Brawlers)
330+
return self._get_model(self.api.BRAWLERS, model=Brawlers)

brawlstats/models.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ def __getitem__(self, item):
3333

3434
class BaseBoxList(BaseBox):
3535
def from_data(self, data):
36-
data = data['items']
3736
self.raw_data = data
3837
self._boxed_data = BoxList(data, camel_killer_box=True)
3938
return self
@@ -95,6 +94,9 @@ class Members(BaseBoxList):
9594
Returns the members in a club.
9695
"""
9796

97+
def __init__(self, client, data):
98+
super().__init__(client, data['items'])
99+
98100
def __repr__(self):
99101
return '<Members object count={}>'.format(len(self))
100102

@@ -104,6 +106,9 @@ class Ranking(BaseBoxList):
104106
Returns a player or club ranking that contains a list of players or clubs.
105107
"""
106108

109+
def __init__(self, client, data):
110+
super().__init__(client, data['items'])
111+
107112
def __repr__(self):
108113
return '<Ranking object count={}>'.format(len(self))
109114

@@ -112,7 +117,9 @@ class BattleLog(BaseBoxList):
112117
"""
113118
Returns a full player battle object with all of its attributes.
114119
"""
115-
pass
120+
121+
def __init__(self, client, data):
122+
super().__init__(client, data['items'])
116123

117124

118125
class Constants(BaseBox):
@@ -127,8 +134,5 @@ class Brawlers(BaseBoxList):
127134
Returns list of available brawlers and information about them.
128135
"""
129136

130-
def __repr__(self):
131-
return '<Brawlers object count={}>'.format(len(self))
132-
133-
def __str__(self):
134-
return 'Here {} brawlers'.format(len(self))
137+
def __init__(self, client, data):
138+
super().__init__(client, data['items'])

brawlstats/utils.py

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import inspect
2-
import json
2+
# import json
33
import os
44
import re
5-
import urllib.request
5+
# import urllib.request
66
from datetime import datetime
77
from functools import wraps
88

@@ -16,29 +16,18 @@ def __init__(self, base_url, version=1):
1616
self.CLUB = self.BASE + '/clubs'
1717
self.RANKINGS = self.BASE + '/rankings'
1818
self.CONSTANTS = 'https://fourjr.herokuapp.com/bs/constants'
19-
self.BRAWLERS_URL = self.BASE + "/brawlers"
19+
self.BRAWLERS = self.BASE + '/brawlers'
2020

2121
# Get package version from __init__.py
2222
path = os.path.dirname(__file__)
2323
with open(os.path.join(path, '__init__.py')) as f:
2424
self.VERSION = re.search(r'^__version__ = [\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1)
2525

26-
# Get current brawlers and their IDs
27-
try:
28-
resp = urllib.request.urlopen(self.CONSTANTS + '/characters').read()
29-
if isinstance(resp, bytes):
30-
resp = resp.decode('utf-8')
31-
data = json.loads(resp)
32-
except (TypeError, urllib.error.HTTPError, urllib.error.URLError):
33-
self.BRAWLERS = {}
34-
else:
35-
if data:
36-
self.BRAWLERS = {
37-
b['tID'].lower(): int(str(b['scId'])[:2] + '0' + str(b['scId'])[2:])
38-
for b in data if b['tID']
39-
}
40-
else:
41-
self.BRAWLERS = {}
26+
self.CURRENT_BRAWLERS = {}
27+
28+
def set_brawlers(self, brawlers):
29+
self.CURRENT_BRAWLERS = {b['name'].lower(): int(b['id']) for b in brawlers}
30+
print(self.CURRENT_BRAWLERS)
4231

4332

4433
def bstag(tag):
@@ -79,8 +68,8 @@ def get_datetime(timestamp: str, unix=True):
7968
return time
8069

8170

82-
# do nothing
8371
def nothing(value):
72+
"""Function that returns the argument"""
8473
return value
8574

8675

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ignore = E252,E302,E731,W605
66
[tox]
77
envlist = py35,py36,py37,py38
88

9-
[env]
9+
[testenv]
1010
changedir = tests
1111
deps = -r{toxinidir}/requirements-dev.txt
1212
sitepackages = true

0 commit comments

Comments
 (0)