Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 51 additions & 40 deletions espn_api/football/box_player.py
Original file line number Diff line number Diff line change
@@ -1,40 +1,51 @@
from .constant import POSITION_MAP, PRO_TEAM_MAP, PLAYER_STATS_MAP
from .player import Player
from datetime import datetime, timedelta


class BoxPlayer(Player):
'''player with extra data from a matchup'''
def __init__(self, data, pro_schedule, positional_rankings, week, year):
super(BoxPlayer, self).__init__(data, year)
self.slot_position = 'FA'
self.pro_opponent = "None" # professional team playing against
self.pro_pos_rank = 0 # rank of professional team against player position
self.game_played = 100 # 0-100 for percent of game played
self.on_bye_week = False

if 'lineupSlotId' in data:
self.slot_position = POSITION_MAP[data['lineupSlotId']]

player = data['playerPoolEntry']['player'] if 'playerPoolEntry' in data else data['player']
if player['proTeamId'] in pro_schedule:
(opp_id, date) = pro_schedule[player['proTeamId']]
self.game_date = datetime.fromtimestamp(date/1000.0)
self.game_played = 100 if datetime.now() > self.game_date + timedelta(hours=3) else 0
posId = str(player['defaultPositionId'])
if posId in positional_rankings:
self.pro_opponent = PRO_TEAM_MAP[opp_id]
self.pro_pos_rank = positional_rankings[posId][str(opp_id)] if str(opp_id) in positional_rankings[posId] else 0
else: # bye week
self.on_bye_week = True

stats = self.stats.get(week, {})
self.points = stats.get('points', 0)
self.breakdown = stats.get('breakdown', {})
self.points_breakdown = stats.get('points_breakdown', {})
self.projected_points = stats.get('projected_points', 0)
self.projected_breakdown = stats.get('projected_breakdown', {})
self.projected_points_breakdown = stats.get('projected_points_breakdown', {})

def __repr__(self):
return f'Player({self.name}, points:{self.points}, projected:{self.projected_points})'
from .constant import POSITION_MAP, PRO_TEAM_MAP, PLAYER_STATS_MAP
from .player import Player
from datetime import datetime, timedelta


class BoxPlayer(Player):
'''player with extra data from a matchup'''
def __init__(self, data, pro_schedule, positional_rankings, week, year):
super(BoxPlayer, self).__init__(data, year)
self.slot_position = 'FA'
self.pro_opponent = "None" # professional team playing against
self.pro_pos_rank = 0 # rank of professional team against player position
self.game_played = 100 # 0-100 for percent of game played
self.on_bye_week = False

if 'lineupSlotId' in data:
self.slot_position = POSITION_MAP[data['lineupSlotId']]

player = data['playerPoolEntry']['player'] if 'playerPoolEntry' in data else data['player']
if player['proTeamId'] in pro_schedule:
(opp_id, date) = pro_schedule[player['proTeamId']]
self.game_date = datetime.fromtimestamp(date/1000.0)
self.game_played = 100 if datetime.now() > self.game_date + timedelta(hours=3) else 0
posId = str(player['defaultPositionId'])
if posId in positional_rankings:
self.pro_opponent = PRO_TEAM_MAP[opp_id]
self.pro_pos_rank = positional_rankings[posId][str(opp_id)] if str(opp_id) in positional_rankings[posId] else 0
else: # bye week
self.on_bye_week = True

stats = self.stats.get(week, {})
self.points = stats.get('points', 0)
self.breakdown = stats.get('breakdown', {})
self.points_breakdown = stats.get('points_breakdown', {})
self.projected_points = stats.get('projected_points', 0)
self.projected_breakdown = stats.get('projected_breakdown', {})
self.projected_points_breakdown = stats.get('projected_points_breakdown', {})

# Backup projected_points extraction from raw data if not available from stats
if self.projected_points == 0:
player_pool_entry = data.get('playerPoolEntry', {})
player_stats = player_pool_entry.get('stats', [])
for stats in player_stats:
if stats.get('seasonId') != year or stats.get('statSplitTypeId') == 2:
continue
if stats.get('statSourceId') == 0:
self.projected_points = stats.get('appliedTotal', 0)
break

def __repr__(self):
return f'Player({self.name}, points:{self.points}, projected:{self.projected_points})'