示例#1
0
def test_get_arena_league_from_name():
    # The below isn't comprehensive, nor specific. As the league makeup
    # are likely to change from time to time, no reason to update the
    # tests every time that happens.
    assert leagueinfo.get_arena_league_from_name('Arena 1')['id'] == 'arena-1'
    assert leagueinfo.get_arena_league_from_name(
        'Legendary Arena')['id'] == 'challenger-1'
    assert leagueinfo.get_arena_league_from_name(
        'Garbage League (obviously fake)')['id'] == 'arena-unknown'
def process_members(config, clan, warlog, current_war, member_history):
    """ Process member list, adding calculated meta-data for rendering of
    status in the clan member table. """

    # calculate the number of days since the donation last sunday, for
    # donation tracking purposes:
    now = datetime.utcnow()
    days_from_donation_reset = now.isoweekday()
    if days_from_donation_reset > 7 or days_from_donation_reset <= 0:
        days_from_donation_reset = 1

    # grab importent fields from member list for dashboard
    members = clan['memberList'].copy()
    members_processed = []
    for member_src in members:
        member = enrich_member_with_history(config, member_src,
                                            member_history['members'],
                                            days_from_donation_reset, now)

        # get special statuses.
        # vacation = member is on vacation. Don't reccomend demote or kick, dont show score
        # safe = member marked as safe. Don't reccomend demote or kick
        # blacklist = member on blacklist. Recommend kick immediately.
        member['vacation'] = member['tag'] in config['members']['vacation']
        member['safe'] = member['tag'] in config['members']['safe']
        member['no_promote'] = member['tag'] in config['members']['no_promote']
        member['blacklist'] = member['tag'] in config['members']['blacklist']

        # Automatically add inactive 'safe' members to vacation
        if member['safe'] and (member['days_inactive'] >=
                               config['activity']['threshold_warn']):
            member['vacation'] = True

        # get member warlog and add it to the record
        member['currentWar'] = member_war(config, member, current_war)
        member['warlog'] = member_warlog(config, member, warlog)

        member['donationScore'] = donations_score(config, member)

        # calculate score based on war participation
        member['warScore'] = 0
        for war in member['warlog']:
            member['warScore'] += war['score']

        # get member score
        member['score'] = member['warScore'] + member['donationScore']

        # calculate the number of daily donations, and the donation status
        # based on threshold set in config
        member['donationStatus'] = calc_donation_status(
            config, member['donationScore'], member['donationsDaily'],
            days_from_donation_reset)

        member['status'] = calc_member_status(config, member['score'],
                                              member['no_promote'])

        member['activity_status'] = calc_activity_status(
            config, member['days_inactive'])

        member['role_label'] = get_role_label(config, member['role'],
                                              member['days_inactive'],
                                              member['activity_status'],
                                              member['vacation'],
                                              member['blacklist'],
                                              member['no_promote'])

        if member['trophies'] >= clan['requiredTrophies']:
            member['trophiesStatus'] = 'normal'
        else:
            member['trophiesStatus'] = 'ok'

        member['arenaLeague'] = leagueinfo.get_arena_league_from_name(
            member['arena']['name'])['id']
        member['arenaLeagueLabel'] = config['strings']['league-' +
                                                       member['arenaLeague']]

        # Figure out whether member is on the leadership team by role
        member['leadership'] = member['role'] == 'leader' or member[
            'role'] == 'coLeader'

        members_processed.append(member)

    return members_processed