Skip to content

Commit 5700e3b

Browse files
authored
Merge pull request #79 from fourjr/use-cache
Add use_cache parameter to all methods
2 parents df7c3ac + 37d83c6 commit 5700e3b

1 file changed

Lines changed: 49 additions & 22 deletions

File tree

brawlstats/core.py

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,14 @@ def _resolve_cache(self, url):
123123
log.debug('GET {} got result from cache.'.format(url))
124124
return data
125125

126-
async def _arequest(self, url):
126+
async def _arequest(self, url, use_cache=True):
127127
"""Async method to request a url."""
128128
# Try and retrieve from cache
129-
cache = self._resolve_cache(url)
129+
if use_cache:
130+
cache = self._resolve_cache(url)
131+
else:
132+
cache = None
133+
130134
if cache is not None:
131135
return cache
132136

@@ -141,13 +145,16 @@ async def _arequest(self, url):
141145

142146
return data
143147

144-
def _request(self, url):
148+
def _request(self, url, use_cache=True):
145149
"""Sync method to request a url."""
146150
if self.is_async:
147-
return self._arequest(url)
151+
return self._arequest(url, use_cache)
148152

149153
# Try and retrieve from cache
150-
cache = self._resolve_cache(url)
154+
if use_cache:
155+
cache = self._resolve_cache(url)
156+
else:
157+
cache = None
151158
if cache is not None:
152159
return cache
153160

@@ -162,12 +169,12 @@ def _request(self, url):
162169

163170
return data
164171

165-
async def _aget_model(self, url, model, key=None):
172+
async def _aget_model(self, url, model, use_cache=True, key=None):
166173
"""Method to turn the response data into a Model class for the async client."""
167174
if self.prevent_ratelimit:
168175
# Use self.lock if prevent_ratelimit=True
169176
async with self.lock:
170-
data = await self._arequest(url)
177+
data = await self._arequest(url, use_cache)
171178
await asyncio.sleep(0.1)
172179
else:
173180
data = await self._arequest(url)
@@ -181,13 +188,13 @@ async def _aget_model(self, url, model, key=None):
181188

182189
return model(self, data)
183190

184-
def _get_model(self, url, model, key=None):
191+
def _get_model(self, url, model, use_cache=True, key=None):
185192
"""Method to turn the response data into a Model class for the sync client."""
186193
if self.is_async:
187194
# Calls the async function
188-
return self._aget_model(url, model=model, key=key)
195+
return self._aget_model(url, model=model, use_cache=use_cache, key=key)
189196

190-
data = self._request(url)
197+
data = self._request(url, use_cache)
191198
if self.prevent_ratelimit:
192199
time.sleep(0.1)
193200

@@ -201,80 +208,91 @@ def _get_model(self, url, model, key=None):
201208
return model(self, data)
202209

203210
@typecasted
204-
def get_player(self, tag: bstag) -> Player:
211+
def get_player(self, tag: bstag, use_cache=True) -> Player:
205212
"""Gets a player's stats.
206213
207214
Parameters
208215
----------
209216
tag : str
210217
A valid player tag.
211218
Valid characters: 0289PYLQGRJCUV
219+
use_cache : bool, optional
220+
Whether to use the internal 3 minutes cache, by default True
212221
213222
Returns
214223
-------
215224
Player
216225
A player object with all of its attributes.
217226
"""
218227
url = '{}/{}'.format(self.api.PROFILE, tag)
219-
return self._get_model(url, model=Player)
228+
return self._get_model(url, model=Player, use_cache=use_cache)
220229

221230
get_profile = get_player
222231

223232
@typecasted
224-
def get_battle_logs(self, tag: bstag) -> BattleLog:
233+
def get_battle_logs(self, tag: bstag, use_cache=True) -> BattleLog:
225234
"""Gets a player's battle logs.
226235
227236
Parameters
228237
----------
229238
tag : str
230239
A valid player tag.
231240
Valid characters: 0289PYLQGRJCUV
241+
use_cache : bool, optional
242+
Whether to use the internal 3 minutes cache, by default True
232243
233244
Returns
234245
-------
235246
BattleLog
236247
A player battle object with all of its attributes.
237248
"""
238249
url = '{}/{}/battlelog'.format(self.api.PROFILE, tag)
239-
return self._get_model(url, model=BattleLog)
250+
return self._get_model(url, model=BattleLog, use_cache=use_cache)
240251

241252
@typecasted
242-
def get_club(self, tag: bstag) -> Club:
253+
def get_club(self, tag: bstag, use_cache=True) -> Club:
243254
"""Gets a club's stats.
244255
245256
Parameters
246257
----------
247258
tag : str
248259
A valid club tag.
249260
Valid characters: 0289PYLQGRJCUV
261+
use_cache : bool, optional
262+
Whether to use the internal 3 minutes cache, by default True
250263
251264
Returns
252265
-------
253266
Club
254267
A club object with all of its attributes.
255268
"""
256269
url = '{}/{}'.format(self.api.CLUB, tag)
257-
return self._get_model(url, model=Club)
270+
return self._get_model(url, model=Club, use_cache=use_cache)
258271

259272
@typecasted
260-
def get_club_members(self, tag: bstag) -> Members:
273+
def get_club_members(self, tag: bstag, use_cache=True) -> Members:
261274
"""Gets the members of a club.
262275
263276
Parameters
264277
----------
265278
tag : str
266279
A valid club tag.
267280
Valid characters: 0289PYLQGRJCUV
281+
use_cache : bool, optional
282+
Whether to use the internal 3 minutes cache, by default True
268283
269284
Returns
270285
-------
271286
Members
272287
A list of the members in a club.
273288
"""
274289
url = '{}/{}/members'.format(self.api.CLUB, tag)
275-
return self._get_model(url, model=Members)
290+
return self._get_model(url, model=Members, use_cache=use_cache)
276291

277-
def get_rankings(self, *, ranking: str, region: str=None, limit: int=200, brawler: Union[str, int]=None) -> Ranking:
292+
def get_rankings(
293+
self, *, ranking: str, region: str=None, limit: int=200,
294+
brawler: Union[str, int]=None, use_cache=True
295+
) -> Ranking:
278296
"""Gets the top count players/clubs/brawlers.
279297
280298
Parameters
@@ -287,6 +305,8 @@ def get_rankings(self, *, ranking: str, region: str=None, limit: int=200, brawle
287305
The number of top players or clubs to fetch, by default 200
288306
brawler : Union[str, int], optional
289307
The brawler name or ID, by default None
308+
use_cache : bool, optional
309+
Whether to use the internal 3 minutes cache, by default True
290310
291311
Returns
292312
-------
@@ -327,15 +347,17 @@ def get_rankings(self, *, ranking: str, region: str=None, limit: int=200, brawle
327347
if ranking == 'brawlers':
328348
url = '{}/{}/{}/{}?limit={}'.format(self.api.RANKINGS, region, ranking, brawler, limit)
329349

330-
return self._get_model(url, model=Ranking)
350+
return self._get_model(url, model=Ranking, use_cache=use_cache)
331351

332-
def get_constants(self, key: str=None) -> Constants:
352+
def get_constants(self, key: str=None, use_cache=True) -> Constants:
333353
"""Gets Brawl Stars constants extracted from the app.
334354
335355
Parameters
336356
----------
337357
key : str, optional
338358
Any key to get specific data, by default None
359+
use_cache : bool, optional
360+
Whether to use the internal 3 minutes cache, by default True
339361
340362
Returns
341363
-------
@@ -344,9 +366,14 @@ def get_constants(self, key: str=None) -> Constants:
344366
"""
345367
return self._get_model(self.api.CONSTANTS, model=Constants, key=key)
346368

347-
def get_brawlers(self) -> Brawlers:
369+
def get_brawlers(self, use_cache=True) -> Brawlers:
348370
"""Gets available brawlers and information about them.
349371
372+
Parameters
373+
----------
374+
use_cache : bool, optional
375+
Whether to use the internal 3 minutes cache, by default True
376+
350377
Returns
351378
-------
352379
Brawlers

0 commit comments

Comments
 (0)