コード例 #1
0
ファイル: stats.py プロジェクト: veenaprax/mlbv
def _get_team_person_stats(person_stats_json, team_id, category):
    """Fetches team stats into a dictionary."""
    stats = dict()
    for person_stats in person_stats_json['people']:
        # key: personId
        player_name = person_stats['lastInitName']
        stats[player_name] = dict()
        stats[player_name]['name'] = player_name
        stats[player_name]['player_id'] = person_stats['id']
        stats[player_name]['position'] = person_stats['primaryPosition']['abbreviation']
        if 'stats' not in person_stats:
            continue

        # Pull out stats based on hitting, fielding, pitching
        # They are put into the stats dictionary.
        for person_stat in person_stats['stats']:

            stats_type = person_stat['group']['displayName']

            if stats_type == 'hitting' and (util.substring_match(category, 'all') or util.substring_match(category, 'hitting')):
                for splits in person_stat['splits']:
                    if 'team' in splits and splits['team']['id'] == team_id:
                        split_stats = splits['stat']
                        if split_stats['atBats'] > 0:
                            stats[player_name]['hitting'] = dict()
                            for stat_name in HITTING_STATS_JSON:
                                if stat_name in split_stats:
                                    stats[player_name]['hitting'][stat_name] = str(split_stats[stat_name])
                                else:
                                    stats[player_name]['hitting'][stat_name] = '-'

            elif stats_type == 'fielding' and (util.substring_match(category, 'all') or util.substring_match(category, 'fielding')):
                # note: the splits are per-position
                stats[player_name]['fielding'] = dict()
                for splits in person_stat['splits']:
                    if 'team' in splits and splits['team']['id'] == team_id:
                        position = splits['stat']['position']['abbreviation']
                        stats[player_name]['fielding'][position] = dict()
                        for stat_name in FIELDING_STATS_JSON:
                            if stat_name in splits['stat']:
                                stats[player_name]['fielding'][position][stat_name] = str(splits['stat'][stat_name])
                            else:
                                stats[player_name]['fielding'][position][stat_name] = '-'

            elif stats_type == 'pitching' and (util.substring_match(category, 'all') or util.substring_match(category, 'pitching')):
                stats[player_name]['pitching'] = dict()
                for splits in person_stat['splits']:
                    if 'team' in splits and splits['team']['id'] == team_id:
                        for stat_name in PITCHING_STATS_JSON:
                            if stat_name in splits['stat']:
                                stats[player_name]['pitching'][stat_name] = str(splits['stat'][stat_name])
                            else:
                                stats[player_name]['pitching'][stat_name] = '-'
    return stats
コード例 #2
0
ファイル: stats.py プロジェクト: veenaprax/mlbv
def handle_league_stats(category, qualifier, season, limit, args_filter):
    """Handler for gather/display overal league stats.

    League Format:  league:[category]:[qualifier]
        [category]: one of: hitting, fielding, pitching, all [default: all]
        [qualifier]: all, qualified, rookies [default: qualified]

    Examples: league:hitting:qualified
              league:hitting:rookies
              league:hitting:all
              league:pitching
    """
    if util.substring_match(category, 'all'):
        categories = ['hitting', 'fielding', 'pitching']
    elif util.substring_match(category, 'hitting'):
        categories = ['hitting', ]
    elif util.substring_match(category, 'fielding'):
        categories = ['fielding', ]
    elif util.substring_match(category, 'pitching'):
        categories = ['pitching', ]
    else:
        LOG.error('Invalid category: %s', category)
        return

    if not qualifier:
        qualifier = 'qualified'
    else:
        expanded_qualifier = util.expand_substring_match(qualifier, LEAGUE_PLAYER_POOL_TYPES)
        if not expanded_qualifier:
            LOG.error('Invalid qualifier: %s', qualifier)
            return
        qualifier = expanded_qualifier

    league_id = ''
    if args_filter and args_filter in mlbapidata.LEAGUE_FILTERS:
        league_id = mlbapidata.LEAGUE_ID_MAP[args_filter]

    for catg in categories:
        stats = _get_league_stats(catg, qualifier, season, league_id, limit)
        _display_league_stats(stats, catg, season, limit)
コード例 #3
0
ファイル: stats.py プロジェクト: veenaprax/mlbv
def handle_team_stats(team_abbrev, category, roster_type, season):
    """Fetches and displays team stats.

    Team Format:  <team>:[category]:[qualifier]
        <team>: the team abbreviation
        [category]: one of: hitting, fielding, pitching, all [default: all]
        [qualifier]: the roster type: active, full, 40man

    Examples: tor:hitting:active  # active roster only (default)
              tor:hitting:full    # full season roster
              tor:hitting:40man   # 40-man roster
              tor:pitching
              tor:fielding
    """

    if not roster_type:
        roster_type = 'active'
    else:
        found = False
        for rtype in ROSTER_TYPES:
            if util.substring_match(roster_type, rtype):
                found = True
                roster_type = rtype
                break
        if not found:
            LOG.error('Invalid roster type: %s', roster_type)
            return

    roster_type = ROSTER_TYPES[roster_type]

    if not category:
        category = 'all'

    team_id = mlbapidata.get_team_id(team_abbrev, season)

    roster = _get_roster(team_id, roster_type, season)
    person_ids = ','.join(list(roster))

    # Data
    person_stats_json = _get_person_stats(person_ids, category, roster_type, season)
    stats = _get_team_person_stats(person_stats_json, team_id, category)
    _display_team_stats(stats, category)
コード例 #4
0
ファイル: stats.py プロジェクト: veenaprax/mlbv
def _display_team_stats(stats, category):
    """Presentation of team stats."""
    color_on = ''
    color_off = ''

    outl = list()

    if util.substring_match(category, 'all') or util.substring_match(category, 'hitting'):
        outl.append('HITTING')
        hitting_stats_fmt = ' '.join(HITTING_STATS_FMTS)
        hitting_stats_hdr = hitting_stats_fmt.format(*[hdr for hdr in HITTING_STATS_HEADINGS])
        hitting_fmt = '{coloron}{name:<26}{hitting_stats}{coloroff}'
        outl.append(hitting_fmt.format(coloron=color_on, coloroff=color_off, name='-------', hitting_stats=hitting_stats_hdr))
        for player_name in sorted(list(stats)):
            if 'hitting' in stats[player_name] and stats[player_name]['position'] != 'P':
                hitting_stats = hitting_stats_fmt.format(*[stats[player_name]['hitting'][statval] for statval in HITTING_STATS_JSON])
                outl.append(hitting_fmt.format(coloron=color_on, coloroff=color_off,
                                               name=player_name, hitting_stats=hitting_stats))
        outl.append('')
        outl.append(hitting_fmt.format(coloron=color_on, coloroff=color_off, name='Pitchers:', hitting_stats=hitting_stats_hdr))
        for player_name in sorted(list(stats)):
            if 'hitting' in stats[player_name] and stats[player_name]['position'] == 'P':
                hitting_stats = hitting_stats_fmt.format(*[stats[player_name]['hitting'][statval] for statval in HITTING_STATS_JSON])
                outl.append(hitting_fmt.format(coloron=color_on, coloroff=color_off,
                                               name=player_name, hitting_stats=hitting_stats))
        if category == 'all':
            outl.append('')

    if util.substring_match(category, 'all') or util.substring_match(category, 'fielding'):
        outl.append('FIELDING')
        fielding_stats_fmt = ' '.join(FIELDING_STATS_FMTS)
        fielding_stats_hdr = fielding_stats_fmt.format(*[hdr for hdr in FIELDING_STATS_HEADINGS])
        fielding_fmt = '{coloron}{name:<26}{pos:>3}{fielding_stats}{coloroff}'
        outl.append(fielding_fmt.format(coloron=color_on, coloroff=color_off,
                                        name='--------', pos='POS', fielding_stats=fielding_stats_hdr))
        for player_name in sorted(list(stats)):
            player_name_disp = player_name
            if 'fielding' in stats[player_name] and stats[player_name]['position'] != 'P':
                iter_count = 0
                for position in stats[player_name]['fielding']:
                    iter_count += 1
                    fielding_stats = fielding_stats_fmt.format(*[stats[player_name]['fielding'][position][statval]
                                                                 for statval in FIELDING_STATS_JSON])
                    if len(stats[player_name]['fielding']) > 1 and iter_count > 1:
                        player_name_disp = ' -'
                    outl.append(fielding_fmt.format(coloron=color_on, coloroff=color_off,
                                                    name=player_name_disp, pos=position, fielding_stats=fielding_stats))
        outl.append('')
        outl.append(fielding_fmt.format(coloron=color_on, coloroff=color_off,
                                        name='PITCHERS:', pos='POS', fielding_stats=fielding_stats_hdr))
        for player_name in sorted(list(stats)):
            player_name_disp = player_name
            if 'fielding' in stats[player_name] and stats[player_name]['position'] == 'P':
                iter_count = 0
                for position in stats[player_name]['fielding']:
                    iter_count += 1
                    fielding_stats = fielding_stats_fmt.format(
                        *[stats[player_name]['fielding'][position][statval] for statval in FIELDING_STATS_JSON])
                    if len(stats[player_name]['fielding']) > 1 and iter_count > 1:
                        player_name_disp = ''
                    outl.append(fielding_fmt.format(coloron=color_on, coloroff=color_off,
                                                    name=player_name_disp, pos=position, fielding_stats=fielding_stats))
        if category == 'all':
            outl.append('')

    if util.substring_match(category, 'all') or util.substring_match(category, 'pitching'):
        outl.append('PITCHING')
        outl.append('--------')
        pitching_stats_fmt = ' '.join(PITCHING_STATS_FMTS)
        pitching_stats_hdr = pitching_stats_fmt.format(*[hdr for hdr in PITCHING_STATS_HEADINGS])
        pitching_fmt = '{coloron}{name:<26}{pitching_stats}{coloroff}'
        # outl.append(pitching_fmt.format(coloron=color_on, coloroff=color_off, name='--------', pitching_stats=pitching_stats_hdr))
        # outl.append('----- Starting -----')
        # outl.append('STARTING')
        outl.append(pitching_fmt.format(coloron=color_on, coloroff=color_off, name='STARTING:', pitching_stats=pitching_stats_hdr))
        for player_name in sorted(list(stats)):
            if 'pitching' in stats[player_name] and stats[player_name]['position'] == 'P' \
                    and int(stats[player_name]['pitching']['gamesStarted']) > 0:
                pitching_stats = pitching_stats_fmt.format(*[stats[player_name]['pitching'][statval] for statval in PITCHING_STATS_JSON])
                outl.append(pitching_fmt.format(coloron=color_on, coloroff=color_off,
                                                name=player_name, pitching_stats=pitching_stats))
        # outl.append('----- Relief -----')
        # outl.append('BULLPEN')
        outl.append('')
        outl.append(pitching_fmt.format(coloron=color_on, coloroff=color_off, name='BULLPEN:', pitching_stats=pitching_stats_hdr))
        for player_name in sorted(list(stats)):
            if 'pitching' in stats[player_name] and stats[player_name]['position'] == 'P' \
                    and int(stats[player_name]['pitching']['gamesStarted']) < 1:
                pitching_stats = pitching_stats_fmt.format(*[stats[player_name]['pitching'][statval] for statval in PITCHING_STATS_JSON])
                outl.append(pitching_fmt.format(coloron=color_on, coloroff=color_off,
                                                name=player_name, pitching_stats=pitching_stats))
        for player_name in sorted(list(stats)):
            if 'pitching' in stats[player_name] and stats[player_name]['position'] != 'P' and stats[player_name]['pitching']:
                pitching_stats = pitching_stats_fmt.format(*[stats[player_name]['pitching'][statval] for statval in PITCHING_STATS_JSON])
                # pitching_stats = list()
                # # pitching_stats = pitching_stats_fmt.format(*[stats[player_name]['pitching'][statval]
                # for statval in PITCHING_STATS_JSON:
                #     if statval in stats[player_name]['pitching']:
                #         pitching_stats.append(stats[player_name]['pitching'][statval])
                #     else:
                #         print('player: {}, stats: {}'.format(player_name, stats[player_name]))
                #         pitching_stats.append('-')
                # pitching_stats = pitching_stats_fmt.format(pitching_stats)
                outl.append(pitching_fmt.format(coloron=color_on, coloroff=color_off,
                                                name=player_name, pitching_stats=pitching_stats))

    print('\n'.join(outl))
コード例 #5
0
def get_standings(standings_option='all', date_str=None, args_filter=None):
    """Displays standings."""
    LOG.debug('Getting standings for %s, option=%s', date_str, standings_option)
    if date_str == time.strftime("%Y-%m-%d"):
        # strip out date string from url (issue #5)
        date_str = None
    if util.substring_match(standings_option, 'all') or util.substring_match(standings_option, 'division'):
        display_division_standings(date_str, args_filter, rank_tag='divisionRank', header_tags=('league', 'division'))
        if util.substring_match(standings_option, 'all'):
            print('')
    if util.substring_match(standings_option, 'all') or util.substring_match(standings_option, 'wildcard'):
        _display_standings('wildCard', 'Wildcard', date_str, args_filter, rank_tag='wildCardRank', header_tags=('league', ))
        if util.substring_match(standings_option, 'all'):
            print('')
    if util.substring_match(standings_option, 'all') or util.substring_match(standings_option, 'overall') \
            or util.substring_match(standings_option, 'league') or util.substring_match(standings_option, 'conference'):
        _display_standings('byLeague', 'League', date_str, args_filter, rank_tag='leagueRank', header_tags=('league', ))
        if util.substring_match(standings_option, 'all'):
            print('')

    if util.substring_match(standings_option, 'playoff') or util.substring_match(standings_option, 'postseason'):
        _display_standings('postseason', 'Playoffs', date_str, args_filter)
    if util.substring_match(standings_option, 'preseason'):
        _display_standings('preseason', 'Preseason', date_str, args_filter)