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
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)
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)
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))
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)