Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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'
Пример #5
0
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'
Пример #6
0
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'
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
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'
Пример #10
0
from coc.api import ClashOfClans
from os import environ


if __name__ == '__main__':
    api=ClashOfClans(environ['COC_API_KEY'])
    print api.locations(32000183).get()
Пример #11
0
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
Пример #12
0
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)
Пример #13
0
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()
Пример #15
0
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' 
Пример #16
0
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)
Пример #17
0
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
Пример #18
0
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)
Пример #19
0
from coc.api import ClashOfClans
from os import environ

if __name__ == '__main__':
    api = ClashOfClans(environ['COC_API_KEY'])
    print api.locations(32000183).get()
Пример #20
0
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()
Пример #21
0
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