Skip to content
This repository was archived by the owner on Aug 19, 2018. It is now read-only.

Commit 1d180cf

Browse files
committed
Finished up models
1 parent c662092 commit 1d180cf

File tree

2 files changed

+117
-17
lines changed

2 files changed

+117
-17
lines changed

crasync/models.py

Lines changed: 114 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def __str__(self):
1616
return f'{self.name} (#{self.tag})'
1717

1818
async def from_data(self):
19-
pass
19+
raise NotImplemented
2020

2121
async def update(self):
2222

@@ -28,12 +28,11 @@ async def update(self):
2828

2929
return self
3030

31-
32-
class Clan(Base):
33-
'''Represents a clan'''
34-
35-
def from_data(self, data):
36-
pass
31+
class ClanChest:
32+
def __init__(self, data):
33+
self.crowns = data.get('clanChestCrowns')
34+
self.percent = data.get('clanChestCrownsPercent')
35+
self.required = data.get('clanChestCrownsRequired')
3736

3837
class Arena:
3938
def __init__(self, data):
@@ -42,31 +41,131 @@ def __init__(self, data):
4241
self.number = data.get('arenaID')
4342
self.trophies = data.get('trophyLimit')
4443

44+
@property
45+
def image_url(self):
46+
return f"http://api.cr-api.com{self.raw_data.get('imageURL')}"
47+
4548
def __str__(self):
4649
return self.data.get('arena')
4750

51+
class Shop:
52+
def __init__(self, data):
53+
self.legendary = data.get('legendary')
54+
self.epic = data.get('epic')
55+
self.arena = data.get('arena')
56+
57+
class Cycle:
58+
def __init__(self, data):
59+
self.position = data.get('position')
60+
self.super_magical = data.get('superMagicalPos')
61+
self.legendary = data.get('legendaryPos')
62+
self.epic = data.get('epicPos')
63+
64+
class Card:
65+
def __init__(self, data):
66+
self.name = data.get('name')
67+
self.rarity = data.get('rarity')
68+
self.level = data.get('level')
69+
self.count = data.get('count')
70+
self.to_upgrade = data.get('requiredForUpgrade')
71+
self.id = data.get('card_id')
72+
self.elixir = data.get('elixir')
73+
self.type = data.get('type')
74+
self.arena = data.get('arena')
75+
self.description = data.get('description')
76+
self.decklink = data.get('decklink')
77+
78+
def __repr__(self):
79+
return f'<Card id={self.id}>'
80+
81+
class Member:
82+
def __init__(self, client, data):
83+
self.client = client
84+
self.name = data.get('name')
85+
self.arena = Arena(data.get('arena'))
86+
self.role = data.get('role')
87+
self.role_name = data.get('roleName')
88+
self.level = data.get('expLevel')
89+
self.trophies = data.get('trophies')
90+
self.donations = data.get('donations')
91+
self.rank = data.get('currentRank')
92+
self.crowns = data.get('clanChestCrowns')
93+
self.tag = data.get('tag')
94+
95+
def __repr__(self):
96+
return f'<Member tag={self.tag}>'
97+
98+
def get_profile(self):
99+
return self.client.get_profile(self.tag)
100+
101+
class Clan(Base):
102+
'''Represents a clan'''
103+
104+
def from_data(self, data):
105+
self.name = data.get('name')
106+
self.score = data.get('score')
107+
self.required_trophies = data.get('required_trophies')
108+
self.donations = data.get('donations')
109+
self.rank = data.get('currentRank')
110+
self.description = data.get('description')
111+
self.type = data.get('type')
112+
self.type_name = data.get('typeName')
113+
self.region = data.get('region').get('name')
114+
self.clan_chest = ClanChest(data.get('clanChest'))
115+
self.members = [Member(self.client, m) for m in data.get('members')]
116+
117+
@property
118+
def badge_url(self):
119+
url = self.raw_data.get('badge').get('url')
120+
return f"http://api.cr-api.com{url}"
121+
122+
def __repr__(self):
123+
return f'<Clan tag={self.tag}>'
124+
48125
class Profile(Base):
49126
'''Represents a player profile.
50127
Includes a clan maybe? (requires a seperate request tho)
51128
'''
52129
def from_data(self, data):
53130
self.name = data.get('name')
54131
exp = data.get('experience')
132+
stats = data.get('stats')
133+
games = data.get('games')
134+
clan = data.get('clan')
55135
self.level = exp.get('level')
56136
self.experience = (exp.get('xp'), exp.get('xpRequiredForLevelUp'))
57137
self.name_changed = data.get('nameChanged')
58138
self.global_rank = data.get('globalRank')
59139
self.current_trophies = data.get('trophies')
60-
self.highest_trophies = data.get('stats').get('challengeCardsWon')
140+
self.highest_trophies = stats.get('challengeCardsWon')
61141
self.legend_trophies = data.get('legendaryTrophies')
142+
self.tournament_cards_won = stats.get('tournamentCardsWon')
143+
self.challenge_cards_won = stats.get('challengeCardsWon')
144+
self.favourite_card = stats.get('favoriteCard').title()
145+
self.total_donations = stats.get('totalDonations')
146+
self.max_wins = stats.get('challengeMaxWins')
147+
self.games_played = games.get('total')
148+
self.wins = games.get('wins')
149+
self.losses = games.get('losses')
150+
self.draws = games.get('draws')
62151
self.arena = Arena(data.get('arena'))
63-
self.clan_tag = data.get('clan').get('tag')
64-
self.clan_name = data.get('clan').get('name')
65-
self.clan_role = data.get('clan').get('role')
152+
self.clan_tag = clan.get('tag')
153+
self.clan_name = clan.get('name')
154+
self.clan_role = clan.get('role')
155+
self.shop_offers = Shop(data.get('shopOffers'))
156+
self.chest_cycle = Cycle(data.get('chestCycle'))
157+
self.deck = [Card(c) for c in data.get('currentDeck')]
158+
159+
@property
160+
def clan_badge_url(self):
161+
url = self.raw_data.get('clan').get('badge').get('url')
162+
if not url:
163+
return None
164+
else:
165+
return f"http://api.cr-api.com{url}"
166+
167+
def __repr__(self):
168+
return f'<Profile tag={self.tag}>'
66169

67170
def get_clan(self):
68171
return self.client.get_clan(self.clan_tag)
69-
70-
71-
72-

tests.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
async def main():
66
client = crasync.Client()
7-
profile = await client.get_profile('CVLQ2GV8')
8-
print(json.dumps(profile.raw_data, indent=4))
7+
clan = await client.get_clan('29GLUPJ')
8+
print(clan)
9+
print(clan.description)
910

1011
loop = asyncio.get_event_loop()
1112
loop.run_until_complete(main())

0 commit comments

Comments
 (0)