Skip to content

Commit dfb1f4e

Browse files
authored
Merge pull request #54 from SharpBit/development
Fix brawlers for python 3.5, fix tests
2 parents 3a10958 + 3baeb65 commit dfb1f4e

6 files changed

Lines changed: 180 additions & 166 deletions

File tree

MANIFEST.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include requirements.txt
2+
include requirements-dev.txt

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ Special thanks to this project's contributors ❤️
7676
- `kawaii banana`_
7777
- `kjkui`_
7878
- `Kyber`_
79+
- `Papiersnipper`_
7980
- `Pollen`_
8081
- `OrangutanGaming`_
8182
- `Stitch`_
@@ -93,5 +94,6 @@ If you want to contribute, whether it be a bug fix or new feature, make sure to
9394
.. _Stitch: https://github.com/Soumil07
9495
.. _kjkui: https://github.com/kjkui
9596
.. _Kyber: https://github.com/kyb3r
97+
.. _Papiersnipper: https://github.com/robinmahieu
9698
.. _Pollen: https://github.com/pollen5
9799
.. _kawaii banana: https://github.com/bananaboy21

brawlstats/utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ def __init__(self, base_url, version=1):
2424

2525
# Get current brawlers and their IDs
2626
try:
27-
data = json.loads(urllib.request.urlopen(self.CONSTANTS + '/characters').read())
27+
resp = urllib.request.urlopen(self.CONSTANTS + '/characters').read()
28+
if isinstance(resp, bytes):
29+
resp = resp.decode('utf-8')
30+
data = json.loads(resp)
2831
except (TypeError, urllib.error.HTTPError, urllib.error.URLError):
2932
self.BRAWLERS = {}
3033
else:

requirements-dev.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
python-dotenv
2-
flake8
31
asynctest
2+
flake8
3+
pluggy>=0.12.0,<1.0.0
44
pytest
5-
tox-travis
6-
pluggy>=0.12.0,<1.0.0
5+
pytest-asyncio
6+
python-dotenv
7+
tox-travis

tests/test_async.py

Lines changed: 94 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,120 @@
1-
import asynctest
2-
import asyncio
31
import os
42

3+
import aiohttp
4+
import asynctest
55
import brawlstats
6-
from brawlstats.models import BattleLog, Club, Constants, Members, Ranking
7-
from dotenv import load_dotenv, find_dotenv
6+
import pytest
7+
from dotenv import load_dotenv
88

9-
load_dotenv(find_dotenv('.env'))
10-
11-
TOKEN = os.getenv('token')
12-
URL = os.getenv('base_url')
9+
pytestmark = pytest.mark.asyncio
10+
load_dotenv()
1311

1412

1513
class TestAsyncClient(asynctest.TestCase):
16-
"""Tests all methods in the asynchronous client that
17-
uses the `aiohttp` module in `brawlstats`
18-
"""
14+
use_default_loop = True
15+
16+
PLAYER_TAG = '#GGJVJLU2'
17+
CLUB_TAG = '#QCCQCGV'
18+
1919
async def setUp(self):
20-
self.player_tag = '#GGJVJLU2'
21-
self.club_tag = '#QCGV8PG'
20+
session = aiohttp.ClientSession(loop=self.loop)
21+
2222
self.client = brawlstats.Client(
23-
TOKEN,
23+
os.getenv('token'),
24+
base_url=os.getenv('base_url'),
2425
is_async=True,
25-
base_url=URL,
26-
timeout=30
26+
session=session
2727
)
2828

29-
async def tearDown(self):
30-
await asyncio.sleep(1)
31-
await self.client.close()
32-
3329
async def test_get_player(self):
34-
player = await self.client.get_player(self.player_tag)
35-
self.assertEqual(player.tag, self.player_tag)
30+
player = await self.client.get_player(self.PLAYER_TAG)
31+
self.assertIsInstance(player, brawlstats.Player)
32+
self.assertEqual(player.tag, self.PLAYER_TAG)
3633

3734
club = await player.get_club()
38-
self.assertIsInstance(club, Club)
35+
self.assertIsInstance(club, brawlstats.Club)
36+
self.assertEqual(club.tag, self.CLUB_TAG)
37+
38+
with self.assertRaises(brawlstats.NotFoundError):
39+
await self.client.get_player('2PPPPPPP')
40+
41+
with self.assertRaises(brawlstats.NotFoundError):
42+
await self.client.get_player('P')
43+
44+
with self.assertRaises(brawlstats.NotFoundError):
45+
await self.client.get_player('AAA')
46+
47+
async def test_get_battle_logs(self):
48+
battle_logs = await self.client.get_battle_logs(self.PLAYER_TAG)
49+
self.assertIsInstance(battle_logs, brawlstats.BattleLog)
3950

4051
async def test_get_club(self):
41-
club = await self.client.get_club(self.club_tag)
42-
self.assertEqual(club.tag, self.club_tag)
52+
club = await self.client.get_club(self.CLUB_TAG)
53+
self.assertIsInstance(club, brawlstats.Club)
54+
self.assertEqual(club.tag, self.CLUB_TAG)
55+
56+
club_members = await club.get_members()
57+
self.assertIsInstance(club_members, brawlstats.Members)
58+
self.assertIn(self.PLAYER_TAG, [x.tag for x in club_members])
59+
60+
with self.assertRaises(brawlstats.NotFoundError):
61+
await self.client.get_club('8GGGGGGG')
62+
63+
with self.assertRaises(brawlstats.NotFoundError):
64+
await self.client.get_club('P')
4365

44-
members = await club.get_members()
45-
self.assertIsInstance(members, Members)
66+
with self.assertRaises(brawlstats.NotFoundError):
67+
await self.client.get_club('AAA')
4668

4769
async def test_get_club_members(self):
48-
members = await self.client.get_club_members(self.club_tag)
49-
self.assertIsInstance(members, Members)
50-
51-
async def test_get_rankings_player(self):
52-
rankings = await self.client.get_rankings(ranking='players')
53-
self.assertIsInstance(rankings, Ranking)
54-
region = await self.client.get_rankings(ranking='players', region='us')
55-
self.assertIsInstance(region, Ranking)
56-
57-
async def test_get_rankings_club(self):
58-
rankings = await self.client.get_rankings(ranking='clubs')
59-
self.assertIsInstance(rankings, Ranking)
60-
limit = await self.client.get_rankings(ranking='clubs', limit=100)
61-
self.assertTrue(len(limit) == 100)
62-
63-
async def test_get_rankings_brawler(self):
64-
rankings = await self.client.get_rankings(ranking='brawlers', brawler='shelly')
65-
self.assertIsInstance(rankings, Ranking)
66-
rankings = await self.client.get_rankings(ranking='brawlers', brawler=16000000)
67-
self.assertIsInstance(rankings, Ranking)
70+
club_members = await self.client.get_club_members(self.CLUB_TAG)
71+
self.assertIsInstance(club_members, brawlstats.Members)
72+
self.assertIn(self.PLAYER_TAG, [x.tag for x in club_members])
73+
74+
await self.assertAsyncRaises(brawlstats.NotFoundError, self.client.get_club_members('8GGGGGGG'))
75+
76+
async def test_get_rankings(self):
77+
player_ranking = await self.client.get_rankings(ranking='players')
78+
self.assertIsInstance(player_ranking, brawlstats.Ranking)
79+
80+
us_player_ranking = await self.client.get_rankings(ranking='players', region='US', limit=1)
81+
self.assertIsInstance(us_player_ranking, brawlstats.Ranking)
82+
self.assertTrue(len(us_player_ranking) == 1)
83+
84+
club_ranking = await self.client.get_rankings(ranking='clubs')
85+
self.assertIsInstance(club_ranking, brawlstats.Ranking)
86+
87+
us_club_ranking = await self.client.get_rankings(ranking='clubs', region='US', limit=1)
88+
self.assertIsInstance(us_club_ranking, brawlstats.Ranking)
89+
self.assertTrue(len(us_club_ranking) == 1)
90+
91+
brawler_ranking = await self.client.get_rankings(ranking='brawlers', brawler='Shelly')
92+
self.assertIsInstance(brawler_ranking, brawlstats.Ranking)
93+
94+
us_brawler_ranking = await self.client.get_rankings(ranking='brawlers', brawler=16000000, region='US', limit=1)
95+
self.assertIsInstance(us_brawler_ranking, brawlstats.Ranking)
96+
self.assertTrue(len(us_brawler_ranking) == 1)
97+
98+
with self.assertRaises(ValueError):
99+
await self.client.get_rankings(ranking='people')
100+
101+
with self.assertRaises(ValueError):
102+
await self.client.get_rankings(ranking='people', limit=0)
103+
104+
with self.assertRaises(ValueError):
105+
await self.client.get_rankings(ranking='brawlers', brawler='SharpBit')
68106

69107
async def test_get_constants(self):
70-
default = await self.client.get_constants()
71-
self.assertIsInstance(default, Constants)
108+
constants = await self.client.get_constants()
109+
self.assertIsInstance(constants, brawlstats.Constants)
110+
72111
maps = await self.client.get_constants('maps')
73-
self.assertIsInstance(maps, Constants)
74-
75-
async def request():
76-
await self.get_constants(invalid_key)
77-
invalid_key = 'invalid'
78-
self.assertAsyncRaises(KeyError, request)
79-
80-
async def test_battle_logs(self):
81-
logs = await self.client.get_battle_logs(self.player_tag)
82-
self.assertIsInstance(logs, BattleLog)
83-
84-
async def test_invalid_tag(self):
85-
async def request():
86-
await self.client.get_player(invalid_tag)
87-
invalid_tag = 'P'
88-
self.assertAsyncRaises(brawlstats.NotFoundError, request)
89-
invalid_tag = 'AAA'
90-
self.assertAsyncRaises(brawlstats.NotFoundError, request)
91-
invalid_tag = '2PPPPPPP'
92-
self.assertAsyncRaises(brawlstats.NotFoundError, request)
93-
94-
async def test_invalid_rankings(self):
95-
async def request():
96-
await self.client.get_rankings(ranking=invalid_ranking, limit=invalid_limit)
97-
invalid_ranking = 'test'
98-
invalid_limit = 200
99-
self.assertAsyncRaises(ValueError, request)
100-
invalid_ranking = 'players'
101-
invalid_limit = 201
102-
self.assertAsyncRaises(ValueError, request)
103-
invalid_ranking = 'players'
104-
invalid_limit = -5
105-
self.assertAsyncRaises(ValueError, request)
112+
self.assertIsInstance(maps, brawlstats.Constants)
113+
114+
await self.assertAsyncRaises(KeyError, self.client.get_constants('invalid'))
115+
116+
async def asyncTearDown(self):
117+
await self.client.close()
106118

107119

108120
if __name__ == '__main__':

0 commit comments

Comments
 (0)