From cc82818bada7bda0e12fb10688943fbb46103bd2 Mon Sep 17 00:00:00 2001 From: Christian Wendt Date: Mon, 2 Oct 2023 15:06:42 +0000 Subject: [PATCH 1/3] Fix Team Data Change --- .devcontainer/Dockerfile | 2 +- .devcontainer/devcontainer.json | 2 +- espn_api/base_league.py | 10 +--------- espn_api/baseball/team.py | 12 +++++------- espn_api/basketball/team.py | 11 +++++------ espn_api/football/team.py | 10 +++------- espn_api/hockey/__init__.py | 1 - espn_api/hockey/member.py | 9 --------- espn_api/hockey/team.py | 10 +++++----- espn_api/wbasketball/team.py | 9 +++++---- tests/hockey/unit/test_team.py | 4 ++-- 11 files changed, 28 insertions(+), 52 deletions(-) delete mode 100644 espn_api/hockey/member.py diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3ce9eef6..cb1b1369 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,7 +1,7 @@ # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.233.0/containers/python-3/.devcontainer/base.Dockerfile # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster -ARG VARIANT="3.6-bullseye" +ARG VARIANT="3.8-bullseye" FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} # [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4fc59a3f..6891fe05 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -9,7 +9,7 @@ // Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6 // Append -bullseye or -buster to pin to an OS version. // Use -bullseye variants on local on arm64/Apple Silicon. - "VARIANT": "3.6-bullseye", + "VARIANT": "3.8-bullseye", // Options "NODE_VERSION": "none" } diff --git a/espn_api/base_league.py b/espn_api/base_league.py index 64767433..241fe115 100644 --- a/espn_api/base_league.py +++ b/espn_api/base_league.py @@ -44,7 +44,6 @@ def _fetch_teams(self, data, TeamClass, pro_schedule = None): '''Fetch teams in league''' self.teams = [] teams = data['teams'] - members = data['members'] schedule = data['schedule'] seasonId = data['seasonId'] @@ -53,15 +52,8 @@ def _fetch_teams(self, data, TeamClass, pro_schedule = None): team_roster[team['id']] = team.get('roster', {}) for team in teams: - for member in members: - # For league that is not full the team will not have a owner field - if 'owners' not in team or not team['owners']: - member = None - break - elif member['id'] == team['owners'][0]: - break roster = team_roster[team['id']] - self.teams.append(TeamClass(team, roster=roster, member=member, schedule=schedule, year=seasonId, pro_schedule=pro_schedule)) + self.teams.append(TeamClass(team, roster=roster, schedule=schedule, year=seasonId, pro_schedule=pro_schedule)) # sort by team ID self.teams = sorted(self.teams, key=lambda x: x.team_id, reverse=False) diff --git a/espn_api/baseball/team.py b/espn_api/baseball/team.py index fc7e7901..6fae0e75 100644 --- a/espn_api/baseball/team.py +++ b/espn_api/baseball/team.py @@ -5,25 +5,23 @@ class Team(object): '''Teams are part of the league''' - def __init__(self, data, member, roster, schedule, year, **kwargs): + def __init__(self, data, roster, schedule, year, **kwargs): self.team_id = data['id'] self.team_abbrev = data['abbrev'] - self.team_name = "%s %s" % (data['location'], data['nickname']) + if year < 2023: + self.team_name = "%s %s" % (data.get('location', 'Unknown'), data.get('nickname', 'Unknown')) + else: + self.team_name = data.get('name', 'Unknown') self.division_id = data['divisionId'] self.division_name = '' # set by caller self.wins = data['record']['overall']['wins'] self.losses = data['record']['overall']['losses'] self.ties = data['record']['overall']['ties'] - self.owner = 'None' self.logo_url = '' self.standing = data['playoffSeed'] self.final_standing = data['rankCalculatedFinal'] self.roster = [] self.schedule = [] - - if member: - self.owner = "%s %s" % (member['firstName'], - member['lastName']) if 'logo' in data: self.logo_url = data['logo'] diff --git a/espn_api/basketball/team.py b/espn_api/basketball/team.py index 313165f0..1523ff6b 100644 --- a/espn_api/basketball/team.py +++ b/espn_api/basketball/team.py @@ -1,20 +1,21 @@ -import pdb from .player import Player from .matchup import Matchup from .constant import STATS_MAP class Team(object): '''Teams are part of the league''' - def __init__(self, data, member, roster, schedule, year, **kwargs): + def __init__(self, data, roster, schedule, year, **kwargs): self.team_id = data['id'] self.team_abbrev = data['abbrev'] - self.team_name = "%s %s" % (data['location'], data['nickname']) + if year < 2023: + self.team_name = "%s %s" % (data.get('location', 'Unknown'), data.get('nickname', 'Unknown')) + else: + self.team_name = data.get('name', 'Unknown') self.division_id = data['divisionId'] self.division_name = '' # set by caller self.wins = data['record']['overall']['wins'] self.losses = data['record']['overall']['losses'] self.ties = data['record']['overall']['ties'] - self.owner = 'None' self.logo_url = '' self.stats = None self.standing = data['playoffSeed'] @@ -24,8 +25,6 @@ def __init__(self, data, member, roster, schedule, year, **kwargs): if 'valuesByStat' in data: self.stats = {STATS_MAP.get(i, i): j for i, j in data['valuesByStat'].items()} - if member: - self.owner = f"{member['firstName']} {member['lastName']}" if 'logo' in data: self.logo_url = data['logo'] diff --git a/espn_api/football/team.py b/espn_api/football/team.py index e32378ef..d4b945bf 100644 --- a/espn_api/football/team.py +++ b/espn_api/football/team.py @@ -2,13 +2,13 @@ class Team(object): '''Teams are part of the league''' - def __init__(self, data, roster, member, schedule, year, **kwargs): + def __init__(self, data, roster, schedule, year, **kwargs): self.team_id = data['id'] self.team_abbrev = data['abbrev'] if year < 2023: - self.team_name = "%s %s" % (data['location'], data['nickname']) + self.team_name = "%s %s" % (data.get('location', 'Unknown'), data.get('nickname', 'Unknown')) else: - self.team_name = data['name'] + self.team_name = data.get('name', 'Unknown') self.division_id = data['divisionId'] self.division_name = '' # set by caller self.wins = data['record']['overall']['wins'] @@ -22,10 +22,6 @@ def __init__(self, data, roster, member, schedule, year, **kwargs): self.trades = data.get('transactionCounter', {}).get('trades', 0) self.playoff_pct = data.get('currentSimulationResults', {}).get('playoffPct', 0) * 100 self.draft_projected_rank = data.get('draftDayProjectedRank', 0) - self.owner = 'None' - if member: - self.owner = "%s %s" % (member['firstName'], - member['lastName']) self.streak_length = data['record']['overall']['streakLength'] self.streak_type = data['record']['overall']['streakType'] self.standing = data['playoffSeed'] diff --git a/espn_api/hockey/__init__.py b/espn_api/hockey/__init__.py index 8680d062..74026ae2 100644 --- a/espn_api/hockey/__init__.py +++ b/espn_api/hockey/__init__.py @@ -8,7 +8,6 @@ ] from .league import League -from .member import Member from .player import Player from .record import Record from .team import Team diff --git a/espn_api/hockey/member.py b/espn_api/hockey/member.py deleted file mode 100644 index c9f32e34..00000000 --- a/espn_api/hockey/member.py +++ /dev/null @@ -1,9 +0,0 @@ -class Member(object): - - def __init__(self, data): - self.id = data['id'] - self.display_name = data['displayName'] - self.first_name = data['firstName'] - self.last_name = data['lastName'] - self.full_name = self.first_name + ' ' + self.last_name - diff --git a/espn_api/hockey/team.py b/espn_api/hockey/team.py index 90a06dc6..81dcd348 100644 --- a/espn_api/hockey/team.py +++ b/espn_api/hockey/team.py @@ -6,10 +6,13 @@ class Team(object): '''Teams are part of the league''' - def __init__(self, data, member, roster, schedule, year, **kwargs): + def __init__(self, data, roster, schedule, year, **kwargs): self.team_id = data['id'] self.team_abbrev = data['abbrev'] - self.team_name = "%s %s" % (data['location'], data['nickname']) + if year < 2023: + self.team_name = "%s %s" % (data.get('location', 'Unknown'), data.get('nickname', 'Unknown')) + else: + self.team_name = data.get('name', 'Unknown') self.division_id = data['divisionId'] self.division_name = '' # set by caller self.wins = data['record']['overall']['wins'] @@ -26,9 +29,6 @@ def __init__(self, data, member, roster, schedule, year, **kwargs): if 'valuesByStat' in data: self.stats = {STATS_MAP[i]: j for i, j in data['valuesByStat'].items()} - if member: - self.owner = "%s %s" % (member['firstName'], - member['lastName']) if 'logo' in data: self.logo_url = data['logo'] diff --git a/espn_api/wbasketball/team.py b/espn_api/wbasketball/team.py index 801e2449..0c0edcba 100644 --- a/espn_api/wbasketball/team.py +++ b/espn_api/wbasketball/team.py @@ -4,10 +4,13 @@ class Team(object): '''Teams are part of the league''' - def __init__(self, data, member, roster, schedule, year, **kwargs): + def __init__(self, data, roster, schedule, year, **kwargs): self.team_id = data['id'] self.team_abbrev = data['abbrev'] - self.team_name = "%s %s" % (data['location'], data['nickname']) + if year < 2023: + self.team_name = "%s %s" % (data.get('location', 'Unknown'), data.get('nickname', 'Unknown')) + else: + self.team_name = data.get('name', 'Unknown') self.division_id = data['divisionId'] self.division_name = '' # set by caller self.wins = data['record']['overall']['wins'] @@ -23,8 +26,6 @@ def __init__(self, data, member, roster, schedule, year, **kwargs): if 'valuesByStat' in data: self.stats = {STATS_MAP[i]: j for i, j in data['valuesByStat'].items()} - if member: - self.owner = f"{member['firstName']} {member['lastName']}" if 'logo' in data: self.logo_url = data['logo'] diff --git a/tests/hockey/unit/test_team.py b/tests/hockey/unit/test_team.py index 4767a635..4cbca89e 100644 --- a/tests/hockey/unit/test_team.py +++ b/tests/hockey/unit/test_team.py @@ -17,11 +17,11 @@ def setUp(self) -> None: self.team_roster = self.team['roster'] def test_team(self): - team = Team(self.team, roster= self.team_roster, member= None, schedule= self.schedule, year= self.year) + team = Team(self.team, roster= self.team_roster, schedule= self.schedule, year= self.year) self.assertEqual(team.team_abbrev, 'ESPC') def test_team_roster_df(self): - team = Team(self.team, roster= self.team_roster, member= None, schedule= self.schedule, year= self.year) + team = Team(self.team, roster= self.team_roster, schedule= self.schedule, year= self.year) self.assertEqual(len(team.roster), 25) self.assertEqual(team.roster[0].name, 'Thomas Chabot') From 91d829079bd9aae0b83a6c26ede7ba484690f43a Mon Sep 17 00:00:00 2001 From: Christian Wendt Date: Mon, 2 Oct 2023 15:16:02 +0000 Subject: [PATCH 2/3] fix fb pick and hockey unit test --- espn_api/football/pick.py | 2 +- tests/hockey/unit/test_team.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/espn_api/football/pick.py b/espn_api/football/pick.py index b679cb62..10893259 100644 --- a/espn_api/football/pick.py +++ b/espn_api/football/pick.py @@ -15,4 +15,4 @@ def __repr__(self): return 'Pick(%s, %s)' % (self.playerName, self.team) def auction_repr(self): - return ', '.join(map(str, [self.team.owner, self.playerId, self.playerName, self.bid_amount, self.keeper_status])) + return ', '.join(map(str, [self.team, self.playerId, self.playerName, self.bid_amount, self.keeper_status])) diff --git a/tests/hockey/unit/test_team.py b/tests/hockey/unit/test_team.py index 4cbca89e..e03e0a35 100644 --- a/tests/hockey/unit/test_team.py +++ b/tests/hockey/unit/test_team.py @@ -11,7 +11,7 @@ def setUp(self) -> None: self.teams = self.data['teams'] self.schedule = self.data['schedule'] self.seasonId = self.data['seasonId'] - self.year = '2020' + self.year = 2020 self.team = self.data['teams'][3] self.team_roster = self.team['roster'] From adc35f2f7e6596bb26adab1bbb0fd253f50bedef Mon Sep 17 00:00:00 2001 From: Christian Wendt Date: Mon, 2 Oct 2023 15:21:25 +0000 Subject: [PATCH 3/3] fix pick unit test --- tests/football/unit/test_league.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/football/unit/test_league.py b/tests/football/unit/test_league.py index 896f4798..f3563bf8 100644 --- a/tests/football/unit/test_league.py +++ b/tests/football/unit/test_league.py @@ -178,7 +178,7 @@ def test_draft(self, m): self.assertEqual(repr(first_pick), 'Pick(Le\'Veon Bell, Team(Rollin\' With Mahomies))') self.assertEqual(third_pick.round_num, 1) self.assertEqual(third_pick.round_pick, 3) - self.assertEqual(third_pick.auction_repr(), 'T M, 13934, Antonio Brown, 0, False') + self.assertEqual(third_pick.auction_repr(), 'Team(Goin\' HAM Newton), 13934, Antonio Brown, 0, False') # TODO need to get data for most recent season # @requests_mock.Mocker()