def test_clans_apicall_url(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.clans(name='pupus',minMembers=10) assert 'name' in apicall.uri_args assert apicall.uri_args['name'] == 'pupus' assert 'minMembers' in apicall.uri_args assert apicall.uri_args['minMembers'] == 10
def test_clans_members_apicall_url(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.clans('#8R9LRVGU').members assert 'clans' in apicall.uri_parts assert '#8R9LRVGU' in apicall.uri_parts assert 'members' in apicall.uri_parts assert len(apicall.uri_parts) == 3
def test_locations_rankings_apicall_url(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.locations(123).rankings.clans assert 'locations' in apicall.uri_parts assert 123 in apicall.uri_parts assert 'rankings' in apicall.uri_parts assert 'clans' in apicall.uri_parts assert len(apicall.uri_parts) == 4 apicall = coc.locations(123).rankings('clans') assert 'locations' in apicall.uri_parts assert 123 in apicall.uri_parts assert 'rankings' in apicall.uri_parts assert 'clans' in apicall.uri_parts assert len(apicall.uri_parts) == 4 apicall = coc.locations(123).rankings.players assert 'locations' in apicall.uri_parts assert 123 in apicall.uri_parts assert 'rankings' in apicall.uri_parts assert 'players' in apicall.uri_parts assert len(apicall.uri_parts) == 4 apicall = coc.locations(123).rankings('players') assert 'locations' in apicall.uri_parts assert 123 in apicall.uri_parts assert 'rankings' in apicall.uri_parts assert 'players' in apicall.uri_parts assert len(apicall.uri_parts) == 4
def test_build_uri(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.locations('123').rankings('players') built_uri = build_uri(coc.endpoint, coc.api_version, apicall.uri_parts) assert built_uri == 'http://endpoint/v0/locations/123/rankings/players' apicall = coc.locations('123').rankings.clans built_uri = build_uri(coc.endpoint, coc.api_version, apicall.uri_parts) assert built_uri == 'http://endpoint/v0/locations/123/rankings/clans'
def test_specific_locations_apicall(api_key): coc = ClashOfClans(bearer_token=api_key) r = coc.locations(32000260).get() assert r.status_code == 200 assert isinstance(r, dict) assert r['countryCode'] == u'ZW' assert r['id'] == 32000260 assert r['isCountry'] == True assert r['name'] == u'Zimbabwe'
def test_clan_search_apicall(api_key): coc = ClashOfClans(bearer_token=api_key) r = coc.clans(minMembers=10).get() assert r.status_code == 200 assert isinstance(r, list) coc = ClashOfClans(bearer_token=api_key) r = coc.clans(minMembers=10, warFrequency='always').get() assert r.status_code == 200 assert isinstance(r, list)
def test_build_uri_scaping_chars(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.clans('#8R9LRVGU').members built_uri = build_uri(coc.endpoint, coc.api_version, apicall.uri_parts) assert built_uri == 'http://endpoint/v0/clans/%238R9LRVGU/members'
from coc.api import ClashOfClans from os import environ if __name__ == '__main__': api=ClashOfClans(environ['COC_API_KEY']) print api.locations(32000183).get()
def test_location_player_rank_apicall(api_key): coc = ClashOfClans(bearer_token=api_key) r = coc.locations(32000260).rankings.clans.get() assert r.status_code == 200
def test_clan_members_by_tag_apicall(api_key): coc = ClashOfClans(bearer_token=api_key) r = coc.clans('#8R9LRVGU').members.get() assert r.status_code == 200 assert isinstance(r, list)
def test_build_uri_with_parameters(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.clans(name='pupus',minMembers=10) built_uri = build_uri(coc.endpoint, coc.api_version, apicall.uri_parts, apicall.uri_args) assert built_uri == 'http://endpoint/v0/clans?name=pupus&minMembers=10' or built_uri == 'http://endpoint/v0/clans?minMembers=10&name=pupus'
def update_database(clan_tag): """Update the database with the given clan tag.""" # Connect to the database session = connect_to_database() # Get the clan data from the API coc_api = ClashOfClans(app.config['COC_API_KEY']) clan_data = coc_api.clans(clan_tag).get() # Should get a reponse code of 200, otherwise an error # occurred with the API request. if clan_data.status_code != 200: print "Error getting data from API. Aborting..." return try: # Get clan object to be updated clan = session.query(Clan).filter_by(tag=clan_tag).one() clan.name = clan_data['name'] except NoResultFound: # Create a new clan object clan = Clan( name=clan_data['name'], tag=clan_data['tag'], war_win_streak_high=0 ) # Update optional clan data items clan.badge_url_medium = clan_data['badgeUrls']['medium'] clan.badge_url_small = clan_data['badgeUrls']['small'] clan.clan_level = clan_data['clanLevel'] clan.clan_points = clan_data['clanPoints'] clan.num_members = clan_data['members'] clan.war_wins = clan_data['warWins'] clan.war_win_streak = clan_data['warWinStreak'] clan.required_trophies = clan_data['requiredTrophies'] # Update war ties and losses, if the clan has a public war log if clan_data['isWarLogPublic'] is True: clan.war_ties = clan_data['warTies'] clan.war_losses = clan_data['warLosses'] # Update war win streak all time record if clan_data['warWinStreak'] > clan.war_win_streak_high: clan.war_win_streak_high = clan_data['warWinStreak'] # Commit the clan object to the database session.add(clan) session.commit() # Extract the members list data members_data = clan_data['memberList'] # Empty list to store the current member tags for later # comparison with the database. current_member_tags = [] # Loop through the current members of the clan for member_data in members_data: # Create or update member details try: # Get member object to be updated member = (session.query(Member) .filter_by(tag=member_data['tag']).one()) # Check if the member was in another clan at the # time of the last API query. if member.clan_id != clan.id: # Move the member into this clan. member.clan = clan # Update required fields member.name = member_data['name'] member.role = convert_role(member_data['role']) member.exp_level = member_data['expLevel'] member.trophies = member_data['trophies'] except NoResultFound: # Create a new member object with required data now = datetime.datetime.now() member = Member( clan=clan, tag=member_data['tag'], name=member_data['name'], role=convert_role(member_data['role']), exp_level=member_data['expLevel'], trophies=member_data['trophies'], first_tracked_time=now, last_active_time=now ) # Update optional member data member.league_id = member_data['league']['id'] member.league_name = member_data['league']['name'] member.league_icon_tiny = member_data['league']['iconUrls']['tiny'] member.clan_rank = member_data['clanRank'] member.previous_clan_rank = member_data['previousClanRank'] # Add this member to the current member tags list. current_member_tags.append(member_data['tag']) # Update member donations given and received update_member_stats(member, member_data['donations'], False) update_member_stats(member, member_data['donationsReceived'], True) # Commit the member object to the database session.add(member) session.commit() # Check if any members have left the clan. If so, move them to the Null Clan previous_member_tags = session.query(Member.tag).filter_by(clan=clan).all() previous_member_tags = set([tag for (tag,) in previous_member_tags]) current_member_tags = set(current_member_tags) # Use sets to see who was previously in the clan and now is not. left_member_tags = list(previous_member_tags.difference( current_member_tags)) # Move the missing members into the Null Clan null_clan = session.query(Clan).filter_by(tag='#NULL').one() for tag in left_member_tags: left_member = session.query(Member).filter_by(tag=tag).one() left_member.clan = null_clan left_member.clan_rank = 0 left_member.previous_clan_rank = 0 session.add(left_member) session.commit() # Close the database session session.close()
def test_build_uri_with_parameters_scape_chars(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.clans(name='you=too',warFrequency='always') built_uri = build_uri(coc.endpoint, coc.api_version, apicall.uri_parts, apicall.uri_args) assert built_uri == 'http://endpoint/v0/clans?name=you%3Dtoo&warFrequency=always' or built_uri == 'http://endpoint/v0/clans?warFrequency=always&name=you%3Dtoo'
def test_leagues_apicall(api_key): coc = ClashOfClans(bearer_token=api_key) r = coc.leagues.get() assert r.status_code == 200 assert isinstance(r, list)
from coc.api import ClashOfClans from os import environ if __name__ == '__main__': api = ClashOfClans(environ['COC_API_KEY']) print api.locations(32000183).get()
def update_database(clan_tag): """Update the database with the given clan tag.""" # Connect to the database session = connect_to_database() # Get the clan data from the API coc_api = ClashOfClans(app.config['COC_API_KEY']) clan_data = coc_api.clans(clan_tag).get() # Should get a reponse code of 200, otherwise an error # occurred with the API request. if clan_data.status_code != 200: print "Error getting data from API. Aborting..." return try: # Get clan object to be updated clan = session.query(Clan).filter_by(tag=clan_tag).one() clan.name = clan_data['name'] except NoResultFound: # Create a new clan object clan = Clan(name=clan_data['name'], tag=clan_data['tag'], war_win_streak_high=0) # Update optional clan data items clan.badge_url_medium = clan_data['badgeUrls']['medium'] clan.badge_url_small = clan_data['badgeUrls']['small'] clan.clan_level = clan_data['clanLevel'] clan.clan_points = clan_data['clanPoints'] clan.num_members = clan_data['members'] clan.war_wins = clan_data['warWins'] clan.war_win_streak = clan_data['warWinStreak'] clan.required_trophies = clan_data['requiredTrophies'] # Update war ties and losses, if the clan has a public war log if clan_data['isWarLogPublic'] is True: clan.war_ties = clan_data['warTies'] clan.war_losses = clan_data['warLosses'] # Update war win streak all time record if clan_data['warWinStreak'] > clan.war_win_streak_high: clan.war_win_streak_high = clan_data['warWinStreak'] # Commit the clan object to the database session.add(clan) session.commit() # Extract the members list data members_data = clan_data['memberList'] # Empty list to store the current member tags for later # comparison with the database. current_member_tags = [] # Loop through the current members of the clan for member_data in members_data: # Create or update member details try: # Get member object to be updated member = (session.query(Member).filter_by( tag=member_data['tag']).one()) # Check if the member was in another clan at the # time of the last API query. if member.clan_id != clan.id: # Move the member into this clan. member.clan = clan # Update required fields member.name = member_data['name'] member.role = convert_role(member_data['role']) member.exp_level = member_data['expLevel'] member.trophies = member_data['trophies'] except NoResultFound: # Create a new member object with required data now = datetime.datetime.now() member = Member(clan=clan, tag=member_data['tag'], name=member_data['name'], role=convert_role(member_data['role']), exp_level=member_data['expLevel'], trophies=member_data['trophies'], first_tracked_time=now, last_active_time=now) # Update optional member data member.league_id = member_data['league']['id'] member.league_name = member_data['league']['name'] member.league_icon_tiny = member_data['league']['iconUrls']['tiny'] member.clan_rank = member_data['clanRank'] member.previous_clan_rank = member_data['previousClanRank'] # Add this member to the current member tags list. current_member_tags.append(member_data['tag']) # Update member donations given and received update_member_stats(member, member_data['donations'], False) update_member_stats(member, member_data['donationsReceived'], True) # Commit the member object to the database session.add(member) session.commit() # Check if any members have left the clan. If so, move them to the Null Clan previous_member_tags = session.query(Member.tag).filter_by(clan=clan).all() previous_member_tags = set([tag for (tag, ) in previous_member_tags]) current_member_tags = set(current_member_tags) # Use sets to see who was previously in the clan and now is not. left_member_tags = list( previous_member_tags.difference(current_member_tags)) # Move the missing members into the Null Clan null_clan = session.query(Clan).filter_by(tag='#NULL').one() for tag in left_member_tags: left_member = session.query(Member).filter_by(tag=tag).one() left_member.clan = null_clan left_member.clan_rank = 0 left_member.previous_clan_rank = 0 session.add(left_member) session.commit() # Close the database session session.close()
def test_location_by_id_apicall_url(): coc = ClashOfClans(bearer_token="fake_key", endpoint="http://endpoint", api_version="v0") apicall = coc.locations(123) assert 'locations' in apicall.uri_parts assert 123 in apicall.uri_parts assert len(apicall.uri_parts) == 2