diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml
index 7f447d1..46a640b 100644
--- a/.github/workflows/main-build.yml
+++ b/.github/workflows/main-build.yml
@@ -26,6 +26,6 @@ jobs:
run: |
python -m pip install --upgrade pip
make deps
- - name: Run unit tests
+ - name: Run tests
run: |
- make test
+ make test-all
diff --git a/.gitignore b/.gitignore
index 1f00741..6a74b57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -81,9 +81,6 @@ target/
profile_default/
ipython_config.py
-# pyenv
-.python-version
-
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
@@ -130,4 +127,8 @@ dmypy.json
# all files with "_dnm." in them like foo_dnm.py (dnm = do not merge)
*_dnm.*
+*_dnc.*
+
+.DS_Store
+
diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..1445aee
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+3.10.14
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 53bf6f9..13b914b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,11 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
+- Removed all custom modeling
+- Removed all enums
+- All functions are available via import from `sleeper.api`
- Replaced kwargs with optional, named keyword arguments
+- Updated package requirements
## [1.7.3]
@@ -73,33 +77,18 @@ All notable changes to this project will be documented in this file.
### Initial Release
[Unreleased]: https://github.com/joeyagreco/sleeper/compare/v1.7.3...HEAD
-
[1.7.3]: https://github.com/joeyagreco/sleeper/releases/tag/v1.7.3
-
[1.7.2]: https://github.com/joeyagreco/sleeper/releases/tag/v1.7.2
-
[1.7.1]: https://github.com/joeyagreco/sleeper/releases/tag/v1.7.1
-
[1.7.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.7.0
-
[1.6.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.6.0
-
[1.5.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.5.0
-
[1.4.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.4.0
-
[1.3.4]: https://github.com/joeyagreco/sleeper/releases/tag/v1.3.4
-
[1.3.3]: https://github.com/joeyagreco/sleeper/releases/tag/v1.3.3
-
[1.3.1]: https://github.com/joeyagreco/sleeper/releases/tag/v1.3.1
-
[1.3.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.3.0
-
[1.2.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.2.0
-
[1.1.1]: https://github.com/joeyagreco/sleeper/releases/tag/v1.1.1
-
[1.0.1]: https://github.com/joeyagreco/sleeper/releases/tag/v1.0.1
-
[1.0.0]: https://github.com/joeyagreco/sleeper/releases/tag/v1.0.0
diff --git a/MANIFEST.in b/MANIFEST.in
index a44dcd6..f9bd145 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,2 +1 @@
-include sleeper/app.properties
-include requirements.txt
\ No newline at end of file
+include requirements.txt
diff --git a/Makefile b/Makefile
index 172aca0..8bd1e90 100644
--- a/Makefile
+++ b/Makefile
@@ -1,38 +1,43 @@
+PYTEST_ARGS=
+
.PHONY: deps
deps:
- @python3 -m pip install -r requirements.dev.txt
- @python3 -m pip install -r requirements.txt
+ @python -m pip install -r requirements.dev.txt
+ @python -m pip install -r requirements.txt
.PHONY: fmt
fmt:
- @black --config=pyproject.toml .
- @autoflake --config=pyproject.toml .
- @isort .
+ @ruff check --fix
+ @ruff format
.PHONY: fmt-check
fmt-check:
- @black --config=pyproject.toml --check .
- @autoflake --config=pyproject.toml --check .
- @isort --check-only .
+ @ruff check
+ @ruff format --check
+
+.PHONY: test-all
+test-all:
+ @make test-unit $(PYTEST_ARGS)
+ @make test-integration $(PYTEST_ARGS)
-.PHONY: test
-test:
- @pytest test/
+.PHONY: test-unit
+test-unit:
+ @pytest test/unit $(PYTEST_ARGS)
-.PHONY: up-reqs
-up-reqs:
- @pipreqs --force --mode no-pin
+.PHONY: test-integration
+test-integration:
+ @pytest test/integration $(PYTEST_ARGS)
.PHONY: pkg-build
pkg-build:
@rm -rf build
@rm -rf dist
- @python3 setup.py sdist bdist_wheel
+ @python setup.py sdist bdist_wheel
.PHONY: pkg-test
-pkg-test:
- @python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
+pkg-test: pkg-build
+ @python -m twine upload --repository testpypi dist/*
.PHONY: pkg-prod
-pkg-prod:
- @python3 -m twine upload dist/*
+pkg-prod: pkg-build
+ @python -m twine upload dist/*
diff --git a/README.md b/README.md
index 83b4070..61b0eb0 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
A Python wrapper for the Sleeper API.
diff --git a/example/avatar_example.py b/example/avatar_example.py
index 67dd369..975d36e 100644
--- a/example/avatar_example.py
+++ b/example/avatar_example.py
@@ -1,12 +1,18 @@
-from sleeper.api import AvatarAPIClient
+from sleeper.api import get_avatar
if __name__ == "__main__":
- # get avatar by ID and save locally
- AvatarAPIClient.get_avatar(
- avatar_id="my_avatar_id", save_to_path="C:\\Desktop\\avatar\\my_avatar.png"
- )
+ # get avatar by ID
+ avatar_bytes = get_avatar(avatar_id="my_avatar_id")
+
+ # save locally
+ with open(
+ "my_avatar.png",
+ "wb",
+ ) as file:
+ file.write(avatar_bytes)
# can pass in the "thumbnail" parameter to get a smaller-sized avatar
- AvatarAPIClient.get_avatar(
- avatar_id="my_avatar_id", save_to_path="C:\\Desktop\\avatar\\my_avatar.png", thumbnail=True
+ get_avatar(
+ avatar_id="my_avatar_id",
+ as_thumbnail=True,
)
diff --git a/example/draft_example.py b/example/draft_example.py
index 635d0a6..9fec9f7 100644
--- a/example/draft_example.py
+++ b/example/draft_example.py
@@ -1,25 +1,25 @@
-from sleeper.api import DraftAPIClient
-from sleeper.enum import Sport
-from sleeper.model import Draft, DraftPick, PlayerDraftPick
+from sleeper.api import (
+ get_draft,
+ get_drafts_in_league,
+ get_player_draft_picks,
+ get_traded_draft_picks,
+ get_user_drafts_for_year,
+)
if __name__ == "__main__":
- # get all drafts that a user was in for a particular year
- user_drafts: list[Draft] = DraftAPIClient.get_user_drafts_for_year(
- user_id="my_user_id", sport=Sport.NFL, year="2020"
- )
+ # get all drafts that a user was in for a year
+ user_drafts = get_user_drafts_for_year(user_id="my_user_id", sport="nfl", year=2020)
- # get all drafts for a particular league
- league_drafts: list[Draft] = DraftAPIClient.get_drafts_in_league(league_id="my_league_id")
+ # get all drafts for a league
+ league_drafts = get_drafts_in_league(league_id="my_league_id")
# get a draft by its ID
- draft: Draft = DraftAPIClient.get_draft(draft_id="my_draft_id")
+ draft = get_draft(draft_id="my_draft_id")
- # get all draft picks for a particular draft
- draft_picks: list[PlayerDraftPick] = DraftAPIClient.get_player_draft_picks(
- draft_id="my_draft_id", sport=Sport.NFL
+ # get all draft picks for a draft
+ draft_picks = get_player_draft_picks(
+ draft_id="my_draft_id",
)
- # get all traded draft picks for a particular draft
- traded_draft_picks: list[DraftPick] = DraftAPIClient.get_traded_draft_picks(
- draft_id="my_draft_id"
- )
+ # get all traded draft picks for a draft
+ traded_draft_picks = get_traded_draft_picks(draft_id="my_draft_id")
diff --git a/example/league_example.py b/example/league_example.py
index a9d4f6e..0df9df2 100644
--- a/example/league_example.py
+++ b/example/league_example.py
@@ -1,53 +1,45 @@
-from sleeper.api import LeagueAPIClient
-from sleeper.enum import Sport
-from sleeper.model import (
- League,
- Matchup,
- PlayoffMatchup,
- Roster,
- SportState,
- TradedPick,
- Transaction,
- User,
+from sleeper.api import (
+ get_league,
+ get_losers_bracket,
+ get_matchups_for_week,
+ get_rosters,
+ get_sport_state,
+ get_traded_picks,
+ get_transactions,
+ get_user_leagues_for_year,
+ get_users_in_league,
+ get_winners_bracket,
)
if __name__ == "__main__":
# get a league by its ID
- league: League = LeagueAPIClient.get_league(league_id="my_league_id")
+ league = get_league(league_id="my_league_id")
- # get all leagues for a user by its ID in a particular year
- user_leagues: list[League] = LeagueAPIClient.get_user_leagues_for_year(
- user_id="my_user_id", sport=Sport.NFL, year="2020"
+ # get all leagues for a user by its ID in a year
+ user_leagues = get_user_leagues_for_year(
+ user_id="my_user_id", sport="nfl", year=2023
)
- # get all rosters in a particular league
- league_rosters: list[Roster] = LeagueAPIClient.get_rosters(league_id="my_league_id")
+ # get all rosters in a league
+ league_rosters = get_rosters(league_id="my_league_id")
- # get all users in a particular league
- league_users: list[User] = LeagueAPIClient.get_users_in_league(league_id="my_league_id")
+ # get all users in a league
+ league_users = get_users_in_league(league_id="my_league_id")
- # get all matchups in a week for a particular league
- week_1_matchups: list[Matchup] = LeagueAPIClient.get_matchups_for_week(
- league_id="my_league_id", week=1
- )
+ # get all matchups in a week for a league
+ week_1_matchups = get_matchups_for_week(league_id="my_league_id", week=1)
- # get the winners bracket for a particular league
- winners_bracket: list[PlayoffMatchup] = LeagueAPIClient.get_winners_bracket(
- league_id="my_league_id"
- )
+ # get the winners bracket for a league
+ winners_bracket = get_winners_bracket(league_id="my_league_id")
- # get the losers bracket for a particular league
- losers_bracket: list[PlayoffMatchup] = LeagueAPIClient.get_losers_bracket(
- league_id="my_league_id"
- )
+ # get the losers bracket for a league
+ losers_bracket = get_losers_bracket(league_id="my_league_id")
- # get all transactions in a week for a particular league
- week_1_transactions: list[Transaction] = LeagueAPIClient.get_transactions(
- league_id="my_league_id", week=1
- )
+ # get all transactions in a week for a league
+ week_1_transactions = get_transactions(league_id="my_league_id", week=1)
- # get all traded picks for a particular league
- traded_picks: list[TradedPick] = LeagueAPIClient.get_traded_picks(league_id="my_league_id")
+ # get all traded picks for a league
+ traded_picks = get_traded_picks(league_id="my_league_id")
- # get the state of a particular sport
- nfl_state: SportState = LeagueAPIClient.get_sport_state(sport=Sport.NFL)
+ # get the state of a sport
+ nfl_state = get_sport_state(sport="nfl")
diff --git a/example/player_example.py b/example/player_example.py
index 788281b..14ad862 100644
--- a/example/player_example.py
+++ b/example/player_example.py
@@ -1,17 +1,11 @@
-from sleeper.api import PlayerAPIClient
-from sleeper.enum import Sport, TrendType
-from sleeper.model import Player, PlayerTrend
+from sleeper.api import get_all_players, get_trending_players
if __name__ == "__main__":
- # get all players in a particular sport
- nfl_players: dict[str, Player] = PlayerAPIClient.get_all_players(sport=Sport.NFL)
+ # get all players in a sport
+ nfl_players = get_all_players(sport="nfl")
- # get all trending players that were added for a particular sport
- nfl_added_trending_players: list[PlayerTrend] = PlayerAPIClient.get_trending_players(
- sport=Sport.NFL, trend_type=TrendType.ADD
- )
+ # get players that are trending up in a sport
+ nfl_trending_up_players = get_trending_players(sport="nfl", trend_type="add")
- # get all trending players that were dropped for a particular sport
- nfl_dropped_trending_players: list[PlayerTrend] = PlayerAPIClient.get_trending_players(
- sport=Sport.NFL, trend_type=TrendType.DROP
- )
+ # get players that are trending down in a sport
+ nfl_trending_down_players = get_trending_players(sport="nfl", trend_type="drop")
diff --git a/example/unofficial/player_example.py b/example/unofficial/player_example.py
deleted file mode 100644
index f4bf608..0000000
--- a/example/unofficial/player_example.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from sleeper.api.unofficial import UPlayerAPIClient
-from sleeper.enum import Sport
-from sleeper.enum.nfl import NFLPosition
-from sleeper.model import PlayerStats
-
-if __name__ == "__main__":
- # get player stats for a player for a particular sport, week, and season
- player_stats_week: PlayerStats = UPlayerAPIClient.get_player_stats(
- sport=Sport.NFL, player_id="1234", season="2020", week=1
- )
-
- # get player stats for a player for the entire season in a particular sport and season
- player_stats_season: PlayerStats = UPlayerAPIClient.get_player_stats(
- sport=Sport.NFL, player_id="1234", season="2020"
- )
-
- # get player projections for a player for a particular sport, week, and season
- player_projections_week: PlayerStats = UPlayerAPIClient.get_player_projections(
- sport=Sport.NFL, player_id="1234", season="2020", week=1
- )
-
- # get player projections for a player for the entire season in a particular sport and season
- player_projections_season: PlayerStats = UPlayerAPIClient.get_player_projections(
- sport=Sport.NFL, player_id="1234", season="2020"
- )
-
- # get all player stats for a particular sport, season, and week
- all_player_stats: list[PlayerStats] = UPlayerAPIClient.get_all_player_stats(
- sport=Sport.NFL, season="2020", week=1
- )
-
- # get all player stats for QBs and RBs for a particular sport, season, and week
- all_player_stats_qbs_rbs: list[PlayerStats] = UPlayerAPIClient.get_all_player_stats(
- sport=Sport.NFL, season="2020", week=1, positions=[NFLPosition.QB, NFLPosition.RB]
- )
-
- # get all player projections for a particular sport, season, and week
- all_player_projections: list[PlayerStats] = UPlayerAPIClient.get_all_player_projections(
- sport=Sport.NFL, season="2020", week=1
- )
-
- # get all player projections for QBs and RBs for a particular sport, season, and week
- all_player_projections_qbs_rbs: list[PlayerStats] = UPlayerAPIClient.get_all_player_projections(
- sport=Sport.NFL, season="2020", week=1, positions=[NFLPosition.QB, NFLPosition.RB]
- )
-
- # get a player's headshot and save locally
- # the file path should save to a file that has the extension '.png'
- UPlayerAPIClient.get_player_head_shot(
- sport=Sport.NFL, player_id="1234", save_to_path="C:\\Desktop\\avatar\\my_headshot.png"
- )
diff --git a/example/unofficial/sport_example.py b/example/unofficial/sport_example.py
deleted file mode 100644
index e1b2499..0000000
--- a/example/unofficial/sport_example.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from sleeper.api.unofficial import USportAPIClient
-from sleeper.enum import Sport
-from sleeper.model import Game
-
-if __name__ == "__main__":
- # get regular season schedule for a particular sport and season
- regular_season: list[Game] = USportAPIClient.get_regular_season_schedule(
- sport=Sport.NFL, season="2020"
- )
diff --git a/example/unofficial/team_example.py b/example/unofficial/team_example.py
deleted file mode 100644
index c5b2510..0000000
--- a/example/unofficial/team_example.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from sleeper.api.unofficial import UTeamAPIClient
-from sleeper.enum import Sport
-from sleeper.enum.nfl import NFLTeam
-from sleeper.model import DepthChart
-
-if __name__ == "__main__":
- # get depth chart for a particular sport and team
- depth_chart: DepthChart = UTeamAPIClient.get_team_depth_chart(sport=Sport.NFL, team=NFLTeam.GB)
diff --git a/example/user_example.py b/example/user_example.py
index c71a08c..418b71d 100644
--- a/example/user_example.py
+++ b/example/user_example.py
@@ -1,9 +1,8 @@
-from sleeper.api import UserAPIClient
-from sleeper.model import User
+from sleeper.api import get_user
if __name__ == "__main__":
# get a user by username
- user_1: User = UserAPIClient.get_user(username="my_username")
+ user_1 = get_user(identifier="my_username")
# get a user by ID
- user_2: User = UserAPIClient.get_user(user_id="my_user_id")
+ user_2 = get_user(identifier="my_user_id")
diff --git a/img/sleeper.png b/img/sleeper.png
new file mode 100644
index 0000000..2ccef46
Binary files /dev/null and b/img/sleeper.png differ
diff --git a/pyproject.toml b/pyproject.toml
index 115d291..e4dfe47 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,15 +1,2 @@
-[tool.black]
-line-length = 100
-skip-magic-trailing-comma = true
-include = '\.py$'
-quiet = true
-
-[tool.isort]
-profile = "black"
-line_length = 100
-
-[autoflake]
-ignore_init_module_imports = true
-in_place = true
-recursive = true
-remove_all_unused_imports = true
\ No newline at end of file
+[tool.ruff.lint]
+select = [ "I001", "F401" ]
diff --git a/requirements.dev.txt b/requirements.dev.txt
index f60ecc3..d1b3f44 100644
--- a/requirements.dev.txt
+++ b/requirements.dev.txt
@@ -1,6 +1,4 @@
-black==23.3.0
-autoflake==2.1.1
-isort==5.12.0
-pytest==7.4.3
-twine==4.0.2
-wheel==0.42.0
\ No newline at end of file
+pytest==8.3.3
+twine==5.1.1
+wheel==0.44.0
+ruff~=0.6.7
diff --git a/requirements.txt b/requirements.txt
index 014492b..dcab5d4 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1 @@
-Pillow
-Pillow
-Requests
-setuptools
+requests~=2.32.3
diff --git a/setup.py b/setup.py
index d113dbe..a98c0f1 100644
--- a/setup.py
+++ b/setup.py
@@ -24,7 +24,7 @@
license="MIT",
url="https://github.com/joeyagreco/sleeper",
include_package_data=True,
- packages=setuptools.find_packages(exclude=("test", "docs")),
+ packages=setuptools.find_packages(exclude=("test",)),
install_requires=required_packages,
python_requires=f">={minimum_python_version_required}",
keywords="nfl football sleeper sleeper-api sleeper-fantasy-football fantasy-football wrapper wrapper-api",
diff --git a/sleeper/_version.py b/sleeper/_version.py
index b359ecf..856644b 100644
--- a/sleeper/_version.py
+++ b/sleeper/_version.py
@@ -1,4 +1,4 @@
-__version__ = "1.7.3"
+__version__ = "2.0.0"
# minimum supported Python version
__version_minimum_python__ = "3.10"
diff --git a/sleeper/api/AvatarAPIClient.py b/sleeper/api/AvatarAPIClient.py
deleted file mode 100644
index a573e1f..0000000
--- a/sleeper/api/AvatarAPIClient.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-
-
-class AvatarAPIClient(SleeperAPIClient):
- @classmethod
- def get_avatar(cls, *, avatar_id: str, save_to_path: str, thumbnail: bool = False) -> None:
- if thumbnail:
- url = cls._build_route(
- cls._SLEEPER_CDN_BASE_URL, None, cls._AVATARS_ROUTE, cls._THUMBS_ROUTE, avatar_id
- )
- else:
- url = cls._build_route(cls._SLEEPER_CDN_BASE_URL, None, cls._AVATARS_ROUTE, avatar_id)
- image_file = cls._get_image_file(url)
- image_file.save(save_to_path)
diff --git a/sleeper/api/DraftAPIClient.py b/sleeper/api/DraftAPIClient.py
deleted file mode 100644
index 3ddb22a..0000000
--- a/sleeper/api/DraftAPIClient.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.enum.Sport import Sport
-from sleeper.model.Draft import Draft
-from sleeper.model.DraftPick import DraftPick
-from sleeper.model.PlayerDraftPick import PlayerDraftPick
-
-
-class DraftAPIClient(SleeperAPIClient):
- @classmethod
- def get_user_drafts_for_year(cls, *, user_id: str, sport: Sport, year: str) -> list[Draft]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._USER_ROUTE,
- user_id,
- cls._DRAFTS_ROUTE,
- sport.name.lower(),
- year,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(
- f"Could not get Drafts for user_id '{user_id}', sport '{sport.name}', and year '{year}'."
- )
- return Draft.from_dict_list(response_list)
-
- @classmethod
- def get_drafts_in_league(cls, *, league_id: str) -> list[Draft]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._LEAGUE_ROUTE, league_id, cls._DRAFTS_ROUTE
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get Drafts for league_id '{league_id}'.")
- return Draft.from_dict_list(cls._get(url))
-
- @classmethod
- def get_draft(cls, *, draft_id: str) -> Draft:
- url = cls._build_route(cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._DRAFT_ROUTE, draft_id)
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(f"Could not get Draft with draft_id '{draft_id}'.")
- return Draft.from_dict(cls._get(url))
-
- @classmethod
- def get_player_draft_picks(cls, *, draft_id: str, sport: Sport) -> list[PlayerDraftPick]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._DRAFT_ROUTE, draft_id, cls._PICKS_ROUTE
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(
- f"Could not get PlayerDraftPicks with draft_id '{draft_id}' and sport '{sport.name}'."
- )
- return PlayerDraftPick.from_dict_list(cls._get(url), sport)
-
- @classmethod
- def get_traded_draft_picks(cls, *, draft_id: str) -> list[DraftPick]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._DRAFT_ROUTE,
- draft_id,
- cls._TRADED_PICKS_ROUTE,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get traded DraftPicks with draft_id '{draft_id}'.")
- return DraftPick.from_dict_list(cls._get(url))
diff --git a/sleeper/api/LeagueAPIClient.py b/sleeper/api/LeagueAPIClient.py
deleted file mode 100644
index 0af3c82..0000000
--- a/sleeper/api/LeagueAPIClient.py
+++ /dev/null
@@ -1,150 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.enum.Sport import Sport
-from sleeper.model.League import League
-from sleeper.model.Matchup import Matchup
-from sleeper.model.PlayoffMatchup import PlayoffMatchup
-from sleeper.model.Roster import Roster
-from sleeper.model.SportState import SportState
-from sleeper.model.TradedPick import TradedPick
-from sleeper.model.Transaction import Transaction
-from sleeper.model.User import User
-
-
-class LeagueAPIClient(SleeperAPIClient):
- @classmethod
- def get_league(cls, *, league_id: str) -> League:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._LEAGUE_ROUTE, league_id
- )
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(f"Could not get League with league_id '{league_id}'.")
- return League.from_dict(response_dict)
-
- @classmethod
- def get_user_leagues_for_year(cls, *, user_id: str, sport: Sport, year: str) -> list[League]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._USER_ROUTE,
- user_id,
- cls._LEAGUES_ROUTE,
- sport.value.lower(),
- year,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(
- f"Could not get user Leagues for user_id '{user_id}', sport '{sport.name}', and year '{year}'."
- )
- return League.from_dict_list(response_list)
-
- @classmethod
- def get_rosters(cls, *, league_id: str) -> list[Roster]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._LEAGUE_ROUTE,
- league_id,
- cls._ROSTERS_ROUTE,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get Rosters for league_id '{league_id}'.")
- return Roster.from_dict_list(response_list)
-
- @classmethod
- def get_users_in_league(cls, *, league_id: str) -> list[User]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._LEAGUE_ROUTE, league_id, cls._USERS_ROUTE
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get Users for league_id '{league_id}'.")
- return User.from_dict_list(response_list)
-
- @classmethod
- def get_matchups_for_week(cls, *, league_id: str, week: int) -> list[Matchup]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._LEAGUE_ROUTE,
- league_id,
- cls._MATCHUPS_ROUTE,
- week,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(
- f"Could not get Matchups for league_id '{league_id}' and week '{week}'."
- )
- return Matchup.from_dict_list(response_list)
-
- @classmethod
- def get_winners_bracket(cls, *, league_id: str) -> list[PlayoffMatchup]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._LEAGUE_ROUTE,
- league_id,
- cls._WINNERS_BRACKET_ROUTE,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get PlayoffMatchups for league_id '{league_id}'.")
- return PlayoffMatchup.from_dict_str(response_list)
-
- @classmethod
- def get_losers_bracket(cls, *, league_id: str) -> list[PlayoffMatchup]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._LEAGUE_ROUTE,
- league_id,
- cls._LOSERS_BRACKET_ROUTE,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get PlayoffMatchups for league_id '{league_id}'.")
- return PlayoffMatchup.from_dict_str(response_list)
-
- @classmethod
- def get_transactions(cls, *, league_id: str, week: int) -> list[Transaction]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._LEAGUE_ROUTE,
- league_id,
- cls._TRANSACTIONS_ROUTE,
- week,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(
- f"Could not get Transactions for league_id '{league_id}' and week '{week}'."
- )
- return Transaction.from_dict_list(response_list)
-
- @classmethod
- def get_traded_picks(cls, *, league_id: str) -> list[TradedPick]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._LEAGUE_ROUTE,
- league_id,
- cls._TRADED_PICKS_ROUTE,
- )
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(f"Could not get TradedPicks for league_id '{league_id}'.")
- return TradedPick.from_dict_list(response_list)
-
- @classmethod
- def get_sport_state(cls, *, sport: Sport) -> SportState:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._STATE_ROUTE, sport.value.lower()
- )
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(f"Could not get SportState for sport '{sport.name}'.")
- return SportState.from_dict(response_dict)
diff --git a/sleeper/api/PlayerAPIClient.py b/sleeper/api/PlayerAPIClient.py
deleted file mode 100644
index 94d138d..0000000
--- a/sleeper/api/PlayerAPIClient.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.enum.Sport import Sport
-from sleeper.enum.TrendType import TrendType
-from sleeper.model.Player import Player
-from sleeper.model.PlayerTrend import PlayerTrend
-
-
-class PlayerAPIClient(SleeperAPIClient):
- __DEFAULT_TRENDING_PLAYERS_LOOKBACK_HOURS = 24
- __DEFAULT_TRENDING_PLAYERS_LIMIT = 25
-
- @classmethod
- def get_all_players(cls, *, sport: Sport) -> dict[str, Player]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._PLAYERS_ROUTE, sport.name.lower()
- )
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(f"Could not get Players for sport: '{sport.name}'.")
- return Player.dict_by_id(response_dict, sport)
-
- @classmethod
- def get_trending_players(
- cls, *, sport: Sport, trend_type: TrendType, lookback_hours: int = None, limit: int = None
- ) -> list[PlayerTrend]:
- if lookback_hours is None:
- lookback_hours = cls.__DEFAULT_TRENDING_PLAYERS_LOOKBACK_HOURS
- if limit is None:
- limit = cls.__DEFAULT_TRENDING_PLAYERS_LIMIT
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- cls._VERSION,
- cls._PLAYERS_ROUTE,
- sport.name.lower(),
- cls._TRENDING_ROUTE,
- trend_type.name.lower(),
- )
- url = cls._add_filters(url, ("lookback_hours", lookback_hours), ("limit", limit))
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(f"Could not get PlayerTrends.")
- return PlayerTrend.from_dict_list(response_dict)
diff --git a/sleeper/api/SleeperAPIClient.py b/sleeper/api/SleeperAPIClient.py
deleted file mode 100644
index 5b1b915..0000000
--- a/sleeper/api/SleeperAPIClient.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import io
-from abc import ABC
-from typing import Optional
-
-import requests
-from PIL import Image
-
-from sleeper.exception.SleeperAPIException import SleeperAPIException
-from sleeper.util.ConfigReader import ConfigReader
-
-
-class SleeperAPIClient(ABC):
- """
- Should be inherited by all API Clients.
-
- Sleeper API Documentation: https://docs.sleeper.app/
- """
-
- _SLEEPER_APP_BASE_URL = ConfigReader.get("api", "sleeper_app_base_url")
- _SLEEPER_CDN_BASE_URL = ConfigReader.get("api", "sleeper_cdn_base_url")
- _VERSION = ConfigReader.get("api", "version")
-
- # ROUTES
- _AVATARS_ROUTE = ConfigReader.get("api", "avatars_route")
- _CONTENT_ROUTE = ConfigReader.get("api", "content_route")
- _DEPTH_CHART_ROUTE = ConfigReader.get("api", "depth_chart_route")
- _DRAFT_ROUTE = ConfigReader.get("api", "draft_route")
- _DRAFTS_ROUTE = ConfigReader.get("api", "drafts_route")
- _LEAGUE_ROUTE = ConfigReader.get("api", "league_route")
- _LEAGUES_ROUTE = ConfigReader.get("api", "leagues_route")
- _LOSERS_BRACKET_ROUTE = ConfigReader.get("api", "losers_bracket_route")
- _MATCHUPS_ROUTE = ConfigReader.get("api", "matchups_route")
- _PICKS_ROUTE = ConfigReader.get("api", "picks_route")
- _PLAYER_ROUTE = ConfigReader.get("api", "player_route")
- _PLAYERS_ROUTE = ConfigReader.get("api", "players_route")
- _PROJECTIONS_ROUTE = ConfigReader.get("api", "projections_route")
- _ROSTERS_ROUTE = ConfigReader.get("api", "rosters_route")
- _SCHEDULE_ROUTE = ConfigReader.get("api", "schedule_route")
- _STATE_ROUTE = ConfigReader.get("api", "state_route")
- _STATS_ROUTE = ConfigReader.get("api", "stats_route")
- _THUMBS_ROUTE = ConfigReader.get("api", "thumbs_route")
- _TRADED_PICKS_ROUTE = ConfigReader.get("api", "traded_picks_route")
- _TRANSACTIONS_ROUTE = ConfigReader.get("api", "transactions_route")
- _TRENDING_ROUTE = ConfigReader.get("api", "trending_route")
- _USER_ROUTE = ConfigReader.get("api", "user_route")
- _USERS_ROUTE = ConfigReader.get("api", "users_route")
- _WINNERS_BRACKET_ROUTE = ConfigReader.get("api", "winners_bracket_route")
-
- @classmethod
- def _build_route(cls, base_url: str, version: Optional[str], *args) -> str:
- args = (str(arg).replace("/", "") for arg in args)
- if version is not None:
- return f"{base_url}/{version}/{'/'.join(args)}"
- else:
- return f"{base_url}/{'/'.join(args)}"
-
- @classmethod
- def _add_filters(cls, url: str, *args) -> str:
- """
- Adds filters to the given url.
- """
- if len(args) > 0:
- symbol = "?"
- for i, arg in enumerate(args):
- if i > 0:
- symbol = "&"
- if arg[0] is not None and arg[1] is not None:
- url = f"{url}{symbol}{arg[0]}={arg[1]}"
- return url
-
- @staticmethod
- def _get(url: str) -> Optional[dict | list]:
- response = requests.get(url)
- response.raise_for_status()
- return response.json()
-
- @staticmethod
- def _get_image_file(url: str) -> Image:
- response = requests.get(url)
- response.raise_for_status()
- image_bytes = response.content
- if image_bytes is None:
- raise SleeperAPIException(f"No image found.")
- image_stream = io.BytesIO(image_bytes)
- return Image.open(image_stream)
diff --git a/sleeper/api/UserAPIClient.py b/sleeper/api/UserAPIClient.py
deleted file mode 100644
index 0b8a418..0000000
--- a/sleeper/api/UserAPIClient.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.model.User import User
-
-
-class UserAPIClient(SleeperAPIClient):
- @classmethod
- def get_user(cls, *, username: str = None, user_id: str = None) -> User:
- if username is None and user_id is None:
- raise ValueError("'username' and 'user_id' cannot both be None.")
- user_arg = username if username is not None else user_id
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, cls._VERSION, cls._USER_ROUTE, f"{user_arg}"
- )
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(f"Could not find User for username/user_id: '{user_arg}'.")
- return User.from_dict(response_dict)
diff --git a/sleeper/api/__init__.py b/sleeper/api/__init__.py
index cfaf7d9..7a74b52 100644
--- a/sleeper/api/__init__.py
+++ b/sleeper/api/__init__.py
@@ -1,5 +1,5 @@
-from .AvatarAPIClient import AvatarAPIClient
-from .DraftAPIClient import DraftAPIClient
-from .LeagueAPIClient import LeagueAPIClient
-from .PlayerAPIClient import PlayerAPIClient
-from .UserAPIClient import UserAPIClient
+from sleeper.api.avatar import * # noqa
+from sleeper.api.draft import * # noqa
+from sleeper.api.league import * # noqa
+from sleeper.api.player import * # noqa
+from sleeper.api.user import * # noqa
diff --git a/sleeper/api/_constants.py b/sleeper/api/_constants.py
new file mode 100644
index 0000000..be2bd79
--- /dev/null
+++ b/sleeper/api/_constants.py
@@ -0,0 +1,29 @@
+SLEEPER_APP_BASE_URL = "https://api.sleeper.app"
+SLEEPER_CDN_BASE_URL = "https://sleepercdn.com"
+VERSION = "v1"
+
+# ROUTES
+AVATARS_ROUTE = "/avatars"
+CONTENT_ROUTE = "/content"
+DEPTH_CHART_ROUTE = "/depth-chart"
+DRAFT_ROUTE = "/draft"
+DRAFTS_ROUTE = "/drafts"
+LEAGUE_ROUTE = "/league"
+LEAGUES_ROUTE = "/leagues"
+LOSERS_BRACKET_ROUTE = "/losers_bracket"
+MATCHUPS_ROUTE = "/matchups"
+PICKS_ROUTE = "/picks"
+PLAYER_ROUTE = "/player"
+PLAYERS_ROUTE = "/players"
+PROJECTIONS_ROUTE = "/projections"
+ROSTERS_ROUTE = "/rosters"
+SCHEDULE_ROUTE = "/schedule"
+STATE_ROUTE = "/state"
+STATS_ROUTE = "/stats"
+THUMBS_ROUTE = "/thumbs"
+TRADED_PICKS_ROUTE = "/traded_picks"
+TRANSACTIONS_ROUTE = "/transactions"
+TRENDING_ROUTE = "/trending"
+USER_ROUTE = "/user"
+USERS_ROUTE = "/users"
+WINNERS_BRACKET_ROUTE = "/winners_bracket"
diff --git a/sleeper/api/_types.py b/sleeper/api/_types.py
new file mode 100644
index 0000000..d1767d1
--- /dev/null
+++ b/sleeper/api/_types.py
@@ -0,0 +1,4 @@
+from typing import Literal
+
+Sport = Literal["lcs", "nba", "nfl"]
+TrendType = Literal["add", "drop"]
diff --git a/sleeper/api/_utils.py b/sleeper/api/_utils.py
new file mode 100644
index 0000000..3a9a6f0
--- /dev/null
+++ b/sleeper/api/_utils.py
@@ -0,0 +1,37 @@
+from typing import Any
+
+import requests
+
+
+def build_route(base_url: str, *paths: str | int) -> str:
+ if base_url.endswith("/"):
+ base_url = base_url[:-1]
+
+ paths = tuple(str(p).strip("/") for p in paths)
+ url = f"{base_url}/{'/'.join(paths)}"
+ return url.strip("/")
+
+
+def add_filters(url: str, *args: tuple[str, Any]) -> str:
+ """
+ Adds filters to the given url.
+ """
+ symbol = "?"
+ if "?" in url:
+ symbol = "&"
+ for arg in args:
+ url = f"{url}{symbol}{arg[0]}={arg[1]}"
+ symbol = "&"
+ return url
+
+
+def get(url: str) -> Any:
+ response = requests.get(url)
+ response.raise_for_status()
+ return response.json()
+
+
+def get_content(url: str) -> bytes:
+ response = requests.get(url)
+ response.raise_for_status()
+ return response.content
diff --git a/sleeper/api/avatar.py b/sleeper/api/avatar.py
new file mode 100644
index 0000000..71e28c0
--- /dev/null
+++ b/sleeper/api/avatar.py
@@ -0,0 +1,16 @@
+from sleeper.api._constants import AVATARS_ROUTE, SLEEPER_CDN_BASE_URL, THUMBS_ROUTE
+from sleeper.api._utils import build_route, get_content
+
+
+def get_avatar(*, avatar_id: str, as_thumbnail: bool = False) -> bytes:
+ if as_thumbnail:
+ url = build_route(
+ SLEEPER_CDN_BASE_URL,
+ AVATARS_ROUTE,
+ THUMBS_ROUTE,
+ avatar_id,
+ )
+ else:
+ url = build_route(SLEEPER_CDN_BASE_URL, AVATARS_ROUTE, avatar_id)
+
+ return get_content(url)
diff --git a/sleeper/api/draft.py b/sleeper/api/draft.py
new file mode 100644
index 0000000..337c06a
--- /dev/null
+++ b/sleeper/api/draft.py
@@ -0,0 +1,66 @@
+from sleeper.api._constants import (
+ DRAFT_ROUTE,
+ DRAFTS_ROUTE,
+ LEAGUE_ROUTE,
+ PICKS_ROUTE,
+ SLEEPER_APP_BASE_URL,
+ TRADED_PICKS_ROUTE,
+ USER_ROUTE,
+ VERSION,
+)
+from sleeper.api._types import Sport
+from sleeper.api._utils import build_route, get
+
+
+def get_user_drafts_for_year(*, user_id: str, sport: Sport, year: int) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ USER_ROUTE,
+ user_id,
+ DRAFTS_ROUTE,
+ sport,
+ year,
+ )
+ )
+
+
+def get_drafts_in_league(*, league_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ DRAFTS_ROUTE,
+ )
+ )
+
+
+def get_draft(*, draft_id: str) -> dict:
+ return get(build_route(SLEEPER_APP_BASE_URL, VERSION, DRAFT_ROUTE, draft_id))
+
+
+def get_player_draft_picks(*, draft_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ DRAFT_ROUTE,
+ draft_id,
+ PICKS_ROUTE,
+ )
+ )
+
+
+def get_traded_draft_picks(*, draft_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ DRAFT_ROUTE,
+ draft_id,
+ TRADED_PICKS_ROUTE,
+ )
+ )
diff --git a/sleeper/api/league.py b/sleeper/api/league.py
new file mode 100644
index 0000000..eb6b6b9
--- /dev/null
+++ b/sleeper/api/league.py
@@ -0,0 +1,125 @@
+from sleeper.api._constants import (
+ LEAGUE_ROUTE,
+ LEAGUES_ROUTE,
+ LOSERS_BRACKET_ROUTE,
+ MATCHUPS_ROUTE,
+ ROSTERS_ROUTE,
+ SLEEPER_APP_BASE_URL,
+ STATE_ROUTE,
+ TRADED_PICKS_ROUTE,
+ TRANSACTIONS_ROUTE,
+ USER_ROUTE,
+ USERS_ROUTE,
+ VERSION,
+ WINNERS_BRACKET_ROUTE,
+)
+from sleeper.api._types import Sport
+from sleeper.api._utils import build_route, get
+
+
+def get_league(*, league_id: str) -> dict:
+ return get(build_route(SLEEPER_APP_BASE_URL, VERSION, LEAGUE_ROUTE, league_id))
+
+
+def get_user_leagues_for_year(*, user_id: str, sport: Sport, year: int) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ USER_ROUTE,
+ user_id,
+ LEAGUES_ROUTE,
+ sport,
+ year,
+ )
+ )
+
+
+def get_rosters(*, league_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ ROSTERS_ROUTE,
+ )
+ )
+
+
+def get_users_in_league(*, league_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ USERS_ROUTE,
+ )
+ )
+
+
+def get_matchups_for_week(*, league_id: str, week: int) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ MATCHUPS_ROUTE,
+ week,
+ )
+ )
+
+
+def get_winners_bracket(*, league_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ WINNERS_BRACKET_ROUTE,
+ )
+ )
+
+
+def get_losers_bracket(*, league_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ LOSERS_BRACKET_ROUTE,
+ )
+ )
+
+
+def get_transactions(*, league_id: str, week: int) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ TRANSACTIONS_ROUTE,
+ week,
+ )
+ )
+
+
+def get_traded_picks(*, league_id: str) -> list[dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ LEAGUE_ROUTE,
+ league_id,
+ TRADED_PICKS_ROUTE,
+ )
+ )
+
+
+def get_sport_state(sport: Sport) -> dict:
+ return get(build_route(SLEEPER_APP_BASE_URL, VERSION, STATE_ROUTE, sport))
diff --git a/sleeper/api/player.py b/sleeper/api/player.py
new file mode 100644
index 0000000..252b708
--- /dev/null
+++ b/sleeper/api/player.py
@@ -0,0 +1,43 @@
+from typing import Optional
+
+from sleeper.api._constants import (
+ PLAYERS_ROUTE,
+ SLEEPER_APP_BASE_URL,
+ TRENDING_ROUTE,
+ VERSION,
+)
+from sleeper.api._types import Sport, TrendType
+from sleeper.api._utils import add_filters, build_route, get
+
+
+def get_all_players(*, sport: Sport) -> dict[str, dict]:
+ return get(
+ build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ PLAYERS_ROUTE,
+ sport,
+ )
+ )
+
+
+def get_trending_players(
+ *,
+ sport: Sport,
+ trend_type: TrendType,
+ lookback_hours: Optional[int] = None,
+ limit: Optional[int] = None,
+) -> list[dict]:
+ url = build_route(
+ SLEEPER_APP_BASE_URL,
+ VERSION,
+ PLAYERS_ROUTE,
+ sport,
+ TRENDING_ROUTE,
+ trend_type,
+ )
+ if lookback_hours is not None:
+ url = add_filters(url, ("lookback_hours", lookback_hours))
+ if limit is not None:
+ url = add_filters(url, ("limit", limit))
+ return get(url)
diff --git a/sleeper/api/unofficial/UPlayerAPIClient.py b/sleeper/api/unofficial/UPlayerAPIClient.py
deleted file mode 100644
index 5a2f33f..0000000
--- a/sleeper/api/unofficial/UPlayerAPIClient.py
+++ /dev/null
@@ -1,165 +0,0 @@
-from typing import Any, Optional
-
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.enum import SeasonType
-from sleeper.enum.Sport import Sport
-from sleeper.model.PlayerStats import PlayerStats
-
-
-class UPlayerAPIClient(SleeperAPIClient):
- @classmethod
- def get_player_stats(
- cls,
- *,
- sport: Sport,
- player_id: str,
- season: str,
- season_type: SeasonType = SeasonType.REGULAR,
- week: Optional[int] = None,
- ) -> PlayerStats:
- """
- Gets player stats for the given season OR just the given week.
- """
-
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- None,
- cls._STATS_ROUTE,
- sport.name.lower(),
- cls._PLAYER_ROUTE,
- player_id,
- )
- url = cls._add_filters(
- url, ("season_type", season_type.name.lower()), ("season", season), ("week", week)
- )
-
- response_dict = cls._get(url)
- if response_dict is None:
- error_message = f"Could not get PlayerStats for sport: '{sport.name}', player_id: '{player_id}', season_type: '{season_type}', season: '{season}'"
- if week is not None:
- error_message += f", week: '{week}'"
- error_message += "."
- raise ValueError(error_message)
- return PlayerStats.from_dict(response_dict)
-
- @classmethod
- def get_player_projections(
- cls,
- *,
- sport: Sport,
- player_id: str,
- season: str,
- season_type: SeasonType = SeasonType.REGULAR,
- week: Optional[int] = None,
- ) -> PlayerStats:
- """
- Gets player projections for the given season OR just the given week.
- """
-
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- None,
- cls._PROJECTIONS_ROUTE,
- sport.name.lower(),
- cls._PLAYER_ROUTE,
- player_id,
- )
- url = cls._add_filters(
- url, ("season_type", season_type.name.lower()), ("season", season), ("week", week)
- )
-
- response_dict = cls._get(url)
- if response_dict is None:
- error_message = f"Could not get PlayerStats for sport: '{sport.name}', player_id: '{player_id}', season_type: '{season_type}', season: '{season}'"
- if week is not None:
- error_message += f", week: '{week}'"
- error_message += "."
- raise ValueError(error_message)
- return PlayerStats.from_dict(response_dict)
-
- @classmethod
- def get_all_player_stats(
- cls,
- *,
- sport: Sport,
- season: str,
- week: int,
- season_type: SeasonType = SeasonType.REGULAR,
- positions: list[str] = None,
- ) -> list[PlayerStats]:
- if positions == None:
- positions = []
-
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL, None, cls._STATS_ROUTE, sport.name.lower(), season, week
- )
- filters: list[tuple[str, Any]] = [("season_type", season_type.name.lower())]
- for position in positions:
- filters.append(("position[]", position.name.upper()))
- url = cls._add_filters(url, *filters)
-
- response_list = cls._get(url)
- if response_list is None:
- error_message = f"Could not get PlayerStats list for sport: '{sport.name}', season_type: '{season_type}', season: '{season}', week: '{week}'"
- if week is not None:
- error_message += f", week: '{week}'"
- if len(positions) > 0:
- error_message += f", positions: '{positions}'"
- error_message += "."
- raise ValueError(error_message)
- return PlayerStats.from_dict_list(response_list)
-
- @classmethod
- def get_all_player_projections(
- cls,
- *,
- sport: Sport,
- season: str,
- week: int,
- season_type: SeasonType = SeasonType.REGULAR,
- positions: list[str] = None,
- ) -> list[PlayerStats]:
- if positions == None:
- positions = []
-
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- None,
- cls._PROJECTIONS_ROUTE,
- sport.name.lower(),
- season,
- week,
- )
- filters: list[tuple[str, Any]] = [("season_type", season_type.name.lower())]
- for position in positions:
- filters.append(("position[]", position.name.upper()))
- url = cls._add_filters(url, *filters)
-
- response_list = cls._get(url)
- if response_list is None:
- error_message = f"Could not get PlayerStats list for sport: '{sport.name}', season_type: '{season_type}', season: '{season}', week: '{week}'"
- if week is not None:
- error_message += f", week: '{week}'"
- if len(positions) > 0:
- error_message += f", positions: '{positions}'"
- error_message += "."
- raise ValueError(error_message)
- return PlayerStats.from_dict_list(response_list)
-
- @classmethod
- def get_player_head_shot(cls, *, sport: Sport, player_id: str, save_to_path: str) -> None:
- """
- save_to_path should end in ".png".
- """
-
- url = cls._build_route(
- cls._SLEEPER_CDN_BASE_URL,
- None,
- cls._CONTENT_ROUTE,
- sport.name.lower(),
- cls._PLAYERS_ROUTE,
- player_id,
- )
- url += ".jpg"
- image_file = cls._get_image_file(url)
- image_file.save(save_to_path)
diff --git a/sleeper/api/unofficial/USportAPIClient.py b/sleeper/api/unofficial/USportAPIClient.py
deleted file mode 100644
index 87de598..0000000
--- a/sleeper/api/unofficial/USportAPIClient.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.enum import SeasonType
-from sleeper.enum.Sport import Sport
-from sleeper.model.Game import Game
-
-
-class USportAPIClient(SleeperAPIClient):
- @classmethod
- def get_regular_season_schedule(
- cls, *, sport: Sport, season: str, season_type: SeasonType = SeasonType.REGULAR
- ) -> list[Game]:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- None,
- cls._SCHEDULE_ROUTE,
- sport.name.lower(),
- season_type.name.lower(),
- season,
- )
-
- response_list = cls._get(url)
- if response_list is None:
- raise ValueError(
- f"Could not get Game list for sport: '{sport.name}', season: '{season}', season_type: '{season_type.name}'."
- )
- return Game.from_dict_list(response_list, sport)
diff --git a/sleeper/api/unofficial/UTeamAPIClient.py b/sleeper/api/unofficial/UTeamAPIClient.py
deleted file mode 100644
index 379be93..0000000
--- a/sleeper/api/unofficial/UTeamAPIClient.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from sleeper.api.SleeperAPIClient import SleeperAPIClient
-from sleeper.enum import SportTeam
-from sleeper.enum.Sport import Sport
-from sleeper.model.DepthChart import DepthChart
-
-
-class UTeamAPIClient(SleeperAPIClient):
- @classmethod
- def get_team_depth_chart(cls, *, sport: Sport, team: SportTeam) -> DepthChart:
- url = cls._build_route(
- cls._SLEEPER_APP_BASE_URL,
- None,
- cls._PLAYERS_ROUTE,
- sport.name.lower(),
- team.name.lower(),
- cls._DEPTH_CHART_ROUTE,
- )
-
- response_dict = cls._get(url)
- if response_dict is None:
- raise ValueError(
- f"Could not get DepthChart for sport: '{sport.name}', team: '{team.name}'"
- )
- return DepthChart.model(sport).from_dict(response_dict)
diff --git a/sleeper/api/unofficial/__init__.py b/sleeper/api/unofficial/__init__.py
deleted file mode 100644
index d0f8232..0000000
--- a/sleeper/api/unofficial/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from .UPlayerAPIClient import UPlayerAPIClient
-from .USportAPIClient import USportAPIClient
-from .UTeamAPIClient import UTeamAPIClient
diff --git a/sleeper/api/user.py b/sleeper/api/user.py
new file mode 100644
index 0000000..51c51a5
--- /dev/null
+++ b/sleeper/api/user.py
@@ -0,0 +1,7 @@
+from sleeper.api._constants import SLEEPER_APP_BASE_URL, USER_ROUTE, VERSION
+from sleeper.api._utils import build_route, get
+
+
+def get_user(*, identifier: str) -> dict:
+ # identifier can be username or user id
+ return get(build_route(SLEEPER_APP_BASE_URL, VERSION, USER_ROUTE, f"{identifier}"))
diff --git a/sleeper/app.properties b/sleeper/app.properties
deleted file mode 100644
index 3c0a6c8..0000000
--- a/sleeper/app.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-[api]
-sleeper_app_base_url=https://api.sleeper.app
-sleeper_cdn_base_url=https://sleepercdn.com
-version=v1
-# ROUTES
-avatars_route=/avatars
-content_route=/content
-depth_chart_route=/depth_chart
-draft_route=/draft
-drafts_route=/drafts
-league_route=/league
-leagues_route=/leagues
-losers_bracket_route=/losers_bracket
-matchups_route=/matchups
-picks_route=/picks
-player_route=/player
-players_route=/players
-projections_route=/projections
-rosters_route=/rosters
-schedule_route=/schedule
-state_route=/state
-stats_route=/stats
-thumbs_route=/thumbs
-traded_picks_route=/traded_picks
-transactions_route=/transactions
-trending_route=/trending
-user_route=/user
-users_route=/users
-winners_bracket_route=/winners_bracket
\ No newline at end of file
diff --git a/sleeper/enum/Category.py b/sleeper/enum/Category.py
deleted file mode 100644
index 59f4ff8..0000000
--- a/sleeper/enum/Category.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class Category(ModelEnum):
- PROJ = "PROJ"
- STAT = "STAT"
-
- @classmethod
- def from_str(cls, s: str) -> Category:
- if s.upper() == "PROJ":
- return Category.PROJ
- elif s.upper() == "STAT":
- return Category.STAT
- else:
- cls._handle_unknown_value(Category, s)
diff --git a/sleeper/enum/Company.py b/sleeper/enum/Company.py
deleted file mode 100644
index 9926451..0000000
--- a/sleeper/enum/Company.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class Company(ModelEnum):
- ROTOWIRE = "ROTOWIRE"
- SPORTRADAR = "SPORTRADAR"
-
- @classmethod
- def from_str(cls, s: str) -> Company:
- if s.upper() == "ROTOWIRE":
- return Company.ROTOWIRE
- elif s.upper() == "SPORTRADAR":
- return Company.SPORTRADAR
- else:
- cls._handle_unknown_value(Company, s)
diff --git a/sleeper/enum/DraftStatus.py b/sleeper/enum/DraftStatus.py
deleted file mode 100644
index f26bc34..0000000
--- a/sleeper/enum/DraftStatus.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class DraftStatus(ModelEnum):
- COMPLETE = "COMPLETE"
- PRE_DRAFT = "PRE_DRAFT"
-
- @classmethod
- def from_str(cls, s: str) -> DraftStatus:
- if s.upper() == "COMPLETE":
- return DraftStatus.COMPLETE
- elif s.upper() == "PRE_DRAFT":
- return DraftStatus.PRE_DRAFT
- else:
- cls._handle_unknown_value(DraftStatus, s)
diff --git a/sleeper/enum/DraftType.py b/sleeper/enum/DraftType.py
deleted file mode 100644
index e8d67ec..0000000
--- a/sleeper/enum/DraftType.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class DraftType(ModelEnum):
- AUCTION = "AUCTION"
- LINEAR = "LINEAR"
- SNAKE = "SNAKE"
-
- @classmethod
- def from_str(cls, s: str) -> DraftType:
- if s.upper() == "AUCTION":
- return DraftType.AUCTION
- elif s.upper() == "LINEAR":
- return DraftType.LINEAR
- elif s.upper() == "SNAKE":
- return DraftType.SNAKE
- else:
- cls._handle_unknown_value(DraftType, s)
diff --git a/sleeper/enum/InjuryStatus.py b/sleeper/enum/InjuryStatus.py
deleted file mode 100644
index 873cc6b..0000000
--- a/sleeper/enum/InjuryStatus.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-from typing import Optional
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class InjuryStatus(ModelEnum):
- COV = "COV"
- DNR = "DNR"
- DOUBTFUL = "DOUBTFUL"
- IR = "IR"
- NA = "NA"
- OUT = "OUT"
- PUP = "PUP"
- QUESTIONABLE = "QUESTIONABLE"
- SUS = "SUS"
-
- @classmethod
- def from_str(cls, s: Optional[str]) -> InjuryStatus:
- if s is None or s.upper() in ("NA", ""):
- return InjuryStatus.NA
- elif s.upper() == "COV":
- return InjuryStatus.COV
- elif s.upper() == "DOUBTFUL":
- return InjuryStatus.DOUBTFUL
- elif s.upper() == "DNR":
- return InjuryStatus.DNR
- elif s.upper() == "IR":
- return InjuryStatus.IR
- elif s.upper() == "OUT":
- return InjuryStatus.OUT
- elif s.upper() == "PUP":
- return InjuryStatus.PUP
- elif s.upper() == "QUESTIONABLE":
- return InjuryStatus.QUESTIONABLE
- elif s.upper() == "SUS":
- return InjuryStatus.SUS
- else:
- cls._handle_unknown_value(InjuryStatus, s)
diff --git a/sleeper/enum/ModelEnum.py b/sleeper/enum/ModelEnum.py
deleted file mode 100644
index ad80d85..0000000
--- a/sleeper/enum/ModelEnum.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import annotations
-
-from enum import Enum, unique
-
-from sleeper.util.CustomLogger import CustomLogger
-
-
-@unique
-class ModelEnum(Enum):
- """
- Should be inherited by all model enums.
- """
-
- ...
-
- @staticmethod
- def _handle_unknown_value(enum_class: ModelEnum, value: str) -> None:
- CustomLogger.getLogger().warning(f"Unknown value for {enum_class.__name__}: '{value}'.")
diff --git a/sleeper/enum/PlayerPosition.py b/sleeper/enum/PlayerPosition.py
deleted file mode 100644
index 0897e30..0000000
--- a/sleeper/enum/PlayerPosition.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import annotations
-
-from abc import abstractmethod
-from enum import Enum, unique
-
-from sleeper.enum.Sport import Sport
-
-
-@unique
-class PlayerPosition(Enum):
- """
- Parent for all Enum positions for each sport.
- """
-
- ...
-
- @classmethod
- @abstractmethod
- def from_str(cls, s: str) -> PlayerPosition:
- ...
-
- @staticmethod
- def enum(sport: Sport) -> PlayerPosition:
- from sleeper.enum.nfl.NFLPosition import NFLPosition
-
- if sport == Sport.NFL:
- return NFLPosition
- else:
- raise ValueError(f"Cannot find PlayerPosition for sport: '{sport.name}'.")
diff --git a/sleeper/enum/PlayerStatus.py b/sleeper/enum/PlayerStatus.py
deleted file mode 100644
index 5483c01..0000000
--- a/sleeper/enum/PlayerStatus.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import annotations
-
-from abc import abstractmethod
-from enum import Enum, unique
-
-from sleeper.enum.Sport import Sport
-
-
-@unique
-class PlayerStatus(Enum):
- """
- Parent for all Enum statuses for each sport.
- """
-
- ...
-
- @classmethod
- @abstractmethod
- def from_str(cls, s: str) -> PlayerStatus:
- ...
-
- @staticmethod
- def enum(sport: Sport) -> PlayerStatus:
- from sleeper.enum.nfl.NFLPlayerStatus import NFLPlayerStatus
-
- if sport == Sport.NFL:
- return NFLPlayerStatus
- else:
- raise ValueError(f"Cannot find PlayerStatus for sport: '{sport.name}'.")
diff --git a/sleeper/enum/PlayoffRoundType.py b/sleeper/enum/PlayoffRoundType.py
deleted file mode 100644
index cc91835..0000000
--- a/sleeper/enum/PlayoffRoundType.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class PlayoffRoundType(ModelEnum):
- ONE_WEEK_PER_ROUND = "ONE_WEEK_PER_ROUND" # each round of playoffs is one week
- TWO_WEEK_CHAMPIONSHIP_ROUND = "TWO_WEEK_CHAMPIONSHIP_ROUND" # each round of playoffs is one week, while the championship spans two weeks
- TWO_WEEKS_PER_ROUND = "TWO_WEEKS_PER_ROUND" # each round of playoffs spans two weeks
-
- @classmethod
- def from_int(cls, val: int) -> PlayoffRoundType:
- if val == 0:
- return PlayoffRoundType.ONE_WEEK_PER_ROUND
- elif val == 1:
- return PlayoffRoundType.TWO_WEEK_CHAMPIONSHIP_ROUND
- elif val == 2:
- return PlayoffRoundType.TWO_WEEKS_PER_ROUND
- else:
- cls._handle_unknown_value(PlayoffRoundType, str(val))
diff --git a/sleeper/enum/PracticeParticipation.py b/sleeper/enum/PracticeParticipation.py
deleted file mode 100644
index eaf5101..0000000
--- a/sleeper/enum/PracticeParticipation.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-from typing import Optional
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class PracticeParticipation(ModelEnum):
- NA = "NA"
- OUT = "OUT"
-
- @classmethod
- def from_str(cls, s: Optional[str]) -> PracticeParticipation:
- if s is None:
- return PracticeParticipation.NA
- elif s.upper() == "OUT":
- return PracticeParticipation.OUT
- else:
- cls._handle_unknown_value(PracticeParticipation, s)
diff --git a/sleeper/enum/RosterPosition.py b/sleeper/enum/RosterPosition.py
deleted file mode 100644
index d1eec64..0000000
--- a/sleeper/enum/RosterPosition.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from __future__ import annotations
-
-from abc import abstractmethod
-from enum import Enum, unique
-
-from sleeper.enum.nfl.NFLRosterPosition import NFLRosterPosition
-from sleeper.enum.Sport import Sport
-
-
-@unique
-class RosterPosition(Enum):
- """
- Parent for all Enum roster positions for each sport.
- """
-
- ...
-
- @classmethod
- @abstractmethod
- def from_str(cls, s: str) -> RosterPosition:
- ...
-
- @staticmethod
- def enum(sport: Sport) -> RosterPosition:
- if sport == Sport.NFL:
- return NFLRosterPosition
- else:
- raise ValueError(f"Cannot find RosterPosition for sport: '{sport.name}'.")
diff --git a/sleeper/enum/ScoringType.py b/sleeper/enum/ScoringType.py
deleted file mode 100644
index df64265..0000000
--- a/sleeper/enum/ScoringType.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class ScoringType(ModelEnum):
- DYNASTY = "DYNASTY"
- DYNASTY_PPR = "DYNASTY_PPR"
- DYNASTY_TWO_QB = "DYNASTY_2QB"
- HALF_PPR = "HALF_PPR"
- PPR = "PPR"
- STD = "STD"
- TWO_QB = "2QB"
-
- @classmethod
- def from_str(cls, s: str) -> ScoringType:
- if s.upper() == "DYNASTY":
- return ScoringType.DYNASTY
- elif s.upper() == "DYNASTY_PPR":
- return ScoringType.DYNASTY_PPR
- elif s.upper() == "DYNASTY_2QB":
- return ScoringType.DYNASTY_TWO_QB
- elif s.upper() == "HALF_PPR":
- return ScoringType.HALF_PPR
- elif s.upper() == "PPR":
- return ScoringType.PPR
- elif s.upper() == "STD":
- return ScoringType.STD
- elif s.upper() == "2QB":
- return ScoringType.TWO_QB
- else:
- cls._handle_unknown_value(ScoringType, s)
diff --git a/sleeper/enum/SeasonStatus.py b/sleeper/enum/SeasonStatus.py
deleted file mode 100644
index 0d08c9e..0000000
--- a/sleeper/enum/SeasonStatus.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class SeasonStatus(ModelEnum):
- COMPLETE = "COMPLETE"
- DRAFTING = "DRAFTING"
- IN_SEASON = "IN_SEASON"
- POSTPONED = "POSTPONED"
- POST_SEASON = "POST_SEASON"
- PRE_DRAFT = "PRE_DRAFT"
-
- @classmethod
- def from_str(cls, s: str) -> SeasonStatus:
- if s.upper() == "COMPLETE":
- return SeasonStatus.COMPLETE
- elif s.upper() == "DRAFTING":
- return SeasonStatus.DRAFTING
- elif s.upper() == "IN_SEASON":
- return SeasonStatus.IN_SEASON
- elif s.upper() == "POSTPONED":
- return SeasonStatus.POSTPONED
- elif s.upper() == "POST_SEASON":
- return SeasonStatus.POST_SEASON
- elif s.upper() == "PRE_DRAFT":
- return SeasonStatus.PRE_DRAFT
- else:
- cls._handle_unknown_value(SeasonStatus, s)
diff --git a/sleeper/enum/SeasonType.py b/sleeper/enum/SeasonType.py
deleted file mode 100644
index 6615479..0000000
--- a/sleeper/enum/SeasonType.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class SeasonType(ModelEnum):
- OFF = "OFF"
- POST = "POST"
- PRE = "PRE"
- REGULAR = "REGULAR"
-
- @classmethod
- def from_str(cls, s: str) -> SeasonType:
- if s.upper() == "OFF":
- return SeasonType.OFF
- elif s.upper() == "POST":
- return SeasonType.POST
- elif s.upper() == "PRE":
- return SeasonType.PRE
- elif s.upper() == "REGULAR":
- return SeasonType.REGULAR
- else:
- cls._handle_unknown_value(SeasonType, s)
diff --git a/sleeper/enum/Sport.py b/sleeper/enum/Sport.py
deleted file mode 100644
index 75fee66..0000000
--- a/sleeper/enum/Sport.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class Sport(ModelEnum):
- LCS = "LCS"
- NBA = "NBA"
- NFL = "NFL"
-
- @classmethod
- def from_str(cls, s: str) -> Sport:
- if s.upper() == "LCS":
- return Sport.LCS
- elif s.upper() == "NBA":
- return Sport.NBA
- elif s.upper() == "NFL":
- return Sport.NFL
- else:
- cls._handle_unknown_value(Sport, s)
diff --git a/sleeper/enum/SportTeam.py b/sleeper/enum/SportTeam.py
deleted file mode 100644
index 96c757e..0000000
--- a/sleeper/enum/SportTeam.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import annotations
-
-from abc import abstractmethod
-from enum import Enum, unique
-
-from sleeper.enum.Sport import Sport
-
-
-@unique
-class SportTeam(Enum):
- """
- Parent for all Enum teams for each sport.
- """
-
- ...
-
- @classmethod
- @abstractmethod
- def from_str(cls, s: str) -> SportTeam:
- ...
-
- @staticmethod
- def enum(sport: Sport) -> SportTeam:
- from sleeper.enum.nfl.NFLTeam import NFLTeam
-
- if sport == Sport.NFL:
- return NFLTeam
- else:
- raise ValueError(f"Cannot find SportTeam for sport: '{sport.name}'.")
diff --git a/sleeper/enum/TransactionStatus.py b/sleeper/enum/TransactionStatus.py
deleted file mode 100644
index 13c49e5..0000000
--- a/sleeper/enum/TransactionStatus.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class TransactionStatus(ModelEnum):
- COMPLETE = "COMPLETE"
- FAILED = "FAILED"
-
- @classmethod
- def from_str(cls, s: str) -> TransactionStatus:
- if s.upper() == "COMPLETE":
- return TransactionStatus.COMPLETE
- elif s.upper() == "FAILED":
- return TransactionStatus.FAILED
- else:
- cls._handle_unknown_value(TransactionStatus, s)
diff --git a/sleeper/enum/TransactionType.py b/sleeper/enum/TransactionType.py
deleted file mode 100644
index 49c8a5e..0000000
--- a/sleeper/enum/TransactionType.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class TransactionType(ModelEnum):
- FREE_AGENT = "FREE_AGENT"
- TRADE = "TRADE"
- WAIVER = "WAIVER"
-
- @classmethod
- def from_str(cls, s: str) -> TransactionType:
- if s.upper() == "FREE_AGENT":
- return TransactionType.FREE_AGENT
- elif s.upper() == "TRADE":
- return TransactionType.TRADE
- elif s.upper() == "WAIVER":
- return TransactionType.WAIVER
- else:
- cls._handle_unknown_value(TransactionType, s)
diff --git a/sleeper/enum/TrendType.py b/sleeper/enum/TrendType.py
deleted file mode 100644
index 0f662e1..0000000
--- a/sleeper/enum/TrendType.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class TrendType(ModelEnum):
- ADD = "ADD"
- DROP = "DROP"
-
- @classmethod
- def from_str(cls, s: str) -> TrendType:
- if s.upper() == "ADD":
- return TrendType.ADD
- elif s.upper() == "DROP":
- return TrendType.DROP
- else:
- cls._handle_unknown_value(TrendType, s)
diff --git a/sleeper/enum/__init__.py b/sleeper/enum/__init__.py
deleted file mode 100644
index f59aaf8..0000000
--- a/sleeper/enum/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from .Category import Category
-from .Company import Company
-from .DraftStatus import DraftStatus
-from .DraftType import DraftType
-from .InjuryStatus import InjuryStatus
-from .ModelEnum import ModelEnum
-from .PlayerPosition import PlayerPosition
-from .PlayerStatus import PlayerStatus
-from .PlayoffRoundType import PlayoffRoundType
-from .PracticeParticipation import PracticeParticipation
-from .RosterPosition import RosterPosition
-from .ScoringType import ScoringType
-from .SeasonStatus import SeasonStatus
-from .SeasonType import SeasonType
-from .Sport import Sport
-from .SportTeam import SportTeam
-from .TransactionStatus import TransactionStatus
-from .TransactionType import TransactionType
-from .TrendType import TrendType
diff --git a/sleeper/enum/nfl/NFLPlayerStatus.py b/sleeper/enum/nfl/NFLPlayerStatus.py
deleted file mode 100644
index ccfaacf..0000000
--- a/sleeper/enum/nfl/NFLPlayerStatus.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-from typing import Optional
-
-from sleeper.enum.ModelEnum import ModelEnum
-from sleeper.enum.PlayerStatus import PlayerStatus
-
-
-@unique
-class NFLPlayerStatus(PlayerStatus, ModelEnum):
- ACTIVE = "ACTIVE"
- INACTIVE = "INACTIVE"
- INJURED_RESERVE = "INJURED_RESERVE"
- NA = "NA"
- NON_FOOTBALL_INJURY = "NON_FOOTBALL_INJURY"
- PHYSICALLY_UNABLE_TO_PERFORM = "PHYSICALLY_UNABLE_TO_PERFORM"
- PRACTICE_SQUAD = "PRACTICE_SQUAD"
-
- @classmethod
- def from_str(cls, s: Optional[str]) -> NFLPlayerStatus:
- if s is None:
- return NFLPlayerStatus.NA
- if s.upper() == "ACTIVE":
- return NFLPlayerStatus.ACTIVE
- elif s.upper() == "INACTIVE":
- return NFLPlayerStatus.INACTIVE
- elif s.upper() == "INJURED RESERVE":
- return NFLPlayerStatus.INJURED_RESERVE
- elif s.upper() == "NON FOOTBALL INJURY":
- return NFLPlayerStatus.NON_FOOTBALL_INJURY
- elif s.upper() == "PHYSICALLY UNABLE TO PERFORM":
- return NFLPlayerStatus.PHYSICALLY_UNABLE_TO_PERFORM
- elif s.upper() == "PRACTICE SQUAD":
- return NFLPlayerStatus.PRACTICE_SQUAD
- else:
- cls._handle_unknown_value(NFLPlayerStatus, s)
diff --git a/sleeper/enum/nfl/NFLPosition.py b/sleeper/enum/nfl/NFLPosition.py
deleted file mode 100644
index 7f02f6a..0000000
--- a/sleeper/enum/nfl/NFLPosition.py
+++ /dev/null
@@ -1,106 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-from typing import Optional
-
-from sleeper.enum.ModelEnum import ModelEnum
-from sleeper.enum.PlayerPosition import PlayerPosition
-
-
-@unique
-class NFLPosition(PlayerPosition, ModelEnum):
- C = "C"
- CB = "CB"
- DB = "DB"
- DE = "DE"
- DEF = "DEF"
- DL = "DL"
- DT = "DT"
- FB = "FB"
- FS = "FS"
- G = "G"
- ILB = "ILB"
- K = "K"
- LB = "LB"
- LEO = "LEO"
- LS = "LS"
- NA = "NA"
- NT = "NT"
- OG = "OG"
- OL = "OL"
- OLB = "OLB"
- OT = "OT"
- P = "P"
- QB = "QB"
- RB = "RB"
- S = "S"
- SS = "SS"
- T = "T"
- TE = "TE"
- TEAM = "TEAM"
- WR = "WR"
-
- @classmethod
- def from_str(cls, s: Optional[str]) -> NFLPosition:
- if s is None:
- return NFLPosition.NA
- elif s.upper() == "C":
- return NFLPosition.C
- elif s.upper() == "CB":
- return NFLPosition.CB
- elif s.upper() == "DB":
- return NFLPosition.DB
- elif s.upper() == "DE":
- return NFLPosition.DE
- elif s.upper() == "DEF":
- return NFLPosition.DEF
- elif s.upper() == "DL":
- return NFLPosition.DL
- elif s.upper() == "DT":
- return NFLPosition.DT
- elif s.upper() == "FB":
- return NFLPosition.FB
- elif s.upper() == "FS":
- return NFLPosition.FS
- elif s.upper() == "G":
- return NFLPosition.G
- elif s.upper() == "ILB":
- return NFLPosition.ILB
- elif s.upper() == "K":
- return NFLPosition.K
- elif s.upper() == "LB":
- return NFLPosition.LB
- elif s.upper() == "LEO":
- return NFLPosition.LEO
- elif s.upper() == "LS":
- return NFLPosition.LS
- elif s.upper() == "NT":
- return NFLPosition.NT
- elif s.upper() == "OG":
- return NFLPosition.OG
- elif s.upper() == "OL":
- return NFLPosition.OL
- elif s.upper() == "OLB":
- return NFLPosition.OLB
- elif s.upper() == "OT":
- return NFLPosition.OT
- elif s.upper() == "P":
- return NFLPosition.P
- elif s.upper() == "QB":
- return NFLPosition.QB
- elif s.upper() == "RB":
- return NFLPosition.RB
- elif s.upper() == "S":
- return NFLPosition.S
- elif s.upper() == "SS":
- return NFLPosition.SS
- elif s.upper() == "T":
- return NFLPosition.T
- elif s.upper() == "TE":
- return NFLPosition.TE
- elif s.upper() == "TEAM":
- return NFLPosition.TEAM
- elif s.upper() == "WR":
- return NFLPosition.WR
- else:
- cls._handle_unknown_value(NFLPosition, s)
diff --git a/sleeper/enum/nfl/NFLRosterPosition.py b/sleeper/enum/nfl/NFLRosterPosition.py
deleted file mode 100644
index e2d522c..0000000
--- a/sleeper/enum/nfl/NFLRosterPosition.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-
-from sleeper.enum.ModelEnum import ModelEnum
-
-
-@unique
-class NFLRosterPosition(ModelEnum):
- BN = "BN"
- DEF = "DEF"
- FLEX = "FLEX"
- K = "K"
- QB = "QB"
- RB = "RB"
- SUPER_FLEX = "SUPER_FLEX"
- TE = "TE"
- WR = "WR"
-
- @classmethod
- def from_str(cls, s: str) -> NFLRosterPosition:
- if s.upper() == "BN":
- return NFLRosterPosition.BN
- elif s.upper() == "DEF":
- return NFLRosterPosition.DEF
- elif s.upper() == "FLEX":
- return NFLRosterPosition.FLEX
- elif s.upper() == "K":
- return NFLRosterPosition.K
- elif s.upper() == "QB":
- return NFLRosterPosition.QB
- elif s.upper() == "RB":
- return NFLRosterPosition.RB
- elif s.upper() == "SUPER_FLEX":
- return NFLRosterPosition.SUPER_FLEX
- elif s.upper() == "TE":
- return NFLRosterPosition.TE
- elif s.upper() == "WR":
- return NFLRosterPosition.WR
- else:
- cls._handle_unknown_value(NFLRosterPosition, s)
diff --git a/sleeper/enum/nfl/NFLTeam.py b/sleeper/enum/nfl/NFLTeam.py
deleted file mode 100644
index c394890..0000000
--- a/sleeper/enum/nfl/NFLTeam.py
+++ /dev/null
@@ -1,118 +0,0 @@
-from __future__ import annotations
-
-from enum import unique
-from typing import Optional
-
-from sleeper.enum.ModelEnum import ModelEnum
-from sleeper.enum.SportTeam import SportTeam
-
-
-@unique
-class NFLTeam(SportTeam, ModelEnum):
- ARI = "ARI"
- ATL = "ATL"
- BAL = "BAL"
- BUF = "BUF"
- CAR = "CAR"
- CHI = "CHI"
- CIN = "CIN"
- CLE = "CLE"
- DAL = "DAL"
- DEN = "DEN"
- DET = "DET"
- GB = "GB"
- HOU = "HOU"
- IND = "IND"
- OAK = "OAK"
- JAX = "JAX"
- KC = "KC"
- LV = "LV"
- LAC = "LAC"
- LAR = "LAR"
- MIA = "MIA"
- MIN = "MIN"
- NA = "NA"
- NE = "NE"
- NO = "NO"
- NYG = "NYG"
- NYJ = "NYJ"
- PHI = "PHI"
- PIT = "PIT"
- SF = "SF"
- SEA = "SEA"
- TB = "TB"
- TEN = "TEN"
- WAS = "WAS"
-
- @classmethod
- def from_str(cls, s: Optional[str]) -> NFLTeam:
- if s is None:
- return NFLTeam.NA
- elif s.upper() == "ARI":
- return NFLTeam.ARI
- elif s.upper() == "ATL":
- return NFLTeam.ATL
- elif s.upper() == "BAL":
- return NFLTeam.BAL
- elif s.upper() == "BUF":
- return NFLTeam.BUF
- elif s.upper() == "CAR":
- return NFLTeam.CAR
- elif s.upper() == "CHI":
- return NFLTeam.CHI
- elif s.upper() == "CIN":
- return NFLTeam.CIN
- elif s.upper() == "CLE":
- return NFLTeam.CLE
- elif s.upper() == "DAL":
- return NFLTeam.DAL
- elif s.upper() == "DEN":
- return NFLTeam.DEN
- elif s.upper() == "DET":
- return NFLTeam.DET
- elif s.upper() == "GB":
- return NFLTeam.GB
- elif s.upper() == "HOU":
- return NFLTeam.HOU
- elif s.upper() == "IND":
- return NFLTeam.IND
- elif s.upper() == "JAX":
- return NFLTeam.JAX
- elif s.upper() == "KC":
- return NFLTeam.KC
- elif s.upper() == "LV":
- return NFLTeam.LV
- elif s.upper() == "LAC":
- return NFLTeam.LAC
- elif s.upper() == "LAR":
- return NFLTeam.LAR
- elif s.upper() == "MIA":
- return NFLTeam.MIA
- elif s.upper() == "MIN":
- return NFLTeam.MIN
- elif s.upper() == "NE":
- return NFLTeam.NE
- elif s.upper() == "NO":
- return NFLTeam.NO
- elif s.upper() == "NYG":
- return NFLTeam.NYG
- elif s.upper() == "NYJ":
- return NFLTeam.NYJ
- elif s.upper() == "OAK":
- return NFLTeam.OAK
- elif s.upper() == "PHI":
- return NFLTeam.PHI
- elif s.upper() == "PIT":
- return NFLTeam.PIT
- elif s.upper() == "SF":
- return NFLTeam.SF
- elif s.upper() == "SEA":
- return NFLTeam.SEA
- elif s.upper() == "TB":
- return NFLTeam.TB
- elif s.upper() == "TEN":
- return NFLTeam.TEN
- elif s.upper() == "WAS":
- return NFLTeam.WAS
- else:
- cls._handle_unknown_value(NFLTeam, s)
diff --git a/sleeper/enum/nfl/__init__.py b/sleeper/enum/nfl/__init__.py
deleted file mode 100644
index 638fc80..0000000
--- a/sleeper/enum/nfl/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from .NFLPlayerStatus import NFLPlayerStatus
-from .NFLPosition import NFLPosition
-from .NFLRosterPosition import NFLRosterPosition
-from .NFLTeam import NFLTeam
diff --git a/sleeper/exception/SleeperAPIException.py b/sleeper/exception/SleeperAPIException.py
deleted file mode 100644
index 3ba869f..0000000
--- a/sleeper/exception/SleeperAPIException.py
+++ /dev/null
@@ -1,6 +0,0 @@
-class SleeperAPIException(Exception):
- """
- Raised when there is an error with the Sleeper API.
- """
-
- ...
diff --git a/sleeper/exception/__init__.py b/sleeper/exception/__init__.py
deleted file mode 100644
index ed23c90..0000000
--- a/sleeper/exception/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .SleeperAPIException import SleeperAPIException
diff --git a/sleeper/model/DepthChart.py b/sleeper/model/DepthChart.py
deleted file mode 100644
index 979c111..0000000
--- a/sleeper/model/DepthChart.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import annotations
-
-from abc import abstractmethod
-from dataclasses import dataclass
-
-from sleeper.enum import Sport
-
-
-@dataclass(kw_only=True)
-class DepthChart:
- """
- Parent for all DepthChart models for each sport.
- """
-
- ...
-
- @staticmethod
- def model(sport: Sport) -> DepthChart:
- from sleeper.model.nfl.NFLDepthChart import NFLDepthChart
-
- if sport == Sport.NFL:
- return NFLDepthChart
- else:
- raise ValueError(f"Cannot find DepthChart for sport: '{sport.name}'.")
-
- @staticmethod
- @abstractmethod
- def from_dict(d: dict) -> DepthChart:
- ...
diff --git a/sleeper/model/Draft.py b/sleeper/model/Draft.py
deleted file mode 100644
index e5f4d17..0000000
--- a/sleeper/model/Draft.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.enum.DraftStatus import DraftStatus
-from sleeper.enum.DraftType import DraftType
-from sleeper.enum.SeasonType import SeasonType
-from sleeper.enum.Sport import Sport
-from sleeper.model.DraftMetadata import DraftMetadata
-from sleeper.model.DraftSettings import DraftSettings
-
-
-@dataclass(kw_only=True)
-class Draft:
- created: int
- creators: list[str]
- draft_id: str
- draft_order: dict[str, int]
- last_message_id: str
- last_message_time: int
- last_picked: int
- league_id: str
- metadata: DraftMetadata
- season: str
- season_type: SeasonType
- settings: DraftSettings
- slot_to_roster_id: dict[str, int]
- sport: Sport
- start_time: int
- status: DraftStatus
- type: DraftType
-
- @staticmethod
- def from_dict(draft_dict: dict) -> Draft:
- return Draft(
- type=DraftType.from_str(draft_dict.get("type")),
- status=DraftStatus.from_str(draft_dict.get("status")),
- start_time=draft_dict.get("start_time"),
- sport=Sport.from_str(draft_dict.get("sport")),
- settings=DraftSettings.from_dict(draft_dict.get("settings")),
- season_type=SeasonType.from_str(draft_dict.get("season_type")),
- season=draft_dict.get("season"),
- metadata=DraftMetadata.from_dict(draft_dict.get("metadata")),
- league_id=draft_dict.get("league_id"),
- last_picked=draft_dict.get("last_picked"),
- last_message_time=draft_dict.get("last_message_time"),
- last_message_id=draft_dict.get("last_message_id"),
- draft_order=draft_dict.get("draft_order"),
- slot_to_roster_id=draft_dict.get("slot_to_roster_id"),
- draft_id=draft_dict.get("draft_id"),
- creators=draft_dict.get("creators"),
- created=draft_dict.get("created"),
- )
-
- @staticmethod
- def from_dict_list(draft_dict_list: list) -> list[Draft]:
- drafts = list()
- for draft_dict in draft_dict_list:
- drafts.append(Draft.from_dict(draft_dict))
- return drafts
diff --git a/sleeper/model/DraftMetadata.py b/sleeper/model/DraftMetadata.py
deleted file mode 100644
index cd25586..0000000
--- a/sleeper/model/DraftMetadata.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.enum.ScoringType import ScoringType
-
-
-@dataclass(kw_only=True)
-class DraftMetadata:
- description: str
- name: str
- scoring_type: ScoringType
-
- @staticmethod
- def from_dict(draft_metadata_dict: dict) -> DraftMetadata:
- return DraftMetadata(
- scoring_type=ScoringType.from_str(draft_metadata_dict.get("scoring_type")),
- name=draft_metadata_dict.get("name"),
- description=draft_metadata_dict.get("description"),
- )
diff --git a/sleeper/model/DraftPick.py b/sleeper/model/DraftPick.py
deleted file mode 100644
index 5f36368..0000000
--- a/sleeper/model/DraftPick.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class DraftPick:
- draft_id: int
- owner_id: int
- previous_owner_id: int
- roster_id: int
- round: int
- season: str
-
- @staticmethod
- def from_dict(draft_pick_dict: dict) -> DraftPick:
- return DraftPick(
- season=draft_pick_dict.get("season"),
- round=draft_pick_dict.get("round"),
- roster_id=draft_pick_dict.get("roster_id"),
- previous_owner_id=draft_pick_dict.get("previous_owner_id"),
- owner_id=draft_pick_dict.get("owner_id"),
- draft_id=draft_pick_dict.get("draft_id"),
- )
-
- @classmethod
- def from_dict_list(cls, draft_pick_dict_list: list) -> list[DraftPick]:
- draft_picks = list()
- for draft_pick_dict in draft_pick_dict_list:
- draft_picks.append(DraftPick.from_dict(draft_pick_dict))
- return draft_picks
diff --git a/sleeper/model/DraftSettings.py b/sleeper/model/DraftSettings.py
deleted file mode 100644
index 276e9be..0000000
--- a/sleeper/model/DraftSettings.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class DraftSettings:
- alpha_sort: int
- cpu_autopick: int
- enforce_position_limits: int
- nomination_timer: int
- pick_timer: int
- player_type: int
- reversal_round: int
- rounds: int
- slots_bn: int
- slots_flex: int
- slots_qb: int
- slots_rb: int
- slots_super_flex: int
- slots_te: int
- slots_wr: int
- teams: int
-
- @staticmethod
- def from_dict(draft_settings_dict: dict) -> DraftSettings:
- return DraftSettings(
- teams=draft_settings_dict.get("teams"),
- slots_wr=draft_settings_dict.get("slots_wr"),
- slots_te=draft_settings_dict.get("slots_te"),
- slots_rb=draft_settings_dict.get("slots_rb"),
- slots_qb=draft_settings_dict.get("slots_qb"),
- slots_flex=draft_settings_dict.get("slots_flex"),
- slots_super_flex=draft_settings_dict.get("slots_super_flex"),
- slots_bn=draft_settings_dict.get("slots_bn"),
- rounds=draft_settings_dict.get("rounds"),
- pick_timer=draft_settings_dict.get("pick_timer"),
- reversal_round=draft_settings_dict.get("reversal_round"),
- player_type=draft_settings_dict.get("player_type"),
- nomination_timer=draft_settings_dict.get("nomination_timer"),
- enforce_position_limits=draft_settings_dict.get("enforce_position_limits"),
- cpu_autopick=draft_settings_dict.get("cpu_autopick"),
- alpha_sort=draft_settings_dict.get("alpha_sort"),
- )
diff --git a/sleeper/model/FAABTransaction.py b/sleeper/model/FAABTransaction.py
deleted file mode 100644
index 2db6ef7..0000000
--- a/sleeper/model/FAABTransaction.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class FAABTransaction:
- amount: int
- receiver: int
- sender: int
-
- @staticmethod
- def from_dict(faab_transaction_dict: dict) -> FAABTransaction:
- return FAABTransaction(
- sender=faab_transaction_dict.get("sender"),
- receiver=faab_transaction_dict.get("receiver"),
- amount=faab_transaction_dict.get("amount"),
- )
-
- @staticmethod
- def from_dict_list(faab_transaction_dict_list: list) -> list[FAABTransaction]:
- faab_transactions = list()
- for faab_transaction_dict in faab_transaction_dict_list:
- faab_transactions.append(FAABTransaction.from_dict(faab_transaction_dict))
- return faab_transactions
diff --git a/sleeper/model/FromPlayoffMatchup.py b/sleeper/model/FromPlayoffMatchup.py
deleted file mode 100644
index 2a605c2..0000000
--- a/sleeper/model/FromPlayoffMatchup.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from typing import Optional
-
-
-@dataclass(kw_only=True)
-class FromPlayoffMatchup:
- lost_matchup_id: int
- won_matchup_id: int
-
- @staticmethod
- def from_dict(from_playoff_matchup_object: Optional[dict]) -> Optional[FromPlayoffMatchup]:
- if from_playoff_matchup_object is None:
- return None
- return FromPlayoffMatchup(
- won_matchup_id=from_playoff_matchup_object.get("w"),
- lost_matchup_id=from_playoff_matchup_object.get("l"),
- )
diff --git a/sleeper/model/Game.py b/sleeper/model/Game.py
deleted file mode 100644
index bcf8b65..0000000
--- a/sleeper/model/Game.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from __future__ import annotations
-
-import datetime
-from dataclasses import dataclass
-
-from sleeper.enum import Sport, SportTeam
-from sleeper.enum.SeasonStatus import SeasonStatus
-
-
-@dataclass(kw_only=True)
-class Game:
- away: SportTeam
- date: date
- game_id: str
- home: SportTeam
- status: SeasonStatus
- week: int
-
- @staticmethod
- def from_dict_list(game_dict_list: list, sport: Sport) -> list[Game]:
- game_list = list()
- for game_dict in game_dict_list:
- game_list.append(Game.from_dict(game_dict, sport))
- return game_list
-
- @staticmethod
- def from_dict(game_dict: dict, sport: Sport) -> Game:
- return Game(
- week=game_dict.get("week"),
- status=SeasonStatus.from_str(game_dict.get("status")),
- home=SportTeam.enum(sport).from_str(game_dict.get("home")),
- game_id=game_dict.get("game_id"),
- date=datetime.datetime.strptime(game_dict.get("date"), "%Y-%m-%d").date(),
- away=SportTeam.enum(sport).from_str(game_dict.get("away")),
- )
diff --git a/sleeper/model/League.py b/sleeper/model/League.py
deleted file mode 100644
index a1fb682..0000000
--- a/sleeper/model/League.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.enum.RosterPosition import RosterPosition
-from sleeper.enum.SeasonStatus import SeasonStatus
-from sleeper.enum.SeasonType import SeasonType
-from sleeper.enum.Sport import Sport
-from sleeper.model.LeagueMetadata import LeagueMetadata
-from sleeper.model.LeagueSettings import LeagueSettings
-from sleeper.model.ScoringSettings import ScoringSettings
-
-
-@dataclass(kw_only=True)
-class League:
- avatar: str
- bracket_id: int
- draft_id: str
- league_id: str
- metadata: LeagueMetadata
- name: str
- previous_league_id: str
- roster_positions: list[RosterPosition]
- scoring_settings: ScoringSettings
- season: str
- season_type: SeasonType
- settings: LeagueSettings
- shard: int
- sport: Sport
- status: SeasonStatus
- total_rosters: int
-
- @staticmethod
- def from_dict(league_dict: dict) -> League:
- sport = Sport.from_str(league_dict.get("sport"))
-
- return League(
- total_rosters=league_dict.get("total_rosters"),
- status=SeasonStatus.from_str(league_dict.get("status")),
- sport=sport,
- settings=LeagueSettings.from_dict(league_dict.get("settings")),
- shard=league_dict.get("shard"),
- season_type=SeasonType.from_str(league_dict.get("season_type")),
- season=league_dict.get("season"),
- scoring_settings=ScoringSettings.from_dict(league_dict.get("scoring_settings")),
- roster_positions=[
- RosterPosition.enum(sport).from_str(roster_position)
- for roster_position in league_dict.get("roster_positions")
- ],
- previous_league_id=league_dict.get("previous_league_id"),
- name=league_dict.get("name"),
- league_id=league_dict.get("league_id"),
- metadata=LeagueMetadata.from_dict(league_dict.get("metadata")),
- draft_id=league_dict.get("draft_id"),
- avatar=league_dict.get("avatar"),
- bracket_id=league_dict.get("bracket_id"),
- )
-
- @staticmethod
- def from_dict_list(league_dict_list: list) -> list[League]:
- leagues = list()
- for league_dict in league_dict_list:
- leagues.append(League.from_dict(league_dict))
- return leagues
diff --git a/sleeper/model/LeagueMetadata.py b/sleeper/model/LeagueMetadata.py
deleted file mode 100644
index d57d4b4..0000000
--- a/sleeper/model/LeagueMetadata.py
+++ /dev/null
@@ -1,52 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class LeagueMetadata:
- auto_continue: str
- # this pattern for divisions is weird
- # putting 8 to be safe/cover most (hopefully all) cases
- division_1: str
- division_1_avatar: str
- division_2: str
- division_2_avatar: str
- division_3: str
- division_3_avatar: str
- division_4: str
- division_4_avatar: str
- division_5: str
- division_5_avatar: str
- division_6: str
- division_6_avatar: str
- division_7: str
- division_7_avatar: str
- division_8: str
- division_8_avatar: str
- keeper_deadline: str
- latest_league_winner_roster_id: str
-
- @staticmethod
- def from_dict(metadata_dict: dict) -> LeagueMetadata:
- return LeagueMetadata(
- auto_continue=metadata_dict.get("auto_continue"),
- division_1=metadata_dict.get("division_1"),
- division_1_avatar=metadata_dict.get("division_1_avatar"),
- division_2=metadata_dict.get("division_2"),
- division_2_avatar=metadata_dict.get("division_2_avatar"),
- division_3=metadata_dict.get("division_3"),
- division_3_avatar=metadata_dict.get("division_3_avatar"),
- division_4=metadata_dict.get("division_4"),
- division_4_avatar=metadata_dict.get("division_4_avatar"),
- division_5=metadata_dict.get("division_5"),
- division_5_avatar=metadata_dict.get("division_5_avatar"),
- division_6=metadata_dict.get("division_6"),
- division_6_avatar=metadata_dict.get("division_6_avatar"),
- division_7=metadata_dict.get("division_7"),
- division_7_avatar=metadata_dict.get("division_7_avatar"),
- division_8=metadata_dict.get("division_8"),
- division_8_avatar=metadata_dict.get("division_8_avatar"),
- keeper_deadline=metadata_dict.get("keeper_deadline"),
- latest_league_winner_roster_id=metadata_dict.get("latest_league_winner_roster_id"),
- )
diff --git a/sleeper/model/LeagueSettings.py b/sleeper/model/LeagueSettings.py
deleted file mode 100644
index 857fb12..0000000
--- a/sleeper/model/LeagueSettings.py
+++ /dev/null
@@ -1,110 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.enum.PlayoffRoundType import PlayoffRoundType
-
-
-@dataclass(kw_only=True)
-class LeagueSettings:
- bench_lock: int
- best_ball: int
- capacity_override: int
- commissioner_direct_invite: int
- daily_waivers: int
- daily_waivers_days: int
- daily_waivers_hour: int
- daily_waivers_last_ran: int
- disable_adds: int
- disable_trades: int
- divisions: int
- draft_rounds: int
- last_report: int
- last_scored_leg: int
- league_average_match: int
- leg: int
- max_keepers: int
- num_teams: int
- offseason_adds: int
- pick_trading: int
- playoff_round_type: int
- playoff_round_type_enum: PlayoffRoundType # a more clear representation of the "playoff_round_type" field
- playoff_seed_type: int
- playoff_teams: int
- playoff_type: int
- playoff_week_start: int
- reserve_allow_cov: int
- reserve_allow_dnr: int
- reserve_allow_na: int
- reserve_allow_out: int
- reserve_allow_sus: int
- reserve_slots: int
- start_week: int
- taxi_allow_vets: int
- taxi_slots: int
- taxi_years: int
- trade_deadline: int
- trade_review_days: int
- type: int
- waiver_bid_min: int
- waiver_budget: int
- waiver_clear_days: int
- waiver_day_of_week: int
- waiver_type: int
-
- @staticmethod
- def from_dict(settings_dict: dict) -> LeagueSettings:
- # NOTE: it seems older sleeper leagues use "playoff_type" instead of "playoff_round_type".
- # if "playoff_round_type" is not present, we can use "playoff_type" to populate the enum.
- playff_round_type = settings_dict.get("playoff_round_type")
- playoff_type = settings_dict.get("playoff_type")
- raw_playoff_round_type = (
- playff_round_type if playff_round_type is not None else playoff_type
- )
- playoff_round_type_enum = PlayoffRoundType.from_int(raw_playoff_round_type)
- return LeagueSettings(
- waiver_type=settings_dict.get("waiver_type"),
- waiver_day_of_week=settings_dict.get("waiver_day_of_week"),
- waiver_clear_days=settings_dict.get("waiver_clear_days"),
- waiver_budget=settings_dict.get("waiver_budget"),
- type=settings_dict.get("type"),
- trade_review_days=settings_dict.get("trade_review_days"),
- trade_deadline=settings_dict.get("trade_deadline"),
- start_week=settings_dict.get("start_week"),
- reserve_slots=settings_dict.get("reserve_slots"),
- reserve_allow_out=settings_dict.get("reserve_allow_out"),
- playoff_week_start=settings_dict.get("playoff_week_start"),
- playoff_teams=settings_dict.get("playoff_teams"),
- pick_trading=settings_dict.get("pick_trading"),
- offseason_adds=settings_dict.get("offseason_adds"),
- num_teams=settings_dict.get("num_teams"),
- max_keepers=settings_dict.get("max_keepers"),
- leg=settings_dict.get("leg"),
- last_scored_leg=settings_dict.get("last_scored_leg"),
- last_report=settings_dict.get("last_report"),
- draft_rounds=settings_dict.get("draft_rounds"),
- bench_lock=settings_dict.get("bench_lock"),
- best_ball=settings_dict.get("best_ball"),
- capacity_override=settings_dict.get("capacity_override"),
- commissioner_direct_invite=settings_dict.get("commissioner_direct_invite"),
- daily_waivers=settings_dict.get("daily_waivers"),
- daily_waivers_days=settings_dict.get("daily_waivers_days"),
- daily_waivers_hour=settings_dict.get("daily_waivers_hour"),
- daily_waivers_last_ran=settings_dict.get("daily_waivers_last_ran"),
- disable_adds=settings_dict.get("disable_adds"),
- disable_trades=settings_dict.get("disable_trades"),
- divisions=settings_dict.get("divisions"),
- league_average_match=settings_dict.get("league_average_match"),
- playoff_round_type=playff_round_type,
- playoff_round_type_enum=playoff_round_type_enum,
- playoff_seed_type=settings_dict.get("playoff_seed_type"),
- playoff_type=playoff_type,
- reserve_allow_cov=settings_dict.get("reserve_allow_cov"),
- reserve_allow_dnr=settings_dict.get("reserve_allow_dnr"),
- reserve_allow_na=settings_dict.get("reserve_allow_na"),
- reserve_allow_sus=settings_dict.get("reserve_allow_sus"),
- taxi_allow_vets=settings_dict.get("taxi_allow_vets"),
- taxi_slots=settings_dict.get("taxi_slots"),
- taxi_years=settings_dict.get("taxi_years"),
- waiver_bid_min=settings_dict.get("waiver_bid_min"),
- )
diff --git a/sleeper/model/Matchup.py b/sleeper/model/Matchup.py
deleted file mode 100644
index 87e80e8..0000000
--- a/sleeper/model/Matchup.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from typing import Any
-
-
-@dataclass(kw_only=True)
-class Matchup:
- custom_points: Any # not sure what this is
- matchup_id: int
- players: list[str]
- players_points: dict[str, float]
- points: float
- roster_id: int
- starters: list[str]
- starters_points: list[float]
-
- @staticmethod
- def from_dict(matchup_object_dict: dict) -> Matchup:
- return Matchup(
- starters=matchup_object_dict.get("starters"),
- roster_id=matchup_object_dict.get("roster_id"),
- players=matchup_object_dict.get("players"),
- matchup_id=matchup_object_dict.get("matchup_id"),
- points=matchup_object_dict.get("points"),
- custom_points=matchup_object_dict.get("custom_points"),
- players_points=matchup_object_dict.get("players_points"),
- starters_points=matchup_object_dict.get("starters_points"),
- )
-
- @staticmethod
- def from_dict_list(matchup_dict_list: list) -> list[Matchup]:
- matchups = list()
- for matchup_dict in matchup_dict_list:
- matchups.append(Matchup.from_dict(matchup_dict))
- return matchups
diff --git a/sleeper/model/Player.py b/sleeper/model/Player.py
deleted file mode 100644
index f923aac..0000000
--- a/sleeper/model/Player.py
+++ /dev/null
@@ -1,136 +0,0 @@
-from __future__ import annotations
-
-import datetime
-from dataclasses import dataclass
-from datetime import date
-from typing import Any, Optional
-
-from sleeper.enum.InjuryStatus import InjuryStatus
-from sleeper.enum.PlayerPosition import PlayerPosition
-from sleeper.enum.PlayerStatus import PlayerStatus
-from sleeper.enum.PracticeParticipation import PracticeParticipation
-from sleeper.enum.Sport import Sport
-from sleeper.enum.SportTeam import SportTeam
-
-
-@dataclass(kw_only=True)
-class Player:
- active: bool
- age: int
- birth_city: str
- birth_country: str
- birth_date: date
- birth_state: str
- college: str
- depth_chart_order: int
- depth_chart_position: int
- espn_id: str
- fantasy_data_id: int
- fantasy_positions: list[PlayerPosition]
- first_name: str
- gsis_id: str
- hashtag: str
- height: str
- high_school: str
- injury_body_part: str
- injury_notes: str
- injury_start_date: str
- injury_status: InjuryStatus
- last_name: str
- metadata: dict[str, Any]
- news_updated: int
- number: int
- pandascore_id: str
- player_id: str
- position: PlayerPosition
- practice_description: str
- practice_participation: PracticeParticipation
- rotowire_id: int
- rotoworld_id: int
- search_first_name: str
- search_full_name: str
- search_last_name: str
- search_rank: int
- sport: Sport
- sportradar_id: str
- stats_id: str
- status: PlayerStatus
- swish_id: int
- team: SportTeam
- weight: str
- yahoo_id: str
- years_exp: int
-
- @staticmethod
- def from_dict(player_dict: dict, sport: Sport) -> Optional[Player]:
- if player_dict is None:
- return None
- given_fantasy_positions = player_dict.get("fantasy_positions")
- fantasy_positions = (
- [PlayerPosition.enum(sport).from_str(pos) for pos in given_fantasy_positions]
- if given_fantasy_positions is not None
- else None
- )
-
- birth_date = (
- None
- if player_dict.get("birth_date") is None
- else datetime.datetime.strptime(player_dict.get("birth_date"), "%Y-%m-%d").date()
- )
-
- return Player(
- hashtag=player_dict.get("hashtag"),
- depth_chart_position=player_dict.get("depth_chart_position"),
- status=PlayerStatus.enum(sport).from_str(player_dict.get("status")),
- sport=sport,
- fantasy_positions=fantasy_positions,
- number=player_dict.get("number"),
- search_last_name=player_dict.get("search_last_name"),
- injury_start_date=player_dict.get("injury_start_date"),
- weight=player_dict.get("weight"),
- position=PlayerPosition.enum(sport).from_str(player_dict.get("position")),
- practice_participation=PracticeParticipation.from_str(
- player_dict.get("practice_participation")
- ),
- sportradar_id=player_dict.get("sportradar_id"),
- team=SportTeam.enum(sport).from_str(player_dict.get("team")),
- last_name=player_dict.get("last_name"),
- college=player_dict.get("college"),
- fantasy_data_id=player_dict.get("fantasy_data_id"),
- injury_status=InjuryStatus.from_str(player_dict.get("injury_status")),
- player_id=player_dict.get("player_id"),
- height=player_dict.get("height"),
- search_full_name=player_dict.get("search_full_name"),
- age=player_dict.get("age"),
- stats_id=player_dict.get("stats_id"),
- birth_country=player_dict.get("birth_country"),
- espn_id=player_dict.get("espn_id"),
- search_rank=player_dict.get("search_rank"),
- first_name=player_dict.get("first_name"),
- depth_chart_order=player_dict.get("depth_chart_order"),
- years_exp=player_dict.get("years_exp"),
- rotowire_id=player_dict.get("rotowire_id"),
- rotoworld_id=player_dict.get("rotoworld_id"),
- search_first_name=player_dict.get("search_first_name"),
- yahoo_id=player_dict.get("yahoo_id"),
- swish_id=player_dict.get("swish_id"),
- birth_city=player_dict.get("birth_city"),
- injury_notes=player_dict.get("injury_notes"),
- gsis_id=player_dict.get("gsis_id"),
- birth_state=player_dict.get("birth_state"),
- practice_description=player_dict.get("practice_description"),
- pandascore_id=player_dict.get("pandascore_id"),
- high_school=player_dict.get("high_school"),
- news_updated=player_dict.get("news_updated"),
- metadata=player_dict.get("metadata"),
- injury_body_part=player_dict.get("injury_body_part"),
- birth_date=birth_date,
- active=player_dict.get("active"),
- )
-
- @staticmethod
- def dict_by_id(player_dict_list: list, sport: Sport) -> dict[str, Player]:
- players_by_id = dict()
- for player_id in player_dict_list:
- players_by_id[player_id] = Player.from_dict(player_dict_list[player_id], sport)
- return players_by_id
diff --git a/sleeper/model/PlayerDraftPick.py b/sleeper/model/PlayerDraftPick.py
deleted file mode 100644
index 2867ad2..0000000
--- a/sleeper/model/PlayerDraftPick.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.enum.Sport import Sport
-from sleeper.model.PlayerDraftPickMetadata import PlayerDraftPickMetadata
-
-
-@dataclass(kw_only=True)
-class PlayerDraftPick:
- draft_id: str
- draft_slot: int
- is_keeper: bool
- metadata: PlayerDraftPickMetadata
- pick_no: int
- picked_by: str
- player_id: str
- roster_id: str
- round: int
-
- @staticmethod
- def from_dict(player_draft_pick_dict: dict, sport: Sport) -> PlayerDraftPick:
- return PlayerDraftPick(
- player_id=player_draft_pick_dict.get("player_id"),
- picked_by=player_draft_pick_dict.get("picked_by"),
- roster_id=player_draft_pick_dict.get("roster_id"),
- round=player_draft_pick_dict.get("round"),
- draft_slot=player_draft_pick_dict.get("draft_slot"),
- pick_no=player_draft_pick_dict.get("pick_no"),
- metadata=PlayerDraftPickMetadata.from_dict(
- player_draft_pick_dict.get("metadata"), sport
- ),
- is_keeper=player_draft_pick_dict.get("is_keeper", False),
- draft_id=player_draft_pick_dict.get("draft_id"),
- )
-
- @staticmethod
- def from_dict_list(player_draft_pick_dict_list: list, sport: Sport) -> list[PlayerDraftPick]:
- player_draft_picks = list()
- for player_draft_pick in player_draft_pick_dict_list:
- player_draft_picks.append(PlayerDraftPick.from_dict(player_draft_pick, sport))
- return player_draft_picks
diff --git a/sleeper/model/PlayerDraftPickMetadata.py b/sleeper/model/PlayerDraftPickMetadata.py
deleted file mode 100644
index 6782cc6..0000000
--- a/sleeper/model/PlayerDraftPickMetadata.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.enum.InjuryStatus import InjuryStatus
-from sleeper.enum.PlayerPosition import PlayerPosition
-from sleeper.enum.PlayerStatus import PlayerStatus
-from sleeper.enum.Sport import Sport
-from sleeper.enum.SportTeam import SportTeam
-
-
-@dataclass(kw_only=True)
-class PlayerDraftPickMetadata:
- first_name: str
- injury_status: InjuryStatus
- last_name: str
- news_updated: str
- number: str
- player_id: str
- position: PlayerPosition
- sport: Sport
- status: PlayerStatus
- team: SportTeam
-
- @staticmethod
- def from_dict(player_draft_pick_metadata_dict: dict, sport: Sport) -> PlayerDraftPickMetadata:
- return PlayerDraftPickMetadata(
- team=SportTeam.enum(sport).from_str(player_draft_pick_metadata_dict.get("team")),
- status=PlayerStatus.enum(sport).from_str(player_draft_pick_metadata_dict.get("status")),
- sport=Sport.from_str(player_draft_pick_metadata_dict.get("sport")),
- position=PlayerPosition.enum(sport).from_str(
- player_draft_pick_metadata_dict.get("position")
- ),
- player_id=player_draft_pick_metadata_dict.get("player_id"),
- number=player_draft_pick_metadata_dict.get("number"),
- news_updated=player_draft_pick_metadata_dict.get("news_updated"),
- first_name=player_draft_pick_metadata_dict.get("first_name"),
- last_name=player_draft_pick_metadata_dict.get("last_name"),
- injury_status=InjuryStatus.from_str(
- player_draft_pick_metadata_dict.get("injury_status")
- ),
- )
diff --git a/sleeper/model/PlayerStats.py b/sleeper/model/PlayerStats.py
deleted file mode 100644
index b5e0b9b..0000000
--- a/sleeper/model/PlayerStats.py
+++ /dev/null
@@ -1,58 +0,0 @@
-from __future__ import annotations
-
-import datetime
-from dataclasses import dataclass
-
-from sleeper.enum import SeasonType, Sport, SportTeam
-from sleeper.enum.Category import Category
-from sleeper.enum.Company import Company
-from sleeper.model import Player
-from sleeper.model.Stats import Stats
-
-
-@dataclass(kw_only=True)
-class PlayerStats:
- category: Category
- company: Company
- date: date
- game_id: str
- opponent: SportTeam
- player: Player
- player_id: str
- season: str
- season_type: SeasonType
- sport: Sport
- stats: Stats
- team: SportTeam
- week: int
-
- @staticmethod
- def from_dict_list(player_stats_dict_list: list) -> list[PlayerStats]:
- player_stats_list = list()
- for player_stats_dict in player_stats_dict_list:
- player_stats_list.append(PlayerStats.from_dict(player_stats_dict))
- return player_stats_list
-
- @staticmethod
- def from_dict(player_stats_dict: dict) -> PlayerStats:
- sport = Sport.from_str(player_stats_dict.get("sport"))
- date_ = (
- None
- if player_stats_dict.get("date") is None
- else datetime.datetime.strptime(player_stats_dict.get("date"), "%Y-%m-%d").date()
- )
- return PlayerStats(
- category=Category.from_str(player_stats_dict.get("category")),
- company=Company.from_str(player_stats_dict.get("company")),
- date=date_,
- game_id=player_stats_dict.get("game_id"),
- opponent=SportTeam.enum(sport).from_str(player_stats_dict.get("opponent")),
- player=Player.from_dict(player_stats_dict.get("player"), sport),
- player_id=player_stats_dict.get("player_id"),
- season=player_stats_dict.get("season"),
- season_type=SeasonType.from_str(player_stats_dict.get("season_type")),
- sport=sport,
- stats=Stats.model(sport).from_dict(player_stats_dict.get("stats")),
- team=SportTeam.enum(sport).from_str(player_stats_dict.get("team")),
- week=player_stats_dict.get("week"),
- )
diff --git a/sleeper/model/PlayerTrend.py b/sleeper/model/PlayerTrend.py
deleted file mode 100644
index 38adef2..0000000
--- a/sleeper/model/PlayerTrend.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class PlayerTrend:
- count: int
- player_id: str
-
- @staticmethod
- def from_dict(player_trend_dict: dict) -> PlayerTrend:
- return PlayerTrend(
- player_id=player_trend_dict.get("player_id"), count=player_trend_dict.get("count")
- )
-
- @staticmethod
- def from_dict_list(player_trend_dict_list: list) -> list[PlayerTrend]:
- player_trends = list()
- for player_trend_dict in player_trend_dict_list:
- player_trends.append(PlayerTrend.from_dict(player_trend_dict))
- return player_trends
diff --git a/sleeper/model/PlayoffMatchup.py b/sleeper/model/PlayoffMatchup.py
deleted file mode 100644
index 0e09004..0000000
--- a/sleeper/model/PlayoffMatchup.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.model.FromPlayoffMatchup import FromPlayoffMatchup
-
-
-@dataclass(kw_only=True)
-class PlayoffMatchup:
- losing_roster_id: int
- matchup_id: int
- round: int
- team_1_from: FromPlayoffMatchup
- team_1_roster_id: int
- team_2_from: FromPlayoffMatchup
- team_2_roster_id: int
- winning_roster_id: int
- p: int # no documentation on what this field means
-
- @staticmethod
- def from_dict(playoff_matchup_object: dict) -> PlayoffMatchup:
- return PlayoffMatchup(
- round=playoff_matchup_object.get("r"),
- matchup_id=playoff_matchup_object.get("m"),
- team_1_roster_id=playoff_matchup_object.get("t1"),
- team_2_roster_id=playoff_matchup_object.get("t2"),
- winning_roster_id=playoff_matchup_object.get("w"),
- losing_roster_id=playoff_matchup_object.get("l"),
- team_1_from=FromPlayoffMatchup.from_dict(playoff_matchup_object.get("t1_from")),
- team_2_from=FromPlayoffMatchup.from_dict(playoff_matchup_object.get("t2_from")),
- p=playoff_matchup_object.get("p"),
- )
-
- @staticmethod
- def from_dict_str(playoff_matchup_dict_list: list) -> list[PlayoffMatchup]:
- playoff_matchups = list()
- for playoff_matchup_dict in playoff_matchup_dict_list:
- playoff_matchups.append(PlayoffMatchup.from_dict(playoff_matchup_dict))
- return playoff_matchups
diff --git a/sleeper/model/Roster.py b/sleeper/model/Roster.py
deleted file mode 100644
index 97f4960..0000000
--- a/sleeper/model/Roster.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from typing import Any
-
-from sleeper.model.RosterSettings import RosterSettings
-
-
-@dataclass(kw_only=True)
-class Roster:
- co_owners: Any # not sure what this is
- league_id: str
- metadata: dict[str, Any] # not sure what this is
- owner_id: str
- players: list[str]
- player_map: Any # not sure what this is
- reserve: list
- roster_id: int
- settings: RosterSettings
- starters: list[str]
- taxi: Any # not sure what this is
-
- @staticmethod
- def from_dict(roster_dict: dict) -> Roster:
- return Roster(
- starters=roster_dict.get("starters"),
- settings=RosterSettings.from_dict(roster_dict.get("settings")),
- roster_id=roster_dict.get("roster_id"),
- reserve=roster_dict.get("reserve"),
- players=roster_dict.get("players"),
- owner_id=roster_dict.get("owner_id"),
- league_id=roster_dict.get("league_id"),
- co_owners=roster_dict.get("co_owners"),
- metadata=roster_dict.get("metadata"),
- player_map=roster_dict.get("player_map"),
- taxi=roster_dict.get("taxi"),
- )
-
- @staticmethod
- def from_dict_list(roster_dict_list: list) -> list[Roster]:
- rosters = list()
- for roster_dict in roster_dict_list:
- rosters.append(Roster.from_dict(roster_dict))
- return rosters
diff --git a/sleeper/model/RosterSettings.py b/sleeper/model/RosterSettings.py
deleted file mode 100644
index ee7d123..0000000
--- a/sleeper/model/RosterSettings.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class RosterSettings:
- division: int
- fpts: int
- fpts_against: int
- fpts_against_decimal: int
- fpts_decimal: int
- losses: int
- ppts: int
- ppts_decimal: int
- ties: int
- total_moves: int
- waiver_adjusted: int
- waiver_budget_used: int
- waiver_position: int
- wins: int
-
- @classmethod
- def from_dict(cls, roster_settings_dict: dict) -> RosterSettings:
- return RosterSettings(
- division=roster_settings_dict.get("division"),
- wins=roster_settings_dict.get("wins"),
- waiver_position=roster_settings_dict.get("waiver_position"),
- waiver_budget_used=roster_settings_dict.get("waiver_budget_used"),
- total_moves=roster_settings_dict.get("total_moves"),
- ties=roster_settings_dict.get("ties"),
- losses=roster_settings_dict.get("losses"),
- fpts_decimal=roster_settings_dict.get("fpts_decimal"),
- fpts_against_decimal=roster_settings_dict.get("fpts_against_decimal"),
- fpts_against=roster_settings_dict.get("fpts_against"),
- fpts=roster_settings_dict.get("fpts"),
- ppts_decimal=roster_settings_dict.get("ppts_decimal"),
- ppts=roster_settings_dict.get("ppts"),
- waiver_adjusted=roster_settings_dict.get("waiver_adjusted"),
- )
diff --git a/sleeper/model/ScoringSettings.py b/sleeper/model/ScoringSettings.py
deleted file mode 100644
index f0dd1d5..0000000
--- a/sleeper/model/ScoringSettings.py
+++ /dev/null
@@ -1,208 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class ScoringSettings:
- blk_kick: float
- blk_kick_ret_yd: float
- bonus_pass_yd_300: float
- bonus_pass_yd_400: float
- bonus_rec_yd_100: float
- bonus_rec_yd_200: float
- bonus_rush_yd_100: float
- bonus_rush_yd_200: float
- def_2pt: float
- def_pass_def: float
- def_st_ff: float
- def_st_fum_rec: float
- def_st_td: float
- def_td: float
- ff: float
- fg_ret_yd: float
- fgm: float
- fgm_0_19: float
- fgm_20_29: float
- fgm_30_39: float
- fgm_40_49: float
- fgm_50p: float
- fgmiss: float
- fgmiss_0_19: float
- fgmiss_20_29: float
- fgmiss_30_39: float
- fgmiss_40_49: float
- fgmiss_50p: float
- fum: float
- fum_lost: float
- fum_rec: float
- fum_ret_yd: float
- idp_blk_kick: float
- idp_def_td: float
- idp_ff: float
- idp_fum_rec: float
- idp_int: float
- idp_pass_def: float
- idp_sack: float
- idp_safe: float
- idp_tkl: float
- idp_tkl_ast: float
- idp_tkl_solo: float
- int: float
- int_ret_yd: float
- kr_td: float
- kr_yd: float
- pass_2pt: float
- pass_att: float
- pass_cmp: float
- pass_cmp_40p: float
- pass_inc: float
- pass_int: float
- pass_sack: float
- pass_td: float
- pass_yd: float
- pr_td: float
- pr_yd: float
- pts_allow_0: float
- pts_allow_14_20: float
- pts_allow_1_6: float
- pts_allow_21_27: float
- pts_allow_28_34: float
- pts_allow_35p: float
- pts_allow_7_13: float
- qb_hit: float
- rec: float
- rec_2pt: float
- rec_40p: float
- rec_td: float
- rec_yd: float
- rush_2pt: float
- rush_40p: float
- rush_att: float
- rush_td: float
- rush_yd: float
- sack: float
- sack_yd: float
- safe: float
- st_ff: float
- st_fum_rec: float
- st_td: float
- st_tkl_solo: float
- tkl: float
- tkl_ast: float
- tkl_loss: float
- tkl_solo: float
- xpm: float
- xpmiss: float
- yds_allow_0_100: float
- yds_allow_100_199: float
- yds_allow_200_299: float
- yds_allow_300_349: float
- yds_allow_350_399: float
- yds_allow_400_449: float
- yds_allow_450_499: float
- yds_allow_500_549: float
- yds_allow_550p: float
-
- @staticmethod
- def from_dict(scoring_settings_dict: dict) -> ScoringSettings:
- return ScoringSettings(
- yds_allow_0_100=scoring_settings_dict.get("yds_allow_0_100"),
- yds_allow_100_199=scoring_settings_dict.get("yds_allow_100_199"),
- yds_allow_200_299=scoring_settings_dict.get("yds_allow_200_299"),
- yds_allow_300_349=scoring_settings_dict.get("yds_allow_300_349"),
- yds_allow_350_399=scoring_settings_dict.get("yds_allow_350_399"),
- yds_allow_400_449=scoring_settings_dict.get("yds_allow_400_449"),
- yds_allow_450_499=scoring_settings_dict.get("yds_allow_450_499"),
- yds_allow_500_549=scoring_settings_dict.get("yds_allow_500_549"),
- yds_allow_550p=scoring_settings_dict.get("yds_allow_550p"),
- fgm=scoring_settings_dict.get("fgm"),
- fgm_0_19=scoring_settings_dict.get("fgm_0_19"),
- fgm_20_29=scoring_settings_dict.get("fgm_20_29"),
- fgm_30_39=scoring_settings_dict.get("fgm_30_39"),
- fgm_40_49=scoring_settings_dict.get("fgm_40_49"),
- fgm_50p=scoring_settings_dict.get("fgm_50p"),
- fgmiss=scoring_settings_dict.get("fgmiss"),
- fgmiss_0_19=scoring_settings_dict.get("fgmiss_0_19"),
- fgmiss_20_29=scoring_settings_dict.get("fgmiss_20_29"),
- fgmiss_30_39=scoring_settings_dict.get("fgmiss_30_39"),
- fgmiss_40_49=scoring_settings_dict.get("fgmiss_40_49"),
- fgmiss_50p=scoring_settings_dict.get("fgmiss_50p"),
- fg_ret_yd=scoring_settings_dict.get("fg_ret_yd"),
- pass_2pt=scoring_settings_dict.get("pass_2pt"),
- pass_int=scoring_settings_dict.get("pass_int"),
- pass_sack=scoring_settings_dict.get("pass_sack"),
- pass_cmp=scoring_settings_dict.get("pass_cmp"),
- pass_cmp_40p=scoring_settings_dict.get("pass_cmp_40p"),
- pass_inc=scoring_settings_dict.get("pass_inc"),
- pass_att=scoring_settings_dict.get("pass_att"),
- pass_yd=scoring_settings_dict.get("pass_yd"),
- pass_td=scoring_settings_dict.get("pass_td"),
- def_pass_def=scoring_settings_dict.get("def_pass_def"),
- def_td=scoring_settings_dict.get("def_td"),
- def_st_fum_rec=scoring_settings_dict.get("def_st_fum_rec"),
- def_st_td=scoring_settings_dict.get("def_st_td"),
- def_st_ff=scoring_settings_dict.get("def_st_ff"),
- def_2pt=scoring_settings_dict.get("def_2pt"),
- st_fum_rec=scoring_settings_dict.get("st_fum_rec"),
- st_ff=scoring_settings_dict.get("st_ff"),
- st_tkl_solo=scoring_settings_dict.get("st_tkl_solo"),
- st_td=scoring_settings_dict.get("st_td"),
- fum_rec=scoring_settings_dict.get("fum_rec"),
- fum_lost=scoring_settings_dict.get("fum_lost"),
- fum=scoring_settings_dict.get("fum"),
- fum_ret_yd=scoring_settings_dict.get("fum_ret_yd"),
- idp_safe=scoring_settings_dict.get("idp_safe"),
- idp_ff=scoring_settings_dict.get("idp_ff"),
- idp_blk_kick=scoring_settings_dict.get("idp_blk_kick"),
- idp_int=scoring_settings_dict.get("idp_int"),
- idp_tkl=scoring_settings_dict.get("idp_tkl"),
- idp_def_td=scoring_settings_dict.get("idp_def_td"),
- idp_pass_def=scoring_settings_dict.get("idp_pass_def"),
- idp_fum_rec=scoring_settings_dict.get("idp_fum_rec"),
- idp_sack=scoring_settings_dict.get("idp_sack"),
- idp_tkl_ast=scoring_settings_dict.get("idp_tkl_ast"),
- idp_tkl_solo=scoring_settings_dict.get("idp_tkl_solo"),
- rush_att=scoring_settings_dict.get("rush_att"),
- pts_allow_0=scoring_settings_dict.get("pts_allow_0"),
- pts_allow_1_6=scoring_settings_dict.get("pts_allow_1_6"),
- pts_allow_7_13=scoring_settings_dict.get("pts_allow_7_13"),
- pts_allow_14_20=scoring_settings_dict.get("pts_allow_14_20"),
- pts_allow_21_27=scoring_settings_dict.get("pts_allow_21_27"),
- pts_allow_28_34=scoring_settings_dict.get("pts_allow_28_34"),
- pts_allow_35p=scoring_settings_dict.get("pts_allow_35p"),
- rush_40p=scoring_settings_dict.get("rush_40p"),
- rush_2pt=scoring_settings_dict.get("rush_2pt"),
- rush_yd=scoring_settings_dict.get("rush_yd"),
- rush_td=scoring_settings_dict.get("rush_td"),
- bonus_rush_yd_100=scoring_settings_dict.get("bonus_rush_yd_100"),
- bonus_rush_yd_200=scoring_settings_dict.get("bonus_rush_yd_200"),
- bonus_rec_yd_100=scoring_settings_dict.get("bonus_rec_yd_100"),
- bonus_rec_yd_200=scoring_settings_dict.get("bonus_rec_yd_200"),
- bonus_pass_yd_300=scoring_settings_dict.get("bonus_pass_yd_300"),
- bonus_pass_yd_400=scoring_settings_dict.get("bonus_pass_yd_400"),
- rec_yd=scoring_settings_dict.get("rec_yd"),
- rec_2pt=scoring_settings_dict.get("rec_2pt"),
- rec=scoring_settings_dict.get("rec"),
- rec_td=scoring_settings_dict.get("rec_td"),
- rec_40p=scoring_settings_dict.get("rec_40p"),
- tkl=scoring_settings_dict.get("tkl"),
- tkl_loss=scoring_settings_dict.get("tkl_loss"),
- tkl_solo=scoring_settings_dict.get("tkl_solo"),
- tkl_ast=scoring_settings_dict.get("tkl_ast"),
- int_ret_yd=scoring_settings_dict.get("int_ret_yd"),
- int=scoring_settings_dict.get("int"),
- pr_td=scoring_settings_dict.get("pr_td"),
- pr_yd=scoring_settings_dict.get("pr_yd"),
- sack_yd=scoring_settings_dict.get("sack_yd"),
- sack=scoring_settings_dict.get("sack"),
- kr_yd=scoring_settings_dict.get("kr_yd"),
- kr_td=scoring_settings_dict.get("kr_td"),
- blk_kick=scoring_settings_dict.get("blk_kick"),
- blk_kick_ret_yd=scoring_settings_dict.get("blk_kick_ret_yd"),
- xpmiss=scoring_settings_dict.get("xpmiss"),
- ff=scoring_settings_dict.get("ff"),
- qb_hit=scoring_settings_dict.get("qb_hit"),
- xpm=scoring_settings_dict.get("xpm"),
- safe=scoring_settings_dict.get("safe"),
- )
diff --git a/sleeper/model/SportState.py b/sleeper/model/SportState.py
deleted file mode 100644
index a16a6e1..0000000
--- a/sleeper/model/SportState.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from __future__ import annotations
-
-import datetime
-from dataclasses import dataclass
-from datetime import date
-
-from sleeper.enum.SeasonType import SeasonType
-
-
-@dataclass(kw_only=True)
-class SportState:
- display_week: int
- league_create_season: str
- league_season: str
- leg: int
- previous_season: str
- season: str
- season_start_date: date
- season_type: SeasonType
- week: int
-
- @staticmethod
- def from_dict(sport_state_dict) -> SportState:
- season_start_date = (
- None
- if sport_state_dict.get("season_start_date") is None
- else datetime.datetime.strptime(
- sport_state_dict.get("season_start_date"), "%Y-%m-%d"
- ).date()
- )
- return SportState(
- week=sport_state_dict.get("week"),
- season_type=SeasonType.from_str(sport_state_dict.get("season_type")),
- season_start_date=season_start_date,
- season=sport_state_dict.get("season"),
- previous_season=sport_state_dict.get("previous_season"),
- leg=sport_state_dict.get("leg"),
- league_season=sport_state_dict.get("league_season"),
- league_create_season=sport_state_dict.get("league_create_season"),
- display_week=sport_state_dict.get("display_week"),
- )
diff --git a/sleeper/model/Stats.py b/sleeper/model/Stats.py
deleted file mode 100644
index f580226..0000000
--- a/sleeper/model/Stats.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from __future__ import annotations
-
-from abc import abstractmethod
-from dataclasses import dataclass
-
-from sleeper.enum import Sport
-
-
-@dataclass(kw_only=True)
-class Stats:
- """
- Parent for all Stat models for each sport.
- """
-
- ...
-
- @staticmethod
- def model(sport: Sport) -> Stats:
- from sleeper.model.nfl.NFLStats import NFLStats
-
- if sport == Sport.NFL:
- return NFLStats
- else:
- raise ValueError(f"Cannot find Stats for sport: '{sport.name}'.")
-
- @staticmethod
- @abstractmethod
- def from_dict(d: dict) -> Stats:
- ...
-
- @abstractmethod
- def get_populated_stats(self) -> dict:
- ...
diff --git a/sleeper/model/TradedPick.py b/sleeper/model/TradedPick.py
deleted file mode 100644
index 050bba6..0000000
--- a/sleeper/model/TradedPick.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-
-@dataclass(kw_only=True)
-class TradedPick:
- owner_id: int
- previous_owner_id: int
- roster_id: int
- round: int
- season: str
-
- @staticmethod
- def from_dict(traded_pick_dict: dict) -> TradedPick:
- return TradedPick(
- season=traded_pick_dict.get("season"),
- round=traded_pick_dict.get("round"),
- roster_id=traded_pick_dict.get("roster_id"),
- previous_owner_id=traded_pick_dict.get("previous_owner_id"),
- owner_id=traded_pick_dict.get("owner_id"),
- )
-
- @staticmethod
- def from_dict_list(traded_pick_dict_list: list) -> list[TradedPick]:
- traded_picks = list()
- for traded_pick_dict in traded_pick_dict_list:
- traded_picks.append(TradedPick.from_dict(traded_pick_dict))
- return traded_picks
diff --git a/sleeper/model/Transaction.py b/sleeper/model/Transaction.py
deleted file mode 100644
index 5e24734..0000000
--- a/sleeper/model/Transaction.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from typing import Any
-
-from sleeper.enum.TransactionStatus import TransactionStatus
-from sleeper.enum.TransactionType import TransactionType
-from sleeper.model.DraftPick import DraftPick
-from sleeper.model.FAABTransaction import FAABTransaction
-from sleeper.model.TransactionSettings import TransactionSettings
-
-
-@dataclass(kw_only=True)
-class Transaction:
- adds: list[dict[str, int]]
- consenter_ids: list[int]
- created: int
- creator: str
- draft_picks: list[DraftPick]
- drops: list[dict[str, int]]
- roster_ids: list[int]
- settings: TransactionSettings
- status: TransactionStatus
- status_updated: int
- transaction_id: str
- type: TransactionType
- waiver_budget: list[FAABTransaction]
- leg: int
- metadata: Any # not sure what this is
-
- @staticmethod
- def from_dict(transaction_dict: dict) -> Transaction:
- return Transaction(
- type=TransactionType.from_str(transaction_dict.get("type")),
- transaction_id=transaction_dict.get("transaction_id"),
- status_updated=transaction_dict.get("status_updated"),
- status=TransactionStatus.from_str(transaction_dict.get("status")),
- settings=TransactionSettings.from_dict(transaction_dict.get("settings")),
- roster_ids=transaction_dict.get("roster_ids"),
- leg=transaction_dict.get("leg"),
- adds=transaction_dict.get("adds"),
- drops=transaction_dict.get("drops"),
- draft_picks=DraftPick.from_dict_list(transaction_dict.get("draft_picks")),
- creator=transaction_dict.get("creator"),
- created=transaction_dict.get("created"),
- consenter_ids=transaction_dict.get("consenter_ids"),
- waiver_budget=FAABTransaction.from_dict_list(transaction_dict.get("waiver_budget")),
- metadata=transaction_dict.get("metadata"),
- )
-
- @staticmethod
- def from_dict_list(transaction_dict_list: list) -> list[Transaction]:
- transactions = list()
- for transaction_dict in transaction_dict_list:
- transactions.append(Transaction.from_dict(transaction_dict))
- return transactions
diff --git a/sleeper/model/TransactionSettings.py b/sleeper/model/TransactionSettings.py
deleted file mode 100644
index 08ec62a..0000000
--- a/sleeper/model/TransactionSettings.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from typing import Optional
-
-
-@dataclass(kw_only=True)
-class TransactionSettings:
- seq: int
- waiver_bid: int
-
- @classmethod
- def from_dict(cls, transaction_settings_dict: Optional[dict]) -> Optional[TransactionSettings]:
- if transaction_settings_dict is None:
- return None
- return TransactionSettings(
- waiver_bid=transaction_settings_dict.get("waiver_bid"),
- seq=transaction_settings_dict.get("seq"),
- )
diff --git a/sleeper/model/User.py b/sleeper/model/User.py
deleted file mode 100644
index f8adf7c..0000000
--- a/sleeper/model/User.py
+++ /dev/null
@@ -1,64 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-from typing import Any
-
-
-@dataclass(kw_only=True)
-class User:
- avatar: str
- cookies: Any # not sure what this is
- created: Any # not sure what this is
- currencies: Any # not sure what this is
- data_updated: Any # not sure what this is
- deleted: Any # not sure what this is
- display_name: str
- email: str
- is_bot: bool
- is_owner: bool
- league_id: str
- metadata: Any # not sure what this is
- notifications: Any # not sure what this is
- pending: Any # not sure what this is
- phone: str
- real_name: str
- solicitable: Any # not sure what this is
- summoner_region: Any # not sure what this is
- token: str
- user_id: str
- username: str
- verification: Any # not sure what this is
-
- @staticmethod
- def from_dict(user_dict: dict) -> User:
- return User(
- username=user_dict.get("username"),
- user_id=user_dict.get("user_id"),
- display_name=user_dict.get("display_name"),
- avatar=user_dict.get("avatar"),
- is_owner=user_dict.get("is_owner", False),
- is_bot=user_dict.get("is_bot", False),
- league_id=user_dict.get("league_id"),
- cookies=user_dict.get("cookies"),
- created=user_dict.get("created"),
- currencies=user_dict.get("currencies"),
- data_updated=user_dict.get("data_updated"),
- deleted=user_dict.get("deleted"),
- email=user_dict.get("email"),
- metadata=user_dict.get("metadata"),
- notifications=user_dict.get("notifications"),
- pending=user_dict.get("pending"),
- phone=user_dict.get("phone"),
- real_name=user_dict.get("real_name"),
- solicitable=user_dict.get("solicitable"),
- summoner_region=user_dict.get("summoner_region"),
- token=user_dict.get("token"),
- verification=user_dict.get("verification"),
- )
-
- @staticmethod
- def from_dict_list(user_dict_list: list) -> list[User]:
- users = list()
- for user_dict in user_dict_list:
- users.append(User.from_dict(user_dict))
- return users
diff --git a/sleeper/model/__init__.py b/sleeper/model/__init__.py
deleted file mode 100644
index d49893f..0000000
--- a/sleeper/model/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from .DepthChart import DepthChart
-from .Draft import Draft
-from .DraftMetadata import DraftMetadata
-from .DraftPick import DraftPick
-from .DraftSettings import DraftSettings
-from .FAABTransaction import FAABTransaction
-from .FromPlayoffMatchup import FromPlayoffMatchup
-from .Game import Game
-from .League import League
-from .LeagueSettings import LeagueSettings
-from .Matchup import Matchup
-from .Player import Player
-from .PlayerDraftPick import PlayerDraftPick
-from .PlayerDraftPickMetadata import PlayerDraftPickMetadata
-from .PlayerStats import PlayerStats
-from .PlayerTrend import PlayerTrend
-from .PlayoffMatchup import PlayoffMatchup
-from .Roster import Roster
-from .RosterSettings import RosterSettings
-from .ScoringSettings import ScoringSettings
-from .SportState import SportState
-from .TradedPick import TradedPick
-from .Transaction import Transaction
-from .TransactionSettings import TransactionSettings
-from .User import User
diff --git a/sleeper/model/nfl/NFLDepthChart.py b/sleeper/model/nfl/NFLDepthChart.py
deleted file mode 100644
index 64cb313..0000000
--- a/sleeper/model/nfl/NFLDepthChart.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.model.DepthChart import DepthChart
-
-
-@dataclass(kw_only=True)
-class NFLDepthChart(DepthChart):
- C: list[str]
- FS: list[str]
- LCB: list[str]
- LDE: list[str]
- LG: list[str]
- LILB: list[str]
- LOLB: list[str]
- LT: list[str]
- NB: list[str]
- NT: list[str]
- PK: list[str]
- QB: list[str]
- RB: list[str]
- RCB: list[str]
- RDE: list[str]
- RG: list[str]
- RILB: list[str]
- ROLB: list[str]
- RT: list[str]
- SS: list[str]
- TE: list[str]
- WR1: list[str]
- WR2: list[str]
- WR3: list[str]
-
- @staticmethod
- def from_dict(nfl_depth_chart_dict: dict) -> NFLDepthChart:
- return NFLDepthChart(
- C=nfl_depth_chart_dict.get("C"),
- FS=nfl_depth_chart_dict.get("FS"),
- LCB=nfl_depth_chart_dict.get("LCB"),
- LDE=nfl_depth_chart_dict.get("LDE"),
- LG=nfl_depth_chart_dict.get("LG"),
- LILB=nfl_depth_chart_dict.get("LILB"),
- LOLB=nfl_depth_chart_dict.get("LOLB"),
- LT=nfl_depth_chart_dict.get("LT"),
- NB=nfl_depth_chart_dict.get("NB"),
- NT=nfl_depth_chart_dict.get("NT"),
- PK=nfl_depth_chart_dict.get("PK"),
- QB=nfl_depth_chart_dict.get("QB"),
- RB=nfl_depth_chart_dict.get("RB"),
- RCB=nfl_depth_chart_dict.get("RCB"),
- RDE=nfl_depth_chart_dict.get("RDE"),
- RG=nfl_depth_chart_dict.get("RG"),
- RILB=nfl_depth_chart_dict.get("RILB"),
- ROLB=nfl_depth_chart_dict.get("ROLB"),
- RT=nfl_depth_chart_dict.get("RT"),
- SS=nfl_depth_chart_dict.get("SS"),
- TE=nfl_depth_chart_dict.get("TE"),
- WR1=nfl_depth_chart_dict.get("WR1"),
- WR2=nfl_depth_chart_dict.get("WR2"),
- WR3=nfl_depth_chart_dict.get("WR3"),
- )
diff --git a/sleeper/model/nfl/NFLStats.py b/sleeper/model/nfl/NFLStats.py
deleted file mode 100644
index d7c5462..0000000
--- a/sleeper/model/nfl/NFLStats.py
+++ /dev/null
@@ -1,391 +0,0 @@
-from __future__ import annotations
-
-from dataclasses import dataclass
-
-from sleeper.model.Stats import Stats
-
-
-@dataclass(kw_only=True)
-class NFLStats(Stats):
- blk_kick: float
- blk_kick_ret_yd: float
- bonus_pass_cmp_25: float
- bonus_pass_yd_300: float
- bonus_pass_yd_400: float
- bonus_rec_rb: float
- bonus_rec_te: float
- bonus_rec_wr: float
- bonus_rec_yd_100: float
- bonus_rush_att_20: float
- bonus_rush_rec_yd_100: float
- bonus_rush_rec_yd_200: float
- bonus_rush_yd_100: float
- bonus_sack_2p: float
- bonus_tkl_10p: float
- cmp_pct: float
- def_3_and_out: float
- def_4_and_stop: float
- def_forced_punts: float
- def_kr: float
- def_kr_lng: float
- def_kr_yd: float
- def_kr_ypa: float
- def_pass_def: float
- def_pr: float
- def_pr_lng: float
- def_pr_yd: float
- def_pr_ypa: float
- def_snp: float
- def_st_td: float
- def_st_tkl_solo: float
- def_td: float
- fan_pts_allow: float
- fan_pts_allow_k: float
- fan_pts_allow_qb: float
- fan_pts_allow_rb: float
- fan_pts_allow_te: float
- fan_pts_allow_wr: float
- ff: float
- fga: float
- fgm: float
- fgm_20_29: float
- fgm_30_39: float
- fgm_40_49: float
- fgm_50p: float
- fgm_lng: float
- fgm_pct: float
- fgm_yds: float
- fgm_yds_over_30: float
- fgmiss: float
- fgmiss_30_39: float
- fgmiss_40_49: float
- fgmiss_50p: float
- fum: float
- fum_lost: float
- fum_rec: float
- fum_ret_yd: float
- gms_active: float
- gp: float
- gs: float
- idp_blk_kick: float
- idp_def_td: float
- idp_ff: float
- idp_fum_rec: float
- idp_fum_ret_yd: float
- idp_int: float
- idp_int_ret_yd: float
- idp_pass_def: float
- idp_qb_hit: float
- idp_sack: float
- idp_sack_yd: float
- idp_tkl: float
- idp_tkl_ast: float
- idp_tkl_loss: float
- idp_tkl_solo: float
- int_: float
- int_ret_yd: float
- kr: float
- kr_lng: float
- kr_yd: float
- kr_ypa: float
- off_snp: float
- pass_2pt: float
- pass_air_yd: float
- pass_att: float
- pass_cmp: float
- pass_cmp_40p: float
- pass_fd: float
- pass_inc: float
- pass_int: float
- pass_int_td: float
- pass_lng: float
- pass_rtg: float
- pass_rz_att: float
- pass_sack: float
- pass_sack_yds: float
- pass_td: float
- pass_td_40p: float
- pass_td_50p: float
- pass_td_lng: float
- pass_yd: float
- pass_ypa: float
- penalty: float
- penalty_yd: float
- pr: float
- pr_lng: float
- pr_yd: float
- pr_ypa: float
- pts_allow: float
- pts_allow_14_20: float
- pts_allow_1_6: float
- pts_allow_21_27: float
- pts_allow_28_34: float
- pts_allow_35p: float
- pts_allow_7_13: float
- pts_half_ppr: float
- pts_ppr: float
- pts_std: float
- punt_blkd: float
- punt_in_20: float
- punt_net_yd: float
- punt_tb: float
- punt_yds: float
- punts: float
- qb_hit: float
- rec: float
- rec_0_4: float
- rec_10_19: float
- rec_20_29: float
- rec_2pt: float
- rec_30_39: float
- rec_40p: float
- rec_5_9: float
- rec_air_yd: float
- rec_drop: float
- rec_fd: float
- rec_lng: float
- rec_rz_tgt: float
- rec_td: float
- rec_td_40p: float
- rec_td_50p: float
- rec_td_lng: float
- rec_tgt: float
- rec_yar: float
- rec_yd: float
- rec_ypr: float
- rec_ypt: float
- rush_2pt: float
- rush_40p: float
- rush_att: float
- rush_btkl: float
- rush_fd: float
- rush_lng: float
- rush_rz_att: float
- rush_td: float
- rush_td_40p: float
- rush_td_50p: float
- rush_td_lng: float
- rush_tkl_loss: float
- rush_tkl_loss_yd: float
- rush_yac: float
- rush_yd: float
- rush_ypa: float
- sack: float
- sack_yd: float
- st_snp: float
- st_td: float
- st_tkl_solo: float
- td: float
- tkl: float
- tkl_ast: float
- tkl_ast_misc: float
- tkl_loss: float
- tkl_solo: float
- tkl_solo_misc: float
- tm_def_snp: float
- tm_off_snp: float
- tm_st_snp: float
- xpa: float
- xpm: float
- xpmiss: float
- yds_allow: float
- yds_allow_200_299: float
- yds_allow_300_349: float
- yds_allow_350_399: float
- yds_allow_400_449: float
- yds_allow_450_499: float
-
- def get_populated_stats(self) -> dict:
- return {k: v for (k, v) in vars(self).items() if v is not None}
-
- @staticmethod
- def from_dict(nfl_stats_dict: dict) -> NFLStats:
- return NFLStats(
- blk_kick=nfl_stats_dict.get("blk_kick"),
- blk_kick_ret_yd=nfl_stats_dict.get("blk_kick_ret_yd"),
- bonus_pass_cmp_25=nfl_stats_dict.get("bonus_pass_cmp_25"),
- bonus_pass_yd_300=nfl_stats_dict.get("bonus_pass_yd_300"),
- bonus_pass_yd_400=nfl_stats_dict.get("bonus_pass_yd_400"),
- bonus_rec_rb=nfl_stats_dict.get("bonus_rec_rb"),
- bonus_rec_te=nfl_stats_dict.get("bonus_rec_te"),
- bonus_rec_wr=nfl_stats_dict.get("bonus_rec_wr"),
- bonus_rec_yd_100=nfl_stats_dict.get("bonus_rec_yd_100"),
- bonus_rush_rec_yd_200=nfl_stats_dict.get("bonus_rush_rec_yd_200"),
- bonus_rush_yd_100=nfl_stats_dict.get("bonus_rush_yd_100"),
- bonus_rush_att_20=nfl_stats_dict.get("bonus_rush_att_20"),
- bonus_rush_rec_yd_100=nfl_stats_dict.get("bonus_rush_rec_yd_100"),
- bonus_sack_2p=nfl_stats_dict.get("bonus_sack_2p"),
- bonus_tkl_10p=nfl_stats_dict.get("bonus_tkl_10p"),
- cmp_pct=nfl_stats_dict.get("cmp_pct"),
- def_3_and_out=nfl_stats_dict.get("def_3_and_out"),
- def_4_and_stop=nfl_stats_dict.get("def_4_and_stop"),
- def_forced_punts=nfl_stats_dict.get("def_forced_punts"),
- def_kr=nfl_stats_dict.get("def_kr"),
- def_kr_lng=nfl_stats_dict.get("def_kr_lng"),
- def_kr_yd=nfl_stats_dict.get("def_kr_yd"),
- def_kr_ypa=nfl_stats_dict.get("def_kr_ypa"),
- def_pass_def=nfl_stats_dict.get("def_pass_def"),
- def_pr=nfl_stats_dict.get("def_pr"),
- def_pr_lng=nfl_stats_dict.get("def_pr_lng"),
- def_pr_yd=nfl_stats_dict.get("def_pr_yd"),
- def_pr_ypa=nfl_stats_dict.get("def_pr_ypa"),
- def_snp=nfl_stats_dict.get("def_snp"),
- def_st_td=nfl_stats_dict.get("def_st_td"),
- def_st_tkl_solo=nfl_stats_dict.get("def_st_tkl_solo"),
- def_td=nfl_stats_dict.get("def_td"),
- fan_pts_allow=nfl_stats_dict.get("fan_pts_allow"),
- fan_pts_allow_k=nfl_stats_dict.get("fan_pts_allow_k"),
- fan_pts_allow_qb=nfl_stats_dict.get("fan_pts_allow_qb"),
- fan_pts_allow_rb=nfl_stats_dict.get("fan_pts_allow_rb"),
- fan_pts_allow_te=nfl_stats_dict.get("fan_pts_allow_te"),
- fan_pts_allow_wr=nfl_stats_dict.get("fan_pts_allow_wr"),
- ff=nfl_stats_dict.get("ff"),
- fga=nfl_stats_dict.get("fga"),
- fgm=nfl_stats_dict.get("fgm"),
- fgm_20_29=nfl_stats_dict.get("fgm_20_29"),
- fgm_30_39=nfl_stats_dict.get("fgm_30_39"),
- fgm_40_49=nfl_stats_dict.get("fgm_40_49"),
- fgm_50p=nfl_stats_dict.get("fgm_50p"),
- fgm_lng=nfl_stats_dict.get("fgm_lng"),
- fgm_pct=nfl_stats_dict.get("fgm_pct"),
- fgm_yds=nfl_stats_dict.get("fgm_yds"),
- fgm_yds_over_30=nfl_stats_dict.get("fgm_yds_over_30"),
- fgmiss=nfl_stats_dict.get("fgmiss"),
- fgmiss_30_39=nfl_stats_dict.get("fgmiss_30_39"),
- fgmiss_40_49=nfl_stats_dict.get("fgmiss_40_49"),
- fgmiss_50p=nfl_stats_dict.get("fgmiss_50p"),
- fum=nfl_stats_dict.get("fum"),
- fum_lost=nfl_stats_dict.get("fum_lost"),
- fum_rec=nfl_stats_dict.get("fum_rec"),
- fum_ret_yd=nfl_stats_dict.get("fum_ret_yd"),
- gms_active=nfl_stats_dict.get("gms_active"),
- gp=nfl_stats_dict.get("gp"),
- idp_blk_kick=nfl_stats_dict.get("idp_blk_kick"),
- idp_def_td=nfl_stats_dict.get("idp_def_td"),
- idp_ff=nfl_stats_dict.get("idp_ff"),
- idp_fum_rec=nfl_stats_dict.get("idp_fum_rec"),
- idp_fum_ret_yd=nfl_stats_dict.get("idp_fum_ret_yd"),
- idp_int=nfl_stats_dict.get("idp_int"),
- idp_int_ret_yd=nfl_stats_dict.get("idp_int_ret_yd"),
- idp_pass_def=nfl_stats_dict.get("idp_pass_def"),
- idp_qb_hit=nfl_stats_dict.get("idp_qb_hit"),
- idp_sack=nfl_stats_dict.get("idp_sack"),
- idp_sack_yd=nfl_stats_dict.get("idp_sack_yd"),
- idp_tkl=nfl_stats_dict.get("idp_tkl"),
- idp_tkl_ast=nfl_stats_dict.get("idp_tkl_ast"),
- idp_tkl_loss=nfl_stats_dict.get("idp_tkl_loss"),
- idp_tkl_solo=nfl_stats_dict.get("idp_tkl_solo"),
- int_=nfl_stats_dict.get("int"),
- int_ret_yd=nfl_stats_dict.get("int_ret_yd"),
- kr=nfl_stats_dict.get("kr"),
- kr_lng=nfl_stats_dict.get("kr_lng"),
- kr_yd=nfl_stats_dict.get("kr_yd"),
- kr_ypa=nfl_stats_dict.get("kr_ypa"),
- gs=nfl_stats_dict.get("gs"),
- off_snp=nfl_stats_dict.get("off_snp"),
- pass_2pt=nfl_stats_dict.get("pass_2pt"),
- pass_air_yd=nfl_stats_dict.get("pass_air_yd"),
- pass_att=nfl_stats_dict.get("pass_att"),
- pass_cmp=nfl_stats_dict.get("pass_cmp"),
- pass_cmp_40p=nfl_stats_dict.get("pass_cmp_40p"),
- pass_fd=nfl_stats_dict.get("pass_fd"),
- pass_inc=nfl_stats_dict.get("pass_inc"),
- pass_int=nfl_stats_dict.get("pass_int"),
- pass_int_td=nfl_stats_dict.get("pass_int_td"),
- pass_lng=nfl_stats_dict.get("pass_lng"),
- pass_rtg=nfl_stats_dict.get("pass_rtg"),
- pass_rz_att=nfl_stats_dict.get("pass_rz_att"),
- pass_sack=nfl_stats_dict.get("pass_sack"),
- pass_sack_yds=nfl_stats_dict.get("pass_sack_yds"),
- pass_td=nfl_stats_dict.get("pass_td"),
- pass_td_40p=nfl_stats_dict.get("pass_td_40p"),
- pass_td_50p=nfl_stats_dict.get("pass_td_50p"),
- pass_td_lng=nfl_stats_dict.get("pass_td_lng"),
- pass_yd=nfl_stats_dict.get("pass_yd"),
- pass_ypa=nfl_stats_dict.get("pass_ypa"),
- penalty=nfl_stats_dict.get("penalty"),
- penalty_yd=nfl_stats_dict.get("penalty_yd"),
- pr=nfl_stats_dict.get("pr"),
- pr_lng=nfl_stats_dict.get("pr_lng"),
- pr_yd=nfl_stats_dict.get("pr_yd"),
- pr_ypa=nfl_stats_dict.get("pr_ypa"),
- pts_allow=nfl_stats_dict.get("pts_allow"),
- pts_allow_14_20=nfl_stats_dict.get("pts_allow_14_20"),
- pts_allow_1_6=nfl_stats_dict.get("pts_allow_1_6"),
- pts_allow_21_27=nfl_stats_dict.get("pts_allow_21_27"),
- pts_allow_28_34=nfl_stats_dict.get("pts_allow_28_34"),
- pts_allow_35p=nfl_stats_dict.get("pts_allow_35p"),
- pts_allow_7_13=nfl_stats_dict.get("pts_allow_7_13"),
- pts_half_ppr=nfl_stats_dict.get("pts_half_ppr"),
- pts_ppr=nfl_stats_dict.get("pts_ppr"),
- pts_std=nfl_stats_dict.get("pts_std"),
- punt_blkd=nfl_stats_dict.get("punt_blkd"),
- punt_in_20=nfl_stats_dict.get("punt_in_20"),
- punt_net_yd=nfl_stats_dict.get("punt_net_yd"),
- punt_tb=nfl_stats_dict.get("punt_tb"),
- punt_yds=nfl_stats_dict.get("punt_yds"),
- punts=nfl_stats_dict.get("punts"),
- qb_hit=nfl_stats_dict.get("qb_hit"),
- rec=nfl_stats_dict.get("rec"),
- rec_0_4=nfl_stats_dict.get("rec_0_4"),
- rec_10_19=nfl_stats_dict.get("rec_10_19"),
- rec_20_29=nfl_stats_dict.get("rec_20_29"),
- rec_2pt=nfl_stats_dict.get("rec_2pt"),
- rec_30_39=nfl_stats_dict.get("rec_30_39"),
- rec_40p=nfl_stats_dict.get("rec_40p"),
- rec_5_9=nfl_stats_dict.get("rec_5_9"),
- rec_air_yd=nfl_stats_dict.get("rec_air_yd"),
- rec_drop=nfl_stats_dict.get("rec_drop"),
- rec_fd=nfl_stats_dict.get("rec_fd"),
- rec_lng=nfl_stats_dict.get("rec_lng"),
- rec_rz_tgt=nfl_stats_dict.get("rec_rz_tgt"),
- rec_td=nfl_stats_dict.get("rec_td"),
- rec_td_40p=nfl_stats_dict.get("rec_td_40p"),
- rec_td_50p=nfl_stats_dict.get("rec_td_50p"),
- rec_td_lng=nfl_stats_dict.get("rec_td_lng"),
- rec_tgt=nfl_stats_dict.get("rec_tgt"),
- rec_yar=nfl_stats_dict.get("rec_yar"),
- rec_yd=nfl_stats_dict.get("rec_yd"),
- rec_ypr=nfl_stats_dict.get("rec_ypr"),
- rec_ypt=nfl_stats_dict.get("rec_ypt"),
- rush_2pt=nfl_stats_dict.get("rush_2pt"),
- rush_40p=nfl_stats_dict.get("rush_40p"),
- rush_att=nfl_stats_dict.get("rush_att"),
- rush_btkl=nfl_stats_dict.get("rush_btkl"),
- rush_fd=nfl_stats_dict.get("rush_fd"),
- rush_lng=nfl_stats_dict.get("rush_lng"),
- rush_rz_att=nfl_stats_dict.get("rush_rz_att"),
- rush_td=nfl_stats_dict.get("rush_td"),
- rush_td_40p=nfl_stats_dict.get("rush_td_40p"),
- rush_td_50p=nfl_stats_dict.get("rush_td_50p"),
- rush_td_lng=nfl_stats_dict.get("rush_td_lng"),
- rush_tkl_loss=nfl_stats_dict.get("rush_tkl_loss"),
- rush_tkl_loss_yd=nfl_stats_dict.get("rush_tkl_loss_yd"),
- rush_yac=nfl_stats_dict.get("rush_yac"),
- rush_yd=nfl_stats_dict.get("rush_yd"),
- rush_ypa=nfl_stats_dict.get("rush_ypa"),
- sack=nfl_stats_dict.get("sack"),
- sack_yd=nfl_stats_dict.get("sack_yd"),
- st_snp=nfl_stats_dict.get("st_snp"),
- st_td=nfl_stats_dict.get("st_td"),
- st_tkl_solo=nfl_stats_dict.get("st_tkl_solo"),
- td=nfl_stats_dict.get("td"),
- tkl=nfl_stats_dict.get("tkl"),
- tkl_ast=nfl_stats_dict.get("tkl_ast"),
- tkl_ast_misc=nfl_stats_dict.get("tkl_ast_misc"),
- tkl_loss=nfl_stats_dict.get("tkl_loss"),
- tkl_solo=nfl_stats_dict.get("tkl_solo"),
- tkl_solo_misc=nfl_stats_dict.get("tkl_solo_misc"),
- tm_def_snp=nfl_stats_dict.get("tm_def_snp"),
- tm_off_snp=nfl_stats_dict.get("tm_off_snp"),
- tm_st_snp=nfl_stats_dict.get("tm_st_snp"),
- xpa=nfl_stats_dict.get("xpa"),
- xpm=nfl_stats_dict.get("xpm"),
- xpmiss=nfl_stats_dict.get("xpmiss"),
- yds_allow=nfl_stats_dict.get("yds_allow"),
- yds_allow_200_299=nfl_stats_dict.get("yds_allow_200_299"),
- yds_allow_300_349=nfl_stats_dict.get("yds_allow_300_349"),
- yds_allow_350_399=nfl_stats_dict.get("yds_allow_350_399"),
- yds_allow_400_449=nfl_stats_dict.get("yds_allow_400_449"),
- yds_allow_450_499=nfl_stats_dict.get("yds_allow_450_499"),
- )
diff --git a/sleeper/model/nfl/__init__.py b/sleeper/model/nfl/__init__.py
deleted file mode 100644
index 6dc6650..0000000
--- a/sleeper/model/nfl/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from .NFLDepthChart import NFLDepthChart
-from .NFLStats import NFLStats
diff --git a/sleeper/util/ConfigReader.py b/sleeper/util/ConfigReader.py
deleted file mode 100644
index 30342e3..0000000
--- a/sleeper/util/ConfigReader.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import configparser
-import os
-
-
-class ConfigReader:
- """
- Used to read from .properties files
- """
-
- __propertiesFileName = "app.properties"
-
- @classmethod
- def get(cls, section: str, name: str, asType=None) -> str:
- configParser = configparser.ConfigParser(
- converters={"list": lambda x: [i.strip() for i in x.split(",")]}
- )
- propertiesFilePath = os.path.abspath(
- os.path.join(
- os.path.dirname(os.path.realpath(__file__)), f"../{cls.__propertiesFileName}"
- )
- )
- configParser.read(propertiesFilePath)
- if asType == list:
- return configParser.getlist(section, name)
- elif asType is None:
- return configParser[section][name]
- else:
- raise ValueError(f"Type conversion for '{asType}' not supported.")
diff --git a/sleeper/util/CustomFormatter.py b/sleeper/util/CustomFormatter.py
deleted file mode 100644
index b6f2c07..0000000
--- a/sleeper/util/CustomFormatter.py
+++ /dev/null
@@ -1,31 +0,0 @@
-import logging
-
-
-class CustomFormatter(logging.Formatter):
- """
- Logging colored formatter, adapted from https://stackoverflow.com/a/56944256/3638629
- """
-
- grey = "\x1b[38;21m"
- blue = "\x1b[38;5;39m"
- yellow = "\x1b[38;5;226m"
- red = "\x1b[38;5;196m"
- bold_red = "\x1b[31;1m"
- reset = "\x1b[0m"
-
- def __init__(self, formatStr: str, timeFormatStr: str):
- super().__init__()
- self.__formatStr = formatStr
- self.__timeFormatStr = timeFormatStr
- self.FORMATS = {
- logging.DEBUG: self.grey + self.__formatStr + self.reset,
- logging.INFO: self.blue + self.__formatStr + self.reset,
- logging.WARNING: self.yellow + self.__formatStr + self.reset,
- logging.ERROR: self.red + self.__formatStr + self.reset,
- logging.CRITICAL: self.bold_red + self.__formatStr + self.reset,
- }
-
- def format(self, record):
- logFormat = self.FORMATS.get(record.levelno)
- formatter = logging.Formatter(logFormat, self.__timeFormatStr)
- return formatter.format(record)
diff --git a/sleeper/util/CustomLogger.py b/sleeper/util/CustomLogger.py
deleted file mode 100644
index 8fbf44d..0000000
--- a/sleeper/util/CustomLogger.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from __future__ import annotations
-
-import logging
-import sys
-
-from sleeper.util.CustomFormatter import CustomFormatter
-
-
-class CustomLogger:
- @staticmethod
- def getLogger() -> logging.Logger:
- # set up logging
- # https://docs.python.org/3/howto/logging.html
- logger = logging.getLogger("root")
- logger.setLevel(logging.INFO)
- if not logger.hasHandlers():
- # set up handler
- handler = logging.StreamHandler()
- handler.setLevel(logging.INFO)
- handler.setStream(sys.stdout)
- # set up formatter
- formatter = CustomFormatter(
- "%(asctime)-8s %(levelname)-8s %(message)s", "%Y-%m-%d %H:%M:%S"
- )
- # set in each other
- handler.setFormatter(formatter)
- logger.addHandler(handler)
- return logger
diff --git a/test/files/api/test.png b/test/files/api/test.png
deleted file mode 100644
index 18eefb5..0000000
Binary files a/test/files/api/test.png and /dev/null differ
diff --git a/sleeper/util/__init__.py b/test/integration/__init__.py
similarity index 100%
rename from sleeper/util/__init__.py
rename to test/integration/__init__.py
diff --git a/test/test_api/__init__.py b/test/integration/test_api/__init__.py
similarity index 100%
rename from test/test_api/__init__.py
rename to test/integration/test_api/__init__.py
diff --git a/test/integration/test_api/constants.py b/test/integration/test_api/constants.py
new file mode 100644
index 0000000..a1a7e06
--- /dev/null
+++ b/test/integration/test_api/constants.py
@@ -0,0 +1,1973 @@
+# USER A
+USER_A_USER_ID = "852776903310966784"
+USER_A_DRAFTS_2023 = [
+ {
+ "created": 1693364455045,
+ "creators": None,
+ "draft_id": "1002446817038147585",
+ "draft_order": None,
+ "last_message_id": "1004576231221624832",
+ "last_message_time": 1693872146948,
+ "last_picked": 1693872146626,
+ "league_id": "1002446817038147584",
+ "metadata": {"description": "", "name": "Kick Picks", "scoring_type": "ppr"},
+ "season": "2023",
+ "season_type": "regular",
+ "settings": {
+ "alpha_sort": 0,
+ "autopause_enabled": 0,
+ "autopause_end_time": 900,
+ "autopause_start_time": 180,
+ "autostart": 0,
+ "cpu_autopick": 1,
+ "enforce_position_limits": 1,
+ "nomination_timer": 60,
+ "pick_timer": 10,
+ "player_type": 0,
+ "reversal_round": 0,
+ "rounds": 4,
+ "slots_bn": 1,
+ "slots_k": 3,
+ "teams": 6,
+ },
+ "sport": "nfl",
+ "start_time": 1693872027888,
+ "status": "complete",
+ "type": "snake",
+ },
+ {
+ "created": 1690925274461,
+ "creators": None,
+ "draft_id": "992216152161718273",
+ "draft_order": None,
+ "last_message_id": "1002445448390471680",
+ "last_message_time": 1693364128733,
+ "last_picked": 1693364079930,
+ "league_id": "992216152161718272",
+ "metadata": {
+ "description": "",
+ "name": "RB's: We Have the Cleats",
+ "scoring_type": "std",
+ },
+ "season": "2023",
+ "season_type": "regular",
+ "settings": {
+ "alpha_sort": 0,
+ "autopause_enabled": 0,
+ "autopause_end_time": 900,
+ "autopause_start_time": 180,
+ "autostart": 0,
+ "cpu_autopick": 1,
+ "enforce_position_limits": 1,
+ "nomination_timer": 60,
+ "pick_timer": 120,
+ "player_type": 0,
+ "reversal_round": 0,
+ "rounds": 15,
+ "slots_bn": 6,
+ "slots_flex": 2,
+ "slots_k": 1,
+ "slots_qb": 1,
+ "slots_rb": 2,
+ "slots_te": 1,
+ "slots_wr": 2,
+ "teams": 12,
+ },
+ "sport": "nfl",
+ "start_time": 1693357205870,
+ "status": "complete",
+ "type": "snake",
+ },
+ {
+ "created": 1688748150241,
+ "creators": None,
+ "draft_id": "983084631371177984",
+ "draft_order": None,
+ "last_message_id": "1003154743692197888",
+ "last_message_time": 1693533237911,
+ "last_picked": 1693533187890,
+ "league_id": "983084630964228096",
+ "metadata": {
+ "description": "",
+ "name": "PGA Golf 2023",
+ "scoring_type": "half_ppr",
+ },
+ "season": "2023",
+ "season_type": "regular",
+ "settings": {
+ "alpha_sort": 0,
+ "autopause_enabled": 0,
+ "autopause_end_time": 900,
+ "autopause_start_time": 180,
+ "autostart": 0,
+ "cpu_autopick": 1,
+ "nomination_timer": 60,
+ "pick_timer": 60,
+ "player_type": 0,
+ "position_limit_def": 2,
+ "position_limit_k": 2,
+ "position_limit_qb": 2,
+ "position_limit_rb": 7,
+ "position_limit_te": 3,
+ "position_limit_wr": 7,
+ "reversal_round": 0,
+ "rounds": 16,
+ "slots_bn": 6,
+ "slots_def": 1,
+ "slots_flex": 1,
+ "slots_k": 1,
+ "slots_qb": 1,
+ "slots_rb": 2,
+ "slots_te": 1,
+ "slots_wr": 3,
+ "teams": 12,
+ },
+ "sport": "nfl",
+ "start_time": 1693528271003,
+ "status": "complete",
+ "type": "snake",
+ },
+ {
+ "created": 1673019161693,
+ "creators": None,
+ "draft_id": "917112471750574081",
+ "draft_order": None,
+ "last_message_id": "1004230995895123968",
+ "last_message_time": 1693789836432,
+ "last_picked": 1693789835957,
+ "league_id": "917112471750574080",
+ "metadata": {
+ "description": "",
+ "name": "Pizza Bitch League",
+ "scoring_type": "std",
+ },
+ "season": "2023",
+ "season_type": "regular",
+ "settings": {
+ "alpha_sort": 0,
+ "autopause_enabled": 0,
+ "autopause_end_time": 900,
+ "autopause_start_time": 180,
+ "autostart": 0,
+ "cpu_autopick": 0,
+ "nomination_timer": 60,
+ "pick_timer": 3600,
+ "player_type": 0,
+ "reversal_round": 0,
+ "rounds": 19,
+ "slots_bn": 8,
+ "slots_def": 1,
+ "slots_flex": 3,
+ "slots_k": 1,
+ "slots_qb": 1,
+ "slots_rb": 2,
+ "slots_te": 1,
+ "slots_wr": 2,
+ "teams": 6,
+ },
+ "sport": "nfl",
+ "start_time": 1693787007136,
+ "status": "complete",
+ "type": "snake",
+ },
+]
+USER_A_DRAFT_PICKS_DRAFT_ID_1_2023 = [
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 1,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Greg",
+ "injury_status": "",
+ "last_name": "Zuerlein",
+ "news_updated": "1662946258713",
+ "number": "14",
+ "player_id": "1266",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "NYJ",
+ "years_exp": "10",
+ },
+ "pick_no": 1,
+ "picked_by": "729138469988884480",
+ "player_id": "1266",
+ "reactions": None,
+ "roster_id": 3,
+ "round": 1,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 2,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Cairo",
+ "injury_status": "",
+ "last_name": "Santos",
+ "news_updated": "1662943558019",
+ "number": "2",
+ "player_id": "2020",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "CHI",
+ "years_exp": "8",
+ },
+ "pick_no": 2,
+ "picked_by": "862555482408194048",
+ "player_id": "2020",
+ "reactions": None,
+ "roster_id": 6,
+ "round": 1,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 3,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Evan",
+ "injury_status": "",
+ "last_name": "McPherson",
+ "news_updated": "1663001440930",
+ "number": "2",
+ "player_id": "7839",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "CIN",
+ "years_exp": "1",
+ },
+ "pick_no": 3,
+ "picked_by": "869382250104578048",
+ "player_id": "7839",
+ "reactions": None,
+ "roster_id": 5,
+ "round": 1,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 4,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Rodrigo",
+ "injury_status": "",
+ "last_name": "Blankenship",
+ "news_updated": "1663001741197",
+ "number": "3",
+ "player_id": "7062",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "IND",
+ "years_exp": "2",
+ },
+ "pick_no": 4,
+ "picked_by": "861082899649261568",
+ "player_id": "7062",
+ "reactions": None,
+ "roster_id": 2,
+ "round": 1,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 5,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Mason",
+ "injury_status": "",
+ "last_name": "Crosby",
+ "news_updated": "1662999640674",
+ "number": "2",
+ "player_id": "59",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "GB",
+ "years_exp": "15",
+ },
+ "pick_no": 5,
+ "picked_by": "862871829390409728",
+ "player_id": "59",
+ "reactions": None,
+ "roster_id": 4,
+ "round": 1,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 6,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Matt",
+ "injury_status": "",
+ "last_name": "Prater",
+ "news_updated": "1662956160040",
+ "number": "5",
+ "player_id": "17",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "ARI",
+ "years_exp": "16",
+ },
+ "pick_no": 6,
+ "picked_by": "852776903310966784",
+ "player_id": "17",
+ "reactions": None,
+ "roster_id": 1,
+ "round": 1,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 6,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Chris",
+ "injury_status": "",
+ "last_name": "Boswell",
+ "news_updated": "1662999940930",
+ "number": "9",
+ "player_id": "1945",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "PIT",
+ "years_exp": "8",
+ },
+ "pick_no": 7,
+ "picked_by": "852776903310966784",
+ "player_id": "1945",
+ "reactions": None,
+ "roster_id": 1,
+ "round": 2,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 5,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Jason",
+ "injury_status": "",
+ "last_name": "Sanders",
+ "news_updated": "1663017661737",
+ "number": "7",
+ "player_id": "5119",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "MIA",
+ "years_exp": "4",
+ },
+ "pick_no": 8,
+ "picked_by": "862871829390409728",
+ "player_id": "5119",
+ "reactions": None,
+ "roster_id": 4,
+ "round": 2,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 4,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Austin",
+ "injury_status": "",
+ "last_name": "Seibert",
+ "news_updated": "1662993941075",
+ "number": "19",
+ "player_id": "6219",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "DET",
+ "years_exp": "3",
+ },
+ "pick_no": 9,
+ "picked_by": "861082899649261568",
+ "player_id": "6219",
+ "reactions": None,
+ "roster_id": 2,
+ "round": 2,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 3,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Jason",
+ "injury_status": "",
+ "last_name": "Myers",
+ "news_updated": "1663044303724",
+ "number": "5",
+ "player_id": "2747",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "SEA",
+ "years_exp": "7",
+ },
+ "pick_no": 10,
+ "picked_by": "869382250104578048",
+ "player_id": "2747",
+ "reactions": None,
+ "roster_id": 5,
+ "round": 2,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 2,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Ka'imi",
+ "injury_status": "",
+ "last_name": "Fairbairn",
+ "news_updated": "1662990939819",
+ "number": "7",
+ "player_id": "3451",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "HOU",
+ "years_exp": "6",
+ },
+ "pick_no": 11,
+ "picked_by": "862555482408194048",
+ "player_id": "3451",
+ "reactions": None,
+ "roster_id": 6,
+ "round": 2,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 1,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Riley",
+ "injury_status": "",
+ "last_name": "Patterson",
+ "news_updated": "1663089907220",
+ "number": "10",
+ "player_id": "7922",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "JAX",
+ "years_exp": "1",
+ },
+ "pick_no": 12,
+ "picked_by": "729138469988884480",
+ "player_id": "7922",
+ "reactions": None,
+ "roster_id": 3,
+ "round": 2,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 1,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Randy",
+ "injury_status": "",
+ "last_name": "Bullock",
+ "news_updated": "1663003558707",
+ "number": "14",
+ "player_id": "1099",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "TEN",
+ "years_exp": "10",
+ },
+ "pick_no": 13,
+ "picked_by": "729138469988884480",
+ "player_id": "1099",
+ "reactions": None,
+ "roster_id": 3,
+ "round": 3,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 2,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Dustin",
+ "injury_status": "",
+ "last_name": "Hopkins",
+ "news_updated": "1663090507154",
+ "number": "6",
+ "player_id": "1348",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "LAC",
+ "years_exp": "9",
+ },
+ "pick_no": 14,
+ "picked_by": "862555482408194048",
+ "player_id": "1348",
+ "reactions": None,
+ "roster_id": 6,
+ "round": 3,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 3,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Eddy",
+ "injury_status": "",
+ "last_name": "Pineiro",
+ "news_updated": "1662992140120",
+ "number": "4",
+ "player_id": "5189",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "CAR",
+ "years_exp": "4",
+ },
+ "pick_no": 15,
+ "picked_by": "869382250104578048",
+ "player_id": "5189",
+ "reactions": None,
+ "roster_id": 5,
+ "round": 3,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 4,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Nick",
+ "injury_status": "",
+ "last_name": "Folk",
+ "news_updated": "1663003258469",
+ "number": "6",
+ "player_id": "650",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "NE",
+ "years_exp": "15",
+ },
+ "pick_no": 16,
+ "picked_by": "861082899649261568",
+ "player_id": "650",
+ "reactions": None,
+ "roster_id": 2,
+ "round": 3,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 5,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Greg",
+ "injury_status": "",
+ "last_name": "Joseph",
+ "news_updated": "1663002341081",
+ "number": "1",
+ "player_id": "5272",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "MIN",
+ "years_exp": "4",
+ },
+ "pick_no": 17,
+ "picked_by": "862871829390409728",
+ "player_id": "5272",
+ "reactions": None,
+ "roster_id": 4,
+ "round": 3,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 6,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Ryan",
+ "injury_status": "",
+ "last_name": "Succop",
+ "news_updated": "1663000240339",
+ "number": "3",
+ "player_id": "391",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "TB",
+ "years_exp": "13",
+ },
+ "pick_no": 18,
+ "picked_by": "852776903310966784",
+ "player_id": "391",
+ "reactions": None,
+ "roster_id": 1,
+ "round": 3,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 6,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Brandon",
+ "injury_status": "",
+ "last_name": "McManus",
+ "news_updated": "1663118110753",
+ "number": "8",
+ "player_id": "1433",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "DEN",
+ "years_exp": "9",
+ },
+ "pick_no": 19,
+ "picked_by": "852776903310966784",
+ "player_id": "1433",
+ "reactions": None,
+ "roster_id": 1,
+ "round": 4,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 5,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Graham",
+ "injury_status": "",
+ "last_name": "Gano",
+ "news_updated": "1662991540579",
+ "number": "9",
+ "player_id": "503",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "NYG",
+ "years_exp": "13",
+ },
+ "pick_no": 20,
+ "picked_by": "862871829390409728",
+ "player_id": "503",
+ "reactions": None,
+ "roster_id": 4,
+ "round": 4,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 4,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Joey",
+ "injury_status": "",
+ "last_name": "Slye",
+ "news_updated": "1663003558704",
+ "number": "6",
+ "player_id": "6528",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "WAS",
+ "years_exp": "3",
+ },
+ "pick_no": 21,
+ "picked_by": "861082899649261568",
+ "player_id": "6528",
+ "reactions": None,
+ "roster_id": 2,
+ "round": 4,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 3,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Cade",
+ "injury_status": "",
+ "last_name": "York",
+ "news_updated": "1662944758110",
+ "number": "3",
+ "player_id": "8258",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "CLE",
+ "years_exp": "0",
+ },
+ "pick_no": 22,
+ "picked_by": "869382250104578048",
+ "player_id": "8258",
+ "reactions": None,
+ "roster_id": 5,
+ "round": 4,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 2,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Wil",
+ "injury_status": "",
+ "last_name": "Lutz",
+ "news_updated": "1663020361515",
+ "number": "3",
+ "player_id": "3678",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "NO",
+ "years_exp": "6",
+ },
+ "pick_no": 23,
+ "picked_by": "862555482408194048",
+ "player_id": "3678",
+ "reactions": None,
+ "roster_id": 6,
+ "round": 4,
+ },
+ {
+ "draft_id": "874771855859945472",
+ "draft_slot": 1,
+ "is_keeper": None,
+ "metadata": {
+ "first_name": "Matt",
+ "injury_status": "",
+ "last_name": "Ammendola",
+ "news_updated": "1663180547464",
+ "number": "0",
+ "player_id": "7617",
+ "position": "K",
+ "sport": "nfl",
+ "status": "Active",
+ "team": "KC",
+ "years_exp": "1",
+ },
+ "pick_no": 24,
+ "picked_by": "729138469988884480",
+ "player_id": "7617",
+ "reactions": None,
+ "roster_id": 3,
+ "round": 4,
+ },
+]
+USER_A_LEAGUES_2022 = [
+ {
+ "name": "test",
+ "status": "complete",
+ "metadata": None,
+ "settings": {
+ "waiver_budget": 100,
+ "disable_adds": 0,
+ "capacity_override": 0,
+ "waiver_bid_min": 0,
+ "taxi_deadline": 0,
+ "draft_rounds": 3,
+ "reserve_allow_na": 0,
+ "playoff_seed_type": 0,
+ "playoff_teams": 6,
+ "num_teams": 8,
+ "daily_waivers_hour": 0,
+ "playoff_type": 0,
+ "taxi_slots": 0,
+ "playoff_week_start": 15,
+ "waiver_clear_days": 2,
+ "reserve_allow_doubtful": 0,
+ "commissioner_direct_invite": 0,
+ "reserve_allow_dnr": 0,
+ "taxi_allow_vets": 0,
+ "waiver_day_of_week": 2,
+ "playoff_round_type": 0,
+ "reserve_allow_out": 0,
+ "reserve_allow_sus": 0,
+ "trade_deadline": 11,
+ "taxi_years": 0,
+ "daily_waivers": 0,
+ "pick_trading": 1,
+ "type": 0,
+ "max_keepers": 1,
+ "waiver_type": 0,
+ "league_average_match": 0,
+ "trade_review_days": 2,
+ "bench_lock": 0,
+ "offseason_adds": 0,
+ "leg": 1,
+ "reserve_slots": 0,
+ "was_auto_archived": 1,
+ "reserve_allow_cov": 0,
+ },
+ "avatar": None,
+ "company_id": None,
+ "shard": 239,
+ "season": "2022",
+ "season_type": "regular",
+ "sport": "nfl",
+ "scoring_settings": {
+ "sack": 1.0,
+ "fgm_40_49": 4.0,
+ "pass_int": -1.0,
+ "pts_allow_0": 10.0,
+ "pass_2pt": 2.0,
+ "st_td": 6.0,
+ "rec_td": 6.0,
+ "fgm_30_39": 3.0,
+ "xpmiss": -1.0,
+ "rush_td": 6.0,
+ "rec_2pt": 2.0,
+ "st_fum_rec": 1.0,
+ "fgmiss": -1.0,
+ "ff": 1.0,
+ "rec": 1.0,
+ "pts_allow_14_20": 1.0,
+ "fgm_0_19": 3.0,
+ "int": 2.0,
+ "def_st_fum_rec": 1.0,
+ "fum_lost": -2.0,
+ "pts_allow_1_6": 7.0,
+ "fgm_20_29": 3.0,
+ "pts_allow_21_27": 0.0,
+ "xpm": 1.0,
+ "rush_2pt": 2.0,
+ "fum_rec": 2.0,
+ "def_st_td": 6.0,
+ "fgm_50p": 5.0,
+ "def_td": 6.0,
+ "safe": 2.0,
+ "pass_yd": 0.04,
+ "blk_kick": 2.0,
+ "pass_td": 4.0,
+ "rush_yd": 0.1,
+ "fum": 0.0,
+ "pts_allow_28_34": -1.0,
+ "pts_allow_35p": -4.0,
+ "fum_rec_td": 6.0,
+ "rec_yd": 0.1,
+ "def_st_ff": 1.0,
+ "pts_allow_7_13": 4.0,
+ "st_ff": 1.0,
+ },
+ "last_message_id": "852776957778173952",
+ "display_order": -9999,
+ "last_author_avatar": None,
+ "last_author_display_name": None,
+ "last_author_id": None,
+ "last_author_is_bot": None,
+ "last_message_attachment": None,
+ "last_message_text_map": None,
+ "last_message_time": 1657680379865,
+ "last_pinned_message_id": None,
+ "draft_id": "852776958369591296",
+ "last_read_id": "852776957778173952",
+ "league_id": "852776957778173952",
+ "previous_league_id": None,
+ "group_id": None,
+ "last_transaction_id": None,
+ "roster_positions": [
+ "QB",
+ "RB",
+ "RB",
+ "WR",
+ "WR",
+ "TE",
+ "FLEX",
+ "FLEX",
+ "K",
+ "DEF",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ ],
+ "bracket_id": None,
+ "loser_bracket_id": None,
+ "total_rosters": 8,
+ },
+ {
+ "name": "Pizza Bitch League",
+ "status": "complete",
+ "metadata": {
+ "auto_continue": "on",
+ "continued": "yes",
+ "division_1": "Battle Buzzards",
+ "division_1_avatar": "https://sleepercdn.com/uploads/abcf9fe61ad5e6889e7d0c5c756e4974",
+ "division_2": "Angry Aardvarks",
+ "division_2_avatar": "https://sleepercdn.com/uploads/4136a82dfcf0aa2998f74c9ba004648d",
+ "keeper_deadline": "0",
+ "latest_league_winner_roster_id": "3",
+ "trophy_loser": "loser1",
+ "trophy_loser_background": "poop",
+ "trophy_loser_banner_text": "Pizza Bitch",
+ "trophy_winner": "winner2",
+ "trophy_winner_background": "fireworks",
+ "trophy_winner_banner_text": "Sausage Bowl IV",
+ },
+ "settings": {
+ "best_ball": 0,
+ "last_report": 15,
+ "waiver_budget": 100,
+ "disable_adds": 0,
+ "divisions": 2,
+ "capacity_override": 0,
+ "waiver_bid_min": 0,
+ "taxi_deadline": 0,
+ "draft_rounds": 3,
+ "reserve_allow_na": 0,
+ "start_week": 1,
+ "playoff_seed_type": 0,
+ "playoff_teams": 4,
+ "veto_votes_needed": 3,
+ "num_teams": 6,
+ "daily_waivers_hour": 0,
+ "playoff_type": 0,
+ "taxi_slots": 0,
+ "last_scored_leg": 17,
+ "daily_waivers_days": 1024,
+ "playoff_week_start": 16,
+ "waiver_clear_days": 2,
+ "reserve_allow_doubtful": 0,
+ "commissioner_direct_invite": 1,
+ "veto_auto_poll": 0,
+ "reserve_allow_dnr": 0,
+ "taxi_allow_vets": 0,
+ "waiver_day_of_week": 2,
+ "playoff_round_type": 0,
+ "reserve_allow_out": 1,
+ "reserve_allow_sus": 1,
+ "veto_show_votes": 0,
+ "trade_deadline": 99,
+ "taxi_years": 0,
+ "daily_waivers": 1,
+ "disable_trades": 0,
+ "pick_trading": 1,
+ "type": 1,
+ "max_keepers": 2,
+ "waiver_type": 2,
+ "league_average_match": 0,
+ "trade_review_days": 2,
+ "bench_lock": 1,
+ "offseason_adds": 0,
+ "leg": 17,
+ "reserve_slots": 2,
+ "reserve_allow_cov": 1,
+ "daily_waivers_last_ran": 3,
+ },
+ "avatar": "18476ac7f94576727c21a08344391481",
+ "company_id": None,
+ "shard": 181,
+ "season": "2022",
+ "season_type": "regular",
+ "sport": "nfl",
+ "scoring_settings": {
+ "sack": 1.0,
+ "fgm_40_49": 3.0,
+ "fgm_yds": 0.0,
+ "pass_int": -2.0,
+ "fgmiss_50p": 0.0,
+ "pts_allow_0": 10.0,
+ "pass_2pt": 2.0,
+ "st_td": 6.0,
+ "fgm_yds_over_30": 0.1,
+ "rec_td": 6.0,
+ "fgm_30_39": 3.0,
+ "xpmiss": -1.0,
+ "rush_td": 6.0,
+ "def_4_and_stop": 2.0,
+ "rec_2pt": 2.0,
+ "st_fum_rec": 1.0,
+ "fgmiss": 0.0,
+ "ff": 1.0,
+ "fgmiss_30_39": -1.0,
+ "rec": 0.0,
+ "pts_allow_14_20": 1.0,
+ "fgm_0_19": 3.0,
+ "int": 2.0,
+ "def_st_fum_rec": 1.0,
+ "fum_lost": -2.0,
+ "pts_allow_1_6": 7.0,
+ "rec_fd": 0.0,
+ "kr_yd": 0.04,
+ "fgmiss_20_29": -1.0,
+ "fgm_20_29": 3.0,
+ "pts_allow_21_27": 0.0,
+ "xpm": 1.0,
+ "pass_sack": -1.0,
+ "fgmiss_0_19": -1.0,
+ "tkl_loss": 0.25,
+ "rush_2pt": 2.0,
+ "fum_rec": 2.0,
+ "def_st_td": 6.0,
+ "fgm_50p": 3.0,
+ "def_td": 6.0,
+ "safe": 2.0,
+ "pass_yd": 0.04,
+ "fgmiss_40_49": -1.0,
+ "blk_kick": 2.0,
+ "pass_td": 4.0,
+ "rush_yd": 0.1,
+ "pr_yd": 0.04,
+ "fum": 0.0,
+ "pts_allow_28_34": -1.0,
+ "pts_allow_35p": -4.0,
+ "fum_rec_td": 6.0,
+ "rec_yd": 0.1,
+ "def_st_ff": 1.0,
+ "pts_allow_7_13": 4.0,
+ "st_ff": 1.0,
+ },
+ "last_message_id": "916264309267394560",
+ "display_order": 0,
+ "last_author_avatar": None,
+ "last_author_display_name": "sys",
+ "last_author_id": "166666666666666666",
+ "last_author_is_bot": True,
+ "last_message_attachment": None,
+ "last_message_text_map": None,
+ "last_message_time": 1672816943998,
+ "last_pinned_message_id": None,
+ "draft_id": "861067611478290432",
+ "last_read_id": "914329083142660096",
+ "league_id": "861067611004321792",
+ "previous_league_id": None,
+ "group_id": None,
+ "last_transaction_id": 885960129353441280,
+ "roster_positions": [
+ "QB",
+ "RB",
+ "RB",
+ "WR",
+ "WR",
+ "TE",
+ "FLEX",
+ "FLEX",
+ "FLEX",
+ "K",
+ "DEF",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ ],
+ "bracket_id": 911286544366010368,
+ "loser_bracket_id": 911286544370204672,
+ "total_rosters": 6,
+ },
+ {
+ "name": "RB's: We Have the Cleats",
+ "status": "complete",
+ "metadata": {
+ "auto_continue": "on",
+ "continued": "yes",
+ "division_1": "Ass Men",
+ "division_1_avatar": "https://sleepercdn.com/uploads/5d12b28091a4ea45e026622179a73dc9",
+ "division_2": "Breast Boys",
+ "division_2_avatar": "https://sleepercdn.com/uploads/6bf3496d4f7fc5672edd89cc53d0d4df",
+ "keeper_deadline": "0",
+ "latest_league_winner_roster_id": "2",
+ },
+ "settings": {
+ "best_ball": 0,
+ "last_report": 14,
+ "waiver_budget": 100,
+ "disable_adds": 0,
+ "divisions": 2,
+ "capacity_override": 0,
+ "waiver_bid_min": 0,
+ "taxi_deadline": 0,
+ "draft_rounds": 3,
+ "reserve_allow_na": 0,
+ "start_week": 1,
+ "playoff_seed_type": 0,
+ "playoff_teams": 6,
+ "veto_votes_needed": 5,
+ "num_teams": 12,
+ "daily_waivers_hour": 0,
+ "playoff_type": 0,
+ "taxi_slots": 0,
+ "last_scored_leg": 17,
+ "daily_waivers_days": 5461,
+ "playoff_week_start": 15,
+ "waiver_clear_days": 1,
+ "reserve_allow_doubtful": 0,
+ "commissioner_direct_invite": 0,
+ "veto_auto_poll": 0,
+ "reserve_allow_dnr": 0,
+ "taxi_allow_vets": 0,
+ "waiver_day_of_week": 2,
+ "playoff_round_type": 0,
+ "reserve_allow_out": 1,
+ "reserve_allow_sus": 0,
+ "veto_show_votes": 0,
+ "trade_deadline": 11,
+ "taxi_years": 0,
+ "daily_waivers": 0,
+ "disable_trades": 0,
+ "pick_trading": 1,
+ "type": 0,
+ "max_keepers": 1,
+ "waiver_type": 2,
+ "league_average_match": 1,
+ "trade_review_days": 0,
+ "bench_lock": 1,
+ "offseason_adds": 0,
+ "leg": 17,
+ "reserve_slots": 2,
+ "reserve_allow_cov": 1,
+ "daily_waivers_last_ran": 5,
+ },
+ "avatar": "ae717fa87f2de75fa68d70e94f04e2ac",
+ "company_id": None,
+ "shard": 895,
+ "season": "2022",
+ "season_type": "regular",
+ "sport": "nfl",
+ "scoring_settings": {
+ "sack": 1.0,
+ "fgm_40_49": 3.0,
+ "bonus_rec_te": 0.0,
+ "pass_int": -2.0,
+ "pts_allow_0": 10.0,
+ "pass_2pt": 2.0,
+ "rec_0_4": 0.0,
+ "st_td": 6.0,
+ "rec_30_39": 0.0,
+ "fgm_yds_over_30": 0.1,
+ "rec_td": 6.0,
+ "rec_20_29": 0.0,
+ "fgm_30_39": 3.0,
+ "xpmiss": -1.0,
+ "rush_td": 6.0,
+ "fgm": 0.0,
+ "rec_2pt": 2.0,
+ "rush_fd": 0.0,
+ "st_fum_rec": 0.0,
+ "fgmiss": -1.0,
+ "ff": 1.0,
+ "rec": 0.0,
+ "pts_allow_14_20": 1.0,
+ "fgm_0_19": 3.0,
+ "int": 2.0,
+ "def_st_fum_rec": 0.0,
+ "fum_lost": -2.0,
+ "pts_allow_1_6": 7.0,
+ "rec_fd": 0.0,
+ "rush_att": 0.0,
+ "rec_5_9": 0.0,
+ "fgm_20_29": 3.0,
+ "pts_allow_21_27": 0.0,
+ "xpm": 1.0,
+ "rush_2pt": 2.0,
+ "fum_rec": 2.0,
+ "rec_10_19": 0.0,
+ "def_st_td": 6.0,
+ "fgm_50p": 3.0,
+ "def_td": 6.0,
+ "safe": 2.0,
+ "pass_yd": 0.04,
+ "blk_kick": 2.0,
+ "pass_td": 4.0,
+ "rush_yd": 0.1,
+ "fum": 0.0,
+ "pts_allow_28_34": -1.0,
+ "pts_allow_35p": -4.0,
+ "fum_rec_td": 6.0,
+ "rec_yd": 0.1,
+ "def_st_ff": 0.0,
+ "pts_allow_7_13": 4.0,
+ "st_ff": 0.0,
+ },
+ "last_message_id": "982454396099362816",
+ "display_order": 1,
+ "last_author_avatar": "5c5c3b22010fc2b2615a1eb147b0e051",
+ "last_author_display_name": "joeyagreco",
+ "last_author_id": "852776903310966784",
+ "last_author_is_bot": False,
+ "last_message_attachment": None,
+ "last_message_text_map": None,
+ "last_message_time": 1688597890480,
+ "last_pinned_message_id": "931354251186577408",
+ "draft_id": "863198403067240448",
+ "last_read_id": "982454396099362816",
+ "league_id": "863198402471673856",
+ "previous_league_id": None,
+ "group_id": None,
+ "last_transaction_id": None,
+ "roster_positions": [
+ "QB",
+ "RB",
+ "RB",
+ "WR",
+ "WR",
+ "TE",
+ "FLEX",
+ "FLEX",
+ "K",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ "BN",
+ ],
+ "bracket_id": 908645163168309248,
+ "loser_bracket_id": 908645163168309249,
+ "total_rosters": 12,
+ },
+ {
+ "name": "Kick Picks",
+ "status": "complete",
+ "metadata": {
+ "auto_continue": "on",
+ "continued": "yes",
+ "keeper_deadline": "0",
+ "latest_league_winner_roster_id": "6",
+ },
+ "settings": {
+ "best_ball": 0,
+ "last_report": 16,
+ "waiver_budget": 100,
+ "disable_adds": 0,
+ "capacity_override": 0,
+ "waiver_bid_min": 0,
+ "taxi_deadline": 0,
+ "draft_rounds": 3,
+ "reserve_allow_na": 0,
+ "start_week": 2,
+ "playoff_seed_type": 1,
+ "playoff_teams": 4,
+ "veto_votes_needed": 3,
+ "num_teams": 6,
+ "daily_waivers_hour": 0,
+ "playoff_type": 0,
+ "taxi_slots": 0,
+ "last_scored_leg": 18,
+ "daily_waivers_days": 5461,
+ "playoff_week_start": 17,
+ "waiver_clear_days": 1,
+ "reserve_allow_doubtful": 0,
+ "commissioner_direct_invite": 0,
+ "veto_auto_poll": 0,
+ "reserve_allow_dnr": 0,
+ "taxi_allow_vets": 0,
+ "waiver_day_of_week": 2,
+ "playoff_round_type": 0,
+ "reserve_allow_out": 0,
+ "reserve_allow_sus": 0,
+ "veto_show_votes": 0,
+ "trade_deadline": 11,
+ "taxi_years": 0,
+ "daily_waivers": 0,
+ "disable_trades": 0,
+ "pick_trading": 1,
+ "type": 0,
+ "max_keepers": 1,
+ "waiver_type": 2,
+ "league_average_match": 0,
+ "trade_review_days": 1,
+ "bench_lock": 1,
+ "offseason_adds": 0,
+ "leg": 18,
+ "reserve_slots": 0,
+ "reserve_allow_cov": 0,
+ "daily_waivers_last_ran": 15,
+ },
+ "avatar": None,
+ "company_id": None,
+ "shard": 242,
+ "season": "2022",
+ "season_type": "regular",
+ "sport": "nfl",
+ "scoring_settings": {
+ "sack": 1.0,
+ "fgm_40_49": 0.0,
+ "pass_int": -1.0,
+ "fgmiss_50p": 1.0,
+ "pts_allow_0": 10.0,
+ "pass_2pt": 2.0,
+ "st_td": 6.0,
+ "rec_td": 6.0,
+ "fgm_30_39": 0.0,
+ "xpmiss": 3.0,
+ "rush_td": 6.0,
+ "fgm": -0.25,
+ "rec_2pt": 2.0,
+ "st_fum_rec": 1.0,
+ "fgmiss": 0.0,
+ "ff": 1.0,
+ "fgmiss_30_39": 3.0,
+ "rec": 1.0,
+ "pts_allow_14_20": 1.0,
+ "fgm_0_19": 0.0,
+ "int": 2.0,
+ "def_st_fum_rec": 1.0,
+ "fum_lost": -2.0,
+ "pts_allow_1_6": 7.0,
+ "fgmiss_20_29": 4.0,
+ "fgm_20_29": 0.0,
+ "pts_allow_21_27": 0.0,
+ "xpm": -0.25,
+ "fgmiss_0_19": 5.0,
+ "rush_2pt": 2.0,
+ "fum_rec": 2.0,
+ "def_st_td": 6.0,
+ "fgm_50p": 0.0,
+ "def_td": 6.0,
+ "safe": 2.0,
+ "pass_yd": 0.04,
+ "fgmiss_40_49": 2.0,
+ "blk_kick": 2.0,
+ "pass_td": 4.0,
+ "rush_yd": 0.1,
+ "fum": 0.0,
+ "pts_allow_28_34": -1.0,
+ "pts_allow_35p": -4.0,
+ "fum_rec_td": 6.0,
+ "rec_yd": 0.1,
+ "def_st_ff": 1.0,
+ "pts_allow_7_13": 4.0,
+ "st_ff": 1.0,
+ },
+ "last_message_id": "1001971729176166400",
+ "display_order": 2,
+ "last_author_avatar": "82aec8e811b839b8ec25d7b458afd57b",
+ "last_author_display_name": "RickyJ49",
+ "last_author_id": "869382250104578048",
+ "last_author_is_bot": False,
+ "last_message_attachment": None,
+ "last_message_text_map": None,
+ "last_message_time": 1693251185272,
+ "last_pinned_message_id": None,
+ "draft_id": "874771855859945472",
+ "last_read_id": "1001971729176166400",
+ "league_id": "874771854727471104",
+ "previous_league_id": None,
+ "group_id": None,
+ "last_transaction_id": None,
+ "roster_positions": ["K", "K", "K", "BN"],
+ "bracket_id": 913710415370788864,
+ "loser_bracket_id": 913710415374983168,
+ "total_rosters": 6,
+ },
+]
+
+# USER B
+USER_B_USER_ID = "589073650351644672"
+USER_B_USERNAME = "sleeper"
+USER_B_AVATAR_ID = "d9a0519df672516d2b6fce037f374456"
+USER_B_USER = {
+ "avatar": "d9a0519df672516d2b6fce037f374456",
+ "cookies": None,
+ "created": None,
+ "currencies": None,
+ "data_updated": None,
+ "deleted": None,
+ "display_name": "Sleeper",
+ "email": None,
+ "is_bot": True,
+ "metadata": None,
+ "notifications": None,
+ "pending": None,
+ "phone": None,
+ "real_name": None,
+ "solicitable": None,
+ "summoner_name": None,
+ "summoner_region": None,
+ "token": None,
+ "user_id": "589073650351644672",
+ "username": "sleeper",
+ "verification": None,
+}
+
+# LEAGUE A
+LEAGUE_A_LEAGUE_ID = "874771854727471104"
+LEAGUE_A_LEAGUE = {
+ "name": "Kick Picks",
+ "status": "complete",
+ "metadata": {
+ "auto_continue": "on",
+ "continued": "yes",
+ "keeper_deadline": "0",
+ "latest_league_winner_roster_id": "6",
+ },
+ "settings": {
+ "best_ball": 0,
+ "last_report": 16,
+ "waiver_budget": 100,
+ "disable_adds": 0,
+ "capacity_override": 0,
+ "waiver_bid_min": 0,
+ "taxi_deadline": 0,
+ "draft_rounds": 3,
+ "reserve_allow_na": 0,
+ "start_week": 2,
+ "playoff_seed_type": 1,
+ "playoff_teams": 4,
+ "veto_votes_needed": 3,
+ "num_teams": 6,
+ "daily_waivers_hour": 0,
+ "playoff_type": 0,
+ "taxi_slots": 0,
+ "last_scored_leg": 18,
+ "daily_waivers_days": 5461,
+ "playoff_week_start": 17,
+ "waiver_clear_days": 1,
+ "reserve_allow_doubtful": 0,
+ "commissioner_direct_invite": 0,
+ "veto_auto_poll": 0,
+ "reserve_allow_dnr": 0,
+ "taxi_allow_vets": 0,
+ "waiver_day_of_week": 2,
+ "playoff_round_type": 0,
+ "reserve_allow_out": 0,
+ "reserve_allow_sus": 0,
+ "veto_show_votes": 0,
+ "trade_deadline": 11,
+ "taxi_years": 0,
+ "daily_waivers": 0,
+ "disable_trades": 0,
+ "pick_trading": 1,
+ "type": 0,
+ "max_keepers": 1,
+ "waiver_type": 2,
+ "league_average_match": 0,
+ "trade_review_days": 1,
+ "bench_lock": 1,
+ "offseason_adds": 0,
+ "leg": 18,
+ "reserve_slots": 0,
+ "reserve_allow_cov": 0,
+ "daily_waivers_last_ran": 15,
+ },
+ "avatar": None,
+ "company_id": None,
+ "shard": 242,
+ "season": "2022",
+ "season_type": "regular",
+ "sport": "nfl",
+ "scoring_settings": {
+ "sack": 1.0,
+ "fgm_40_49": 0.0,
+ "pass_int": -1.0,
+ "fgmiss_50p": 1.0,
+ "pts_allow_0": 10.0,
+ "pass_2pt": 2.0,
+ "st_td": 6.0,
+ "rec_td": 6.0,
+ "fgm_30_39": 0.0,
+ "xpmiss": 3.0,
+ "rush_td": 6.0,
+ "fgm": -0.25,
+ "rec_2pt": 2.0,
+ "st_fum_rec": 1.0,
+ "fgmiss": 0.0,
+ "ff": 1.0,
+ "fgmiss_30_39": 3.0,
+ "rec": 1.0,
+ "pts_allow_14_20": 1.0,
+ "fgm_0_19": 0.0,
+ "int": 2.0,
+ "def_st_fum_rec": 1.0,
+ "fum_lost": -2.0,
+ "pts_allow_1_6": 7.0,
+ "fgmiss_20_29": 4.0,
+ "fgm_20_29": 0.0,
+ "pts_allow_21_27": 0.0,
+ "xpm": -0.25,
+ "fgmiss_0_19": 5.0,
+ "rush_2pt": 2.0,
+ "fum_rec": 2.0,
+ "def_st_td": 6.0,
+ "fgm_50p": 0.0,
+ "def_td": 6.0,
+ "safe": 2.0,
+ "pass_yd": 0.04,
+ "fgmiss_40_49": 2.0,
+ "blk_kick": 2.0,
+ "pass_td": 4.0,
+ "rush_yd": 0.1,
+ "fum": 0.0,
+ "pts_allow_28_34": -1.0,
+ "pts_allow_35p": -4.0,
+ "fum_rec_td": 6.0,
+ "rec_yd": 0.1,
+ "def_st_ff": 1.0,
+ "pts_allow_7_13": 4.0,
+ "st_ff": 1.0,
+ },
+ "last_message_id": "1001971729176166400",
+ "last_author_avatar": "82aec8e811b839b8ec25d7b458afd57b",
+ "last_author_display_name": "RickyJ49",
+ "last_author_id": "869382250104578048",
+ "last_author_is_bot": False,
+ "last_message_attachment": None,
+ "last_message_text_map": None,
+ "last_message_time": 1693251185272,
+ "last_pinned_message_id": None,
+ "draft_id": "874771855859945472",
+ "league_id": "874771854727471104",
+ "previous_league_id": None,
+ "last_read_id": None,
+ "bracket_id": 913710415370788864,
+ "group_id": None,
+ "roster_positions": ["K", "K", "K", "BN"],
+ "loser_bracket_id": 913710415374983168,
+ "total_rosters": 6,
+}
+LEAGUE_A_DRAFT_1 = {
+ "created": 1662924372208,
+ "creators": ["852776903310966784"],
+ "draft_id": "874771855859945472",
+ "draft_order": {
+ "729138469988884480": 1,
+ "852776903310966784": 6,
+ "861082899649261568": 4,
+ "862555482408194048": 2,
+ "862871829390409728": 5,
+ "869382250104578048": 3,
+ },
+ "last_message_id": "876156180051845120",
+ "last_message_time": 1663254420820,
+ "last_picked": 1663254420543,
+ "league_id": "874771854727471104",
+ "metadata": {"description": "", "name": "Kick Picks", "scoring_type": "ppr"},
+ "season": "2022",
+ "season_type": "regular",
+ "settings": {
+ "alpha_sort": 0,
+ "autopause_enabled": 1,
+ "autopause_end_time": 900,
+ "autopause_start_time": 180,
+ "autostart": 0,
+ "cpu_autopick": 0,
+ "enforce_position_limits": 1,
+ "nomination_timer": 60,
+ "pick_timer": 28800,
+ "player_type": 0,
+ "reversal_round": 0,
+ "rounds": 4,
+ "slots_bn": 1,
+ "slots_k": 3,
+ "teams": 6,
+ },
+ "slot_to_roster_id": {"1": 3, "2": 6, "3": 5, "4": 2, "5": 4, "6": 1},
+ "sport": "nfl",
+ "start_time": 1662927345674,
+ "status": "complete",
+ "type": "snake",
+}
+LEAGUE_A_DRAFTS = [
+ {
+ "created": 1662924372208,
+ "creators": ["852776903310966784"],
+ "draft_id": "874771855859945472",
+ "draft_order": {
+ "729138469988884480": 1,
+ "852776903310966784": 6,
+ "861082899649261568": 4,
+ "862555482408194048": 2,
+ "862871829390409728": 5,
+ "869382250104578048": 3,
+ },
+ "last_message_id": "876156180051845120",
+ "last_message_time": 1663254420820,
+ "last_picked": 1663254420543,
+ "league_id": "874771854727471104",
+ "metadata": {"description": "", "name": "Kick Picks", "scoring_type": "ppr"},
+ "season": "2022",
+ "season_type": "regular",
+ "settings": {
+ "alpha_sort": 0,
+ "autopause_enabled": 1,
+ "autopause_end_time": 900,
+ "autopause_start_time": 180,
+ "autostart": 0,
+ "cpu_autopick": 0,
+ "enforce_position_limits": 1,
+ "nomination_timer": 60,
+ "pick_timer": 28800,
+ "player_type": 0,
+ "reversal_round": 0,
+ "rounds": 4,
+ "slots_bn": 1,
+ "slots_k": 3,
+ "teams": 6,
+ },
+ "sport": "nfl",
+ "start_time": 1662927345674,
+ "status": "complete",
+ "type": "snake",
+ }
+]
+LEAGUE_A_DRAFT_ID_1 = "874771855859945472"
+LEAGUE_A_DRAFT_ID_2 = "1121675041713864705"
+LEAGUE_A_DRAFT_ID_2_TRADED_PICKS = [
+ {
+ "round": 8,
+ "season": "2024",
+ "draft_id": 1121675041713864705,
+ "roster_id": 1,
+ "owner_id": 4,
+ "previous_owner_id": 1,
+ },
+ {
+ "round": 5,
+ "season": "2024",
+ "draft_id": 1121675041713864705,
+ "roster_id": 2,
+ "owner_id": 1,
+ "previous_owner_id": 2,
+ },
+ {
+ "round": 2,
+ "season": "2024",
+ "draft_id": 1121675041713864705,
+ "roster_id": 5,
+ "owner_id": 3,
+ "previous_owner_id": 5,
+ },
+ {
+ "round": 5,
+ "season": "2024",
+ "draft_id": 1121675041713864705,
+ "roster_id": 5,
+ "owner_id": 2,
+ "previous_owner_id": 5,
+ },
+ {
+ "round": 2,
+ "season": "2024",
+ "draft_id": 1121675041713864705,
+ "roster_id": 6,
+ "owner_id": 3,
+ "previous_owner_id": 6,
+ },
+]
+
+# LEAGUE B
+LEAGUE_B_LEAGUE_ID = "1002446817038147584"
+LEAGUE_B_USERS = [
+ {
+ "avatar": "f3b1db9fae71021fde37731161529701",
+ "display_name": "AlWebz",
+ "is_bot": False,
+ "is_owner": False,
+ "league_id": "1002446817038147584",
+ "metadata": {"allow_pn": "on", "archived": "off", "mention_pn": "on"},
+ "settings": None,
+ "user_id": "729138469988884480",
+ },
+ {
+ "avatar": "5c5c3b22010fc2b2615a1eb147b0e051",
+ "display_name": "joeyagreco",
+ "is_bot": False,
+ "is_owner": True,
+ "league_id": "1002446817038147584",
+ "metadata": {
+ "allow_pn": "on",
+ "allow_sms": "on",
+ "archived": "off",
+ "mascot_item_type_id_leg_10": "jessica",
+ "mascot_item_type_id_leg_11": "jessica",
+ "mascot_item_type_id_leg_12": "jessica",
+ "mascot_item_type_id_leg_13": "jessica",
+ "mascot_item_type_id_leg_14": "jessica",
+ "mascot_item_type_id_leg_15": "jessica",
+ "mascot_item_type_id_leg_16": "jessica",
+ "mascot_item_type_id_leg_17": "jessica",
+ "mascot_item_type_id_leg_18": "jessica",
+ "mascot_item_type_id_leg_4": "jessica",
+ "mascot_item_type_id_leg_5": "jessica",
+ "mascot_item_type_id_leg_6": "jessica",
+ "mascot_item_type_id_leg_7": "jessica",
+ "mascot_item_type_id_leg_8": "jessica",
+ "mascot_item_type_id_leg_9": "jessica",
+ "mascot_message_emotion_leg_4": "idle",
+ "mention_pn": "on",
+ "show_mascots": "on",
+ "team_name": "miss me w that make shit",
+ },
+ "settings": None,
+ "user_id": "852776903310966784",
+ },
+ {
+ "avatar": "2df0f395f42ba17fdec89accc3b38c8e",
+ "display_name": "evanheff25",
+ "is_bot": False,
+ "is_owner": False,
+ "league_id": "1002446817038147584",
+ "metadata": {"allow_pn": "on", "mention_pn": "on"},
+ "settings": None,
+ "user_id": "861082899649261568",
+ },
+ {
+ "avatar": "b3338675f635c2c1f42b469621d38ec6",
+ "display_name": "mrdingleberry",
+ "is_bot": False,
+ "is_owner": False,
+ "league_id": "1002446817038147584",
+ "metadata": {"allow_pn": "on", "mention_pn": "on"},
+ "settings": None,
+ "user_id": "862555482408194048",
+ },
+ {
+ "avatar": "82aec8e811b839b8ec25d7b458afd57b",
+ "display_name": "psnodgrass",
+ "is_bot": False,
+ "is_owner": False,
+ "league_id": "1002446817038147584",
+ "metadata": {
+ "allow_pn": "on",
+ "avatar": "https://sleepercdn.com/uploads/129537b5d2022d40ca18bc46c4596ebf.jpg",
+ "mention_pn": "on",
+ "team_name": "Fat Randy’s missers",
+ },
+ "settings": None,
+ "user_id": "862871829390409728",
+ },
+ {
+ "avatar": "82aec8e811b839b8ec25d7b458afd57b",
+ "display_name": "RickyJ49",
+ "is_bot": False,
+ "is_owner": False,
+ "league_id": "1002446817038147584",
+ "metadata": {"allow_pn": "on", "mention_pn": "on"},
+ "settings": None,
+ "user_id": "869382250104578048",
+ },
+]
+LEAGUE_B_WEEK_1_MATCHUPS = [
+ {
+ "points": -2.75,
+ "players": ["10955", "1433", "17", "4195"],
+ "roster_id": 1,
+ "custom_points": None,
+ "matchup_id": 3,
+ "starters": ["17", "1433", "10955"],
+ "starters_points": [-1.0, -1.25, -0.5],
+ "players_points": {"10955": -0.5, "1433": -1.25, "17": -1.0, "4195": 1.75},
+ },
+ {
+ "points": 0.0,
+ "players": ["11008", "2747", "3678", "7922"],
+ "roster_id": 2,
+ "custom_points": None,
+ "matchup_id": 2,
+ "starters": ["2747", "7922", "11008"],
+ "starters_points": [2.25, -0.75, -1.5],
+ "players_points": {"11008": -1.5, "2747": 2.25, "3678": 3.5, "7922": -0.75},
+ },
+ {
+ "points": -2.75,
+ "players": ["11058", "1266", "3451", "6528"],
+ "roster_id": 3,
+ "custom_points": None,
+ "matchup_id": 1,
+ "starters": ["1266", "11058", "3451"],
+ "starters_points": [-1.0, -1.0, -0.75],
+ "players_points": {"11058": -1.0, "1266": -1.0, "3451": -0.75, "6528": -1.0},
+ },
+ {
+ "points": -2.5,
+ "players": ["1264", "5095", "7042", "8259"],
+ "roster_id": 4,
+ "custom_points": None,
+ "matchup_id": 1,
+ "starters": ["1264", "5095", "7042"],
+ "starters_points": [-0.75, -0.75, -1.0],
+ "players_points": {"1264": -0.75, "5095": -0.75, "7042": -1.0, "8259": -1.5},
+ },
+ {
+ "points": -1.75,
+ "players": ["1348", "1945", "2020", "5119"],
+ "roster_id": 5,
+ "custom_points": None,
+ "matchup_id": 3,
+ "starters": ["2020", "1348", "1945"],
+ "starters_points": [-0.5, -1.0, -0.25],
+ "players_points": {"1348": -1.0, "1945": -0.25, "2020": -0.5, "5119": 1.5},
+ },
+ {
+ "points": 1.25,
+ "players": ["11533", "4666", "4958", "5272"],
+ "roster_id": 6,
+ "custom_points": None,
+ "matchup_id": 2,
+ "starters": ["5272", "4958", "11533"],
+ "starters_points": [-0.75, 0.5, 1.5],
+ "players_points": {"11533": 1.5, "4666": -1.0, "4958": 0.5, "5272": -0.75},
+ },
+]
+LEAGUE_B_WINNERS_BRACKET = [
+ {"m": 1, "r": 1, "l": 3, "w": 2, "t1": 3, "t2": 2},
+ {"m": 2, "r": 1, "l": 5, "w": 1, "t1": 5, "t2": 1},
+ {
+ "p": 1,
+ "m": 3,
+ "r": 2,
+ "l": 2,
+ "w": 1,
+ "t1": 2,
+ "t2": 1,
+ "t2_from": {"w": 2},
+ "t1_from": {"w": 1},
+ },
+ {
+ "p": 3,
+ "m": 4,
+ "r": 2,
+ "l": 3,
+ "w": 5,
+ "t1": 3,
+ "t2": 5,
+ "t2_from": {"l": 2},
+ "t1_from": {"l": 1},
+ },
+]
+LEAGUE_B_LOSERS_BRACKET = [{"p": 1, "m": 1, "r": 1, "l": 4, "w": 6, "t1": 4, "t2": 6}]
+LEAGUE_B_WEEK_1_TRANSACTIONS = [
+ {
+ "status": "complete",
+ "type": "waiver",
+ "metadata": {"notes": "Your waiver claim was processed successfully!"},
+ "created": 1694529022395,
+ "settings": {"seq": 0, "waiver_bid": 0},
+ "leg": 1,
+ "draft_picks": [],
+ "creator": "862871829390409728",
+ "transaction_id": "1007331366539956224",
+ "adds": {"503": 4},
+ "consenter_ids": [4],
+ "drops": {"1264": 4},
+ "roster_ids": [4],
+ "status_updated": 1694588952347,
+ "waiver_budget": [],
+ },
+ {
+ "status": "complete",
+ "type": "waiver",
+ "metadata": {"notes": "Your waiver claim was processed successfully!"},
+ "created": 1693918172956,
+ "settings": {"seq": 0, "waiver_bid": 0},
+ "leg": 1,
+ "draft_picks": [],
+ "creator": "862555482408194048",
+ "transaction_id": "1004769278291283968",
+ "adds": {"11533": 6},
+ "consenter_ids": [6],
+ "drops": {"503": 6},
+ "roster_ids": [6],
+ "status_updated": 1693984137148,
+ "waiver_budget": [],
+ },
+ {
+ "status": "complete",
+ "type": "free_agent",
+ "metadata": None,
+ "created": 1693874059318,
+ "settings": None,
+ "leg": 1,
+ "draft_picks": [],
+ "creator": "862555482408194048",
+ "transaction_id": "1004584252282834944",
+ "adds": {"4958": 6},
+ "consenter_ids": [6],
+ "drops": {"4227": 6},
+ "roster_ids": [6],
+ "status_updated": 1693874059318,
+ "waiver_budget": [],
+ },
+ {
+ "status": "complete",
+ "type": "free_agent",
+ "metadata": None,
+ "created": 1693873957016,
+ "settings": None,
+ "leg": 1,
+ "draft_picks": [],
+ "creator": "862555482408194048",
+ "transaction_id": "1004583823197147136",
+ "adds": {"5272": 6},
+ "consenter_ids": [6],
+ "drops": {"7839": 6},
+ "roster_ids": [6],
+ "status_updated": 1693873957016,
+ "waiver_budget": [],
+ },
+]
+
+# LEAGUE C
+LEAGUE_C_LEAGUE_ID = "917112471750574080"
+LEAGUE_C_TRADED_PICKS = [
+ {
+ "round": 2,
+ "season": "2023",
+ "roster_id": 1,
+ "owner_id": 6,
+ "previous_owner_id": 1,
+ },
+ {
+ "round": 4,
+ "season": "2024",
+ "roster_id": 2,
+ "owner_id": 1,
+ "previous_owner_id": 2,
+ },
+ {
+ "round": 2,
+ "season": "2024",
+ "roster_id": 3,
+ "owner_id": 6,
+ "previous_owner_id": 3,
+ },
+ {
+ "round": 1,
+ "season": "2023",
+ "roster_id": 4,
+ "owner_id": 1,
+ "previous_owner_id": 4,
+ },
+ {
+ "round": 10,
+ "season": "2023",
+ "roster_id": 4,
+ "owner_id": 5,
+ "previous_owner_id": 4,
+ },
+ {
+ "round": 6,
+ "season": "2023",
+ "roster_id": 5,
+ "owner_id": 4,
+ "previous_owner_id": 5,
+ },
+ {
+ "round": 8,
+ "season": "2023",
+ "roster_id": 5,
+ "owner_id": 6,
+ "previous_owner_id": 5,
+ },
+ {
+ "round": 8,
+ "season": "2023",
+ "roster_id": 6,
+ "owner_id": 3,
+ "previous_owner_id": 6,
+ },
+ {
+ "round": 3,
+ "season": "2024",
+ "roster_id": 6,
+ "owner_id": 3,
+ "previous_owner_id": 6,
+ },
+ {
+ "round": 5,
+ "season": "2024",
+ "roster_id": 6,
+ "owner_id": 1,
+ "previous_owner_id": 6,
+ },
+]
diff --git a/test/integration/test_api/test_avatar.py b/test/integration/test_api/test_avatar.py
new file mode 100644
index 0000000..4337bbd
--- /dev/null
+++ b/test/integration/test_api/test_avatar.py
@@ -0,0 +1,25 @@
+import os
+import unittest
+
+from sleeper.api import get_avatar
+from test.integration.test_api.constants import USER_B_AVATAR_ID
+
+
+class TestAvatar(unittest.TestCase):
+ _PATH_TO_TEST_DIR = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), "..", "util", "bin")
+ )
+
+ with open(os.path.join(_PATH_TO_TEST_DIR, "sleeper.bin"), "rb") as image:
+ _SLEEPER_AVATAR_BYTES = image.read()
+
+ with open(os.path.join(_PATH_TO_TEST_DIR, "sleeper_thumb.bin"), "rb") as image:
+ _SLEEPER_THUMBNAIL_AVATAR_BYTES = image.read()
+
+ def test_get_avatar_defaults(self):
+ response = get_avatar(avatar_id=USER_B_AVATAR_ID)
+ self.assertEqual(self._SLEEPER_AVATAR_BYTES, response)
+
+ def test_get_avatar_as_thumbnail(self):
+ response = get_avatar(avatar_id=USER_B_AVATAR_ID, as_thumbnail=True)
+ self.assertEqual(self._SLEEPER_THUMBNAIL_AVATAR_BYTES, response)
diff --git a/test/integration/test_api/test_draft.py b/test/integration/test_api/test_draft.py
new file mode 100644
index 0000000..2e42053
--- /dev/null
+++ b/test/integration/test_api/test_draft.py
@@ -0,0 +1,46 @@
+import unittest
+
+from sleeper.api import (
+ get_draft,
+ get_drafts_in_league,
+ get_player_draft_picks,
+ get_traded_draft_picks,
+ get_user_drafts_for_year,
+)
+from test.integration.test_api.constants import (
+ LEAGUE_A_DRAFT_1,
+ LEAGUE_A_DRAFT_ID_1,
+ LEAGUE_A_DRAFT_ID_2,
+ LEAGUE_A_DRAFT_ID_2_TRADED_PICKS,
+ LEAGUE_A_DRAFTS,
+ LEAGUE_A_LEAGUE_ID,
+ USER_A_DRAFT_PICKS_DRAFT_ID_1_2023,
+ USER_A_DRAFTS_2023,
+ USER_A_USER_ID,
+)
+
+
+class TestDraft(unittest.TestCase):
+ def test_get_user_drafts_for_year_happy_path(self):
+ response = get_user_drafts_for_year(
+ user_id=USER_A_USER_ID, sport="nfl", year=2023
+ )
+ self.assertEqual(USER_A_DRAFTS_2023, response)
+
+ def test_get_drafts_in_league(self):
+ response = get_drafts_in_league(league_id=LEAGUE_A_LEAGUE_ID)
+ self.assertEqual(LEAGUE_A_DRAFTS, response)
+
+ def test_get_draft(self):
+ response = get_draft(draft_id=LEAGUE_A_DRAFT_ID_1)
+ self.assertEqual(LEAGUE_A_DRAFT_1, response)
+
+ def test_get_player_draft_picks(self):
+ response = get_player_draft_picks(
+ draft_id=LEAGUE_A_DRAFT_ID_1,
+ )
+ self.assertEqual(USER_A_DRAFT_PICKS_DRAFT_ID_1_2023, response)
+
+ def test_get_traded_draft_picks(self):
+ response = get_traded_draft_picks(draft_id=LEAGUE_A_DRAFT_ID_2)
+ self.assertEqual(LEAGUE_A_DRAFT_ID_2_TRADED_PICKS, response)
diff --git a/test/integration/test_api/test_league.py b/test/integration/test_api/test_league.py
new file mode 100644
index 0000000..a3c16f6
--- /dev/null
+++ b/test/integration/test_api/test_league.py
@@ -0,0 +1,79 @@
+import unittest
+
+from sleeper.api import (
+ get_league,
+ get_losers_bracket,
+ get_matchups_for_week,
+ get_rosters,
+ get_sport_state,
+ get_traded_picks,
+ get_transactions,
+ get_user_leagues_for_year,
+ get_users_in_league,
+ get_winners_bracket,
+)
+from test.integration.test_api.constants import (
+ LEAGUE_A_LEAGUE,
+ LEAGUE_A_LEAGUE_ID,
+ LEAGUE_B_LEAGUE_ID,
+ LEAGUE_B_LOSERS_BRACKET,
+ LEAGUE_B_USERS,
+ LEAGUE_B_WEEK_1_MATCHUPS,
+ LEAGUE_B_WEEK_1_TRANSACTIONS,
+ LEAGUE_B_WINNERS_BRACKET,
+ LEAGUE_C_LEAGUE_ID,
+ LEAGUE_C_TRADED_PICKS,
+ USER_A_LEAGUES_2022,
+ USER_A_USER_ID,
+)
+
+
+class TestLeague(unittest.TestCase):
+ def test_get_league(self):
+ response = get_league(league_id=LEAGUE_A_LEAGUE_ID)
+ self.assertEqual(LEAGUE_A_LEAGUE, response)
+
+ def test_get_user_leagues_for_year(self):
+ response = get_user_leagues_for_year(
+ user_id=USER_A_USER_ID, sport="nfl", year=2022
+ )
+ self.assertEqual(USER_A_LEAGUES_2022, response)
+
+ def test_get_rosters(self):
+ response = get_rosters(league_id=LEAGUE_A_LEAGUE_ID)
+ # this response will constantly change, so just assert some general things
+ self.assertIsInstance(response, list)
+ self.assertEqual(6, len(response))
+ for item in response:
+ self.assertIsInstance(item, dict)
+
+ def test_get_users_in_league(self):
+ response = get_users_in_league(league_id=LEAGUE_B_LEAGUE_ID)
+ self.assertEqual(LEAGUE_B_USERS, response)
+
+ def test_get_matchups_for_week(self):
+ response = get_matchups_for_week(league_id=LEAGUE_B_LEAGUE_ID, week=1)
+ self.assertEqual(LEAGUE_B_WEEK_1_MATCHUPS, response)
+
+ def test_get_winners_bracket(self):
+ response = get_winners_bracket(league_id=LEAGUE_B_LEAGUE_ID)
+ self.assertEqual(LEAGUE_B_WINNERS_BRACKET, response)
+
+ def test_get_losers_bracket(self):
+ response = get_losers_bracket(league_id=LEAGUE_B_LEAGUE_ID)
+ self.assertEqual(LEAGUE_B_LOSERS_BRACKET, response)
+
+ def test_get_transactions(self):
+ response = get_transactions(league_id=LEAGUE_B_LEAGUE_ID, week=1)
+ self.assertEqual(LEAGUE_B_WEEK_1_TRANSACTIONS, response)
+
+ def test_get_traded_picks(self):
+ response = get_traded_picks(league_id=LEAGUE_C_LEAGUE_ID)
+ self.assertEqual(LEAGUE_C_TRADED_PICKS, response)
+
+ def test_get_sport_state(self):
+ response = get_sport_state(sport="nfl")
+ # this response will constantly change, so just assert some general things
+ self.assertIsInstance(response, dict)
+ for k in response.keys():
+ self.assertIsInstance(k, str)
diff --git a/test/integration/test_api/test_player.py b/test/integration/test_api/test_player.py
new file mode 100644
index 0000000..13fb993
--- /dev/null
+++ b/test/integration/test_api/test_player.py
@@ -0,0 +1,21 @@
+import unittest
+
+from sleeper.api import get_all_players, get_trending_players
+
+
+class TestPlayer(unittest.TestCase):
+ def test_get_all_players(self):
+ response = get_all_players(sport="nfl")
+ # this response will constantly change, so just assert some general things
+ self.assertIsInstance(response, dict)
+ for k, v in response.items():
+ self.assertIsInstance(k, str)
+ self.assertIsInstance(v, dict)
+
+ def test_get_trending_players(self):
+ response = get_trending_players(sport="nfl", trend_type="add")
+ # this response will constantly change, so just assert some general things
+ self.assertIsInstance(response, list)
+ self.assertEqual(25, len(response))
+ for item in response:
+ self.assertIsInstance(item, dict)
diff --git a/test/integration/test_api/test_user.py b/test/integration/test_api/test_user.py
new file mode 100644
index 0000000..019f29f
--- /dev/null
+++ b/test/integration/test_api/test_user.py
@@ -0,0 +1,18 @@
+import unittest
+
+from sleeper.api import get_user
+from test.integration.test_api.constants import (
+ USER_B_USER,
+ USER_B_USER_ID,
+ USER_B_USERNAME,
+)
+
+
+class TestUser(unittest.TestCase):
+ def test_get_user_with_user_id_as_identifier(self):
+ response = get_user(identifier=USER_B_USER_ID)
+ self.assertEqual(response, USER_B_USER)
+
+ def test_get_user_with_username_as_identifier(self):
+ response = get_user(identifier=USER_B_USERNAME)
+ self.assertEqual(response, USER_B_USER)
diff --git a/test/integration/util/bin/sleeper.bin b/test/integration/util/bin/sleeper.bin
new file mode 100644
index 0000000..1cd3340
Binary files /dev/null and b/test/integration/util/bin/sleeper.bin differ
diff --git a/test/integration/util/bin/sleeper_thumb.bin b/test/integration/util/bin/sleeper_thumb.bin
new file mode 100644
index 0000000..2340a39
Binary files /dev/null and b/test/integration/util/bin/sleeper_thumb.bin differ
diff --git a/test/test_api/test_AvatarAPIClient.py b/test/test_api/test_AvatarAPIClient.py
deleted file mode 100644
index 1198e45..0000000
--- a/test/test_api/test_AvatarAPIClient.py
+++ /dev/null
@@ -1,76 +0,0 @@
-import os
-import tempfile
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from requests import HTTPError
-
-from sleeper.api.AvatarAPIClient import AvatarAPIClient
-from sleeper.exception.SleeperAPIException import SleeperAPIException
-
-
-class TestAvatarAPIClient(unittest.TestCase):
- PATH_TO_TEST_DIR = os.path.abspath(
- os.path.join(os.path.dirname(__file__), "..", "files", "api")
- )
-
- @mock.patch("requests.get")
- def test_get_avatar_happy_path(self, mock_requests_get):
- mock_dict = dict()
- with open(os.path.join(self.PATH_TO_TEST_DIR, "test.png"), "rb") as image:
- f = image.read()
- original_image_bytes = bytearray(f)
- mock_response = MockResponse(mock_dict, 200, content=original_image_bytes)
- mock_requests_get.return_value = mock_response
-
- with tempfile.TemporaryDirectory() as temp_dir:
- full_image_path = os.path.join(temp_dir, "tmp.png")
- AvatarAPIClient.get_avatar(avatar_id="avatar_id", save_to_path=full_image_path)
-
- with open(full_image_path, "rb") as image:
- f = image.read()
- saved_image_bytes = bytearray(f)
- self.assertEqual(original_image_bytes, saved_image_bytes)
- self.assertTrue(os.path.exists(full_image_path))
-
- @mock.patch("requests.get")
- def test_get_avatar_thumbnail_is_true_happy_path(self, mock_requests_get):
- mock_dict = dict()
- with open(os.path.join(self.PATH_TO_TEST_DIR, "test.png"), "rb") as image:
- f = image.read()
- original_image_bytes = bytearray(f)
- mock_response = MockResponse(mock_dict, 200, content=original_image_bytes)
- mock_requests_get.return_value = mock_response
-
- with tempfile.TemporaryDirectory() as temp_dir:
- full_image_path = os.path.join(temp_dir, "tmp.png")
- AvatarAPIClient.get_avatar(
- avatar_id="avatar_id", save_to_path=full_image_path, thumbnail=True
- )
-
- with open(full_image_path, "rb") as image:
- f = image.read()
- saved_image_bytes = bytearray(f)
- self.assertEqual(original_image_bytes, saved_image_bytes)
- self.assertTrue(os.path.exists(full_image_path))
-
- @mock.patch("requests.get")
- def test_get_avatar_avatar_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(SleeperAPIException) as context:
- AvatarAPIClient.get_avatar(avatar_id="avatar_id", save_to_path="")
- self.assertEqual("No image found.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_avatar_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = dict()
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- AvatarAPIClient.get_avatar(avatar_id="avatar_id", save_to_path="")
- self.assertEqual("404 Client Error", str(context.exception))
diff --git a/test/test_api/test_DraftAPIClient.py b/test/test_api/test_DraftAPIClient.py
deleted file mode 100644
index f24b74b..0000000
--- a/test/test_api/test_DraftAPIClient.py
+++ /dev/null
@@ -1,465 +0,0 @@
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from requests import HTTPError
-
-from sleeper.api import DraftAPIClient
-from sleeper.enum.DraftStatus import DraftStatus
-from sleeper.enum.DraftType import DraftType
-from sleeper.enum.InjuryStatus import InjuryStatus
-from sleeper.enum.nfl.NFLPlayerStatus import NFLPlayerStatus
-from sleeper.enum.nfl.NFLPosition import NFLPosition
-from sleeper.enum.nfl.NFLTeam import NFLTeam
-from sleeper.enum.ScoringType import ScoringType
-from sleeper.enum.SeasonType import SeasonType
-from sleeper.enum.Sport import Sport
-from sleeper.model.Draft import Draft
-from sleeper.model.DraftMetadata import DraftMetadata
-from sleeper.model.DraftPick import DraftPick
-from sleeper.model.DraftSettings import DraftSettings
-from sleeper.model.PlayerDraftPick import PlayerDraftPick
-from sleeper.model.PlayerDraftPickMetadata import PlayerDraftPickMetadata
-
-
-class TestDraftAPIClient(unittest.TestCase):
- @mock.patch("requests.get")
- def test_get_user_drafts_for_year_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "type": "snake",
- "status": "complete",
- "start_time": 1630891562020,
- "sport": "nfl",
- "settings": {
- "teams": 8,
- "slots_wr": 3,
- "slots_te": 1,
- "slots_rb": 2,
- "slots_qb": 2,
- "slots_super_flex": 1,
- "slots_flex": 3,
- "slots_bn": 6,
- "rounds": 17,
- "reversal_round": 0,
- "player_type": 0,
- "pick_timer": 0,
- "nomination_timer": 60,
- "enforce_position_limits": 1,
- "cpu_autopick": 1,
- "alpha_sort": 0,
- },
- "season_type": "regular",
- "season": "2021",
- "metadata": {"scoring_type": "2qb", "name": "The Test", "description": "des"},
- "league_id": "738979251063275520",
- "last_picked": 1630897024291,
- "last_message_time": 1630897024793,
- "last_message_id": "740439424466202624",
- "draft_order": {"123": 45},
- "draft_id": "738979252392919040",
- "creators": ["12345", "67890"],
- "created": 1630548892636,
- "slot_to_roster_id": {"123": 45},
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = DraftAPIClient.get_user_drafts_for_year(
- user_id="user_id", sport=Sport.NFL, year="2020"
- )
-
- self.assertIsInstance(response, list)
- self.assertIsInstance(response[0], Draft)
- self.assertEqual(1630548892636, response[0].created)
- self.assertEqual(["12345", "67890"], response[0].creators)
- self.assertEqual("738979252392919040", response[0].draft_id)
- self.assertEqual({"123": 45}, response[0].draft_order)
- self.assertEqual("740439424466202624", response[0].last_message_id)
- self.assertEqual(1630897024793, response[0].last_message_time)
- self.assertEqual(1630897024291, response[0].last_picked)
- self.assertEqual("738979251063275520", response[0].league_id)
- self.assertIsInstance(response[0].metadata, DraftMetadata)
- self.assertEqual("des", response[0].metadata.description)
- self.assertEqual("The Test", response[0].metadata.name)
- self.assertEqual(ScoringType.TWO_QB, response[0].metadata.scoring_type)
- self.assertEqual("2021", response[0].season)
- self.assertEqual(SeasonType.REGULAR, response[0].season_type)
- self.assertIsInstance(response[0].settings, DraftSettings)
- self.assertEqual(0, response[0].settings.alpha_sort)
- self.assertEqual(1, response[0].settings.cpu_autopick)
- self.assertEqual(1, response[0].settings.enforce_position_limits)
- self.assertEqual(60, response[0].settings.nomination_timer)
- self.assertEqual(0, response[0].settings.pick_timer)
- self.assertEqual(0, response[0].settings.player_type)
- self.assertEqual(0, response[0].settings.reversal_round)
- self.assertEqual(17, response[0].settings.rounds)
- self.assertEqual(6, response[0].settings.slots_bn)
- self.assertEqual(3, response[0].settings.slots_flex)
- self.assertEqual(2, response[0].settings.slots_qb)
- self.assertEqual(2, response[0].settings.slots_rb)
- self.assertEqual(1, response[0].settings.slots_super_flex)
- self.assertEqual(1, response[0].settings.slots_te)
- self.assertEqual(3, response[0].settings.slots_wr)
- self.assertEqual(8, response[0].settings.teams)
- self.assertEqual({"123": 45}, response[0].slot_to_roster_id)
- self.assertEqual(Sport.NFL, response[0].sport)
- self.assertEqual(1630891562020, response[0].start_time)
- self.assertEqual(DraftStatus.COMPLETE, response[0].status)
- self.assertEqual(DraftType.SNAKE, response[0].type)
-
- @mock.patch("requests.get")
- def test_get_user_drafts_for_year_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- DraftAPIClient.get_user_drafts_for_year(user_id="user_id", sport=Sport.NFL, year="2020")
- self.assertEqual(
- "Could not get Drafts for user_id 'user_id', sport 'NFL', and year '2020'.",
- str(context.exception),
- )
-
- @mock.patch("requests.get")
- def test_get_user_drafts_for_year_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- DraftAPIClient.get_user_drafts_for_year(user_id="user_id", sport=Sport.NFL, year="2020")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_drafts_in_league_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "type": "snake",
- "status": "complete",
- "start_time": 1630891562020,
- "sport": "nfl",
- "settings": {
- "teams": 8,
- "slots_wr": 3,
- "slots_te": 1,
- "slots_rb": 2,
- "slots_qb": 2,
- "slots_super_flex": 1,
- "slots_flex": 3,
- "slots_bn": 6,
- "rounds": 17,
- "reversal_round": 0,
- "player_type": 0,
- "pick_timer": 0,
- "nomination_timer": 60,
- "enforce_position_limits": 1,
- "cpu_autopick": 1,
- "alpha_sort": 0,
- },
- "season_type": "regular",
- "season": "2021",
- "metadata": {"scoring_type": "2qb", "name": "The Test", "description": "des"},
- "league_id": "738979251063275520",
- "last_picked": 1630897024291,
- "last_message_time": 1630897024793,
- "last_message_id": "740439424466202624",
- "draft_order": {"123": 45},
- "draft_id": "738979252392919040",
- "creators": ["12345", "67890"],
- "created": 1630548892636,
- "slot_to_roster_id": {"123": 45},
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = DraftAPIClient.get_drafts_in_league(league_id="12345")
-
- self.assertIsInstance(response, list)
- self.assertIsInstance(response[0], Draft)
- self.assertEqual(1630548892636, response[0].created)
- self.assertEqual(["12345", "67890"], response[0].creators)
- self.assertEqual("738979252392919040", response[0].draft_id)
- self.assertEqual({"123": 45}, response[0].draft_order)
- self.assertEqual("740439424466202624", response[0].last_message_id)
- self.assertEqual(1630897024793, response[0].last_message_time)
- self.assertEqual(1630897024291, response[0].last_picked)
- self.assertEqual("738979251063275520", response[0].league_id)
- self.assertIsInstance(response[0].metadata, DraftMetadata)
- self.assertEqual("des", response[0].metadata.description)
- self.assertEqual("The Test", response[0].metadata.name)
- self.assertEqual(ScoringType.TWO_QB, response[0].metadata.scoring_type)
- self.assertEqual("2021", response[0].season)
- self.assertEqual(SeasonType.REGULAR, response[0].season_type)
- self.assertIsInstance(response[0].settings, DraftSettings)
- self.assertEqual(0, response[0].settings.alpha_sort)
- self.assertEqual(1, response[0].settings.cpu_autopick)
- self.assertEqual(1, response[0].settings.enforce_position_limits)
- self.assertEqual(60, response[0].settings.nomination_timer)
- self.assertEqual(0, response[0].settings.pick_timer)
- self.assertEqual(0, response[0].settings.player_type)
- self.assertEqual(0, response[0].settings.reversal_round)
- self.assertEqual(17, response[0].settings.rounds)
- self.assertEqual(6, response[0].settings.slots_bn)
- self.assertEqual(3, response[0].settings.slots_flex)
- self.assertEqual(2, response[0].settings.slots_qb)
- self.assertEqual(2, response[0].settings.slots_rb)
- self.assertEqual(1, response[0].settings.slots_super_flex)
- self.assertEqual(1, response[0].settings.slots_te)
- self.assertEqual(3, response[0].settings.slots_wr)
- self.assertEqual(8, response[0].settings.teams)
- self.assertEqual({"123": 45}, response[0].slot_to_roster_id)
- self.assertEqual(Sport.NFL, response[0].sport)
- self.assertEqual(1630891562020, response[0].start_time)
- self.assertEqual(DraftStatus.COMPLETE, response[0].status)
- self.assertEqual(DraftType.SNAKE, response[0].type)
-
- @mock.patch("requests.get")
- def test_get_drafts_in_league_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- DraftAPIClient.get_drafts_in_league(league_id="12345")
- self.assertEqual("Could not get Drafts for league_id '12345'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_drafts_in_league_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- DraftAPIClient.get_drafts_in_league(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_draft_happy_path(self, mock_requests_get):
- mock_dict = {
- "type": "snake",
- "status": "complete",
- "start_time": 1630891562020,
- "sport": "nfl",
- "settings": {
- "teams": 8,
- "slots_wr": 3,
- "slots_te": 1,
- "slots_rb": 2,
- "slots_qb": 2,
- "slots_super_flex": 1,
- "slots_flex": 3,
- "slots_bn": 6,
- "rounds": 17,
- "reversal_round": 0,
- "player_type": 0,
- "pick_timer": 0,
- "nomination_timer": 60,
- "enforce_position_limits": 1,
- "cpu_autopick": 1,
- "alpha_sort": 0,
- },
- "season_type": "regular",
- "season": "2021",
- "metadata": {"scoring_type": "2qb", "name": "The Test", "description": "des"},
- "league_id": "738979251063275520",
- "last_picked": 1630897024291,
- "last_message_time": 1630897024793,
- "last_message_id": "740439424466202624",
- "draft_order": {"123": 45},
- "draft_id": "738979252392919040",
- "creators": ["12345", "67890"],
- "created": 1630548892636,
- "slot_to_roster_id": {"123": 45},
- }
-
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = DraftAPIClient.get_draft(draft_id="12345")
-
- self.assertIsInstance(response, Draft)
- self.assertEqual(1630548892636, response.created)
- self.assertEqual(["12345", "67890"], response.creators)
- self.assertEqual("738979252392919040", response.draft_id)
- self.assertEqual({"123": 45}, response.draft_order)
- self.assertEqual("740439424466202624", response.last_message_id)
- self.assertEqual(1630897024793, response.last_message_time)
- self.assertEqual(1630897024291, response.last_picked)
- self.assertEqual("738979251063275520", response.league_id)
- self.assertIsInstance(response.metadata, DraftMetadata)
- self.assertEqual("des", response.metadata.description)
- self.assertEqual("The Test", response.metadata.name)
- self.assertEqual(ScoringType.TWO_QB, response.metadata.scoring_type)
- self.assertEqual("2021", response.season)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertIsInstance(response.settings, DraftSettings)
- self.assertEqual(0, response.settings.alpha_sort)
- self.assertEqual(1, response.settings.cpu_autopick)
- self.assertEqual(1, response.settings.enforce_position_limits)
- self.assertEqual(60, response.settings.nomination_timer)
- self.assertEqual(0, response.settings.pick_timer)
- self.assertEqual(0, response.settings.player_type)
- self.assertEqual(0, response.settings.reversal_round)
- self.assertEqual(17, response.settings.rounds)
- self.assertEqual(6, response.settings.slots_bn)
- self.assertEqual(3, response.settings.slots_flex)
- self.assertEqual(2, response.settings.slots_qb)
- self.assertEqual(2, response.settings.slots_rb)
- self.assertEqual(1, response.settings.slots_super_flex)
- self.assertEqual(1, response.settings.slots_te)
- self.assertEqual(3, response.settings.slots_wr)
- self.assertEqual(8, response.settings.teams)
- self.assertEqual({"123": 45}, response.slot_to_roster_id)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(1630891562020, response.start_time)
- self.assertEqual(DraftStatus.COMPLETE, response.status)
- self.assertEqual(DraftType.SNAKE, response.type)
-
- @mock.patch("requests.get")
- def test_get_draft_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- DraftAPIClient.get_draft(draft_id="12345")
- self.assertEqual("Could not get Draft with draft_id '12345'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_draft_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- DraftAPIClient.get_draft(draft_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_player_draft_picks_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "player_id": "2391",
- "picked_by": "234343434",
- "roster_id": "1",
- "round": 5,
- "draft_slot": 5,
- "pick_no": 1,
- "metadata": {
- "team": "ARI",
- "status": "Injured Reserve",
- "sport": "nfl",
- "position": "RB",
- "player_id": "2391",
- "number": "31",
- "news_updated": "1513007102037",
- "last_name": "Johnson",
- "injury_status": "Out",
- "first_name": "David",
- },
- "is_keeper": True,
- "draft_id": "257270643320426496",
- }
- ]
-
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = DraftAPIClient.get_player_draft_picks(draft_id="12345", sport=Sport.NFL)
-
- self.assertIsInstance(response, list)
- self.assertIsInstance(response[0], PlayerDraftPick)
- self.assertEqual("257270643320426496", response[0].draft_id)
- self.assertEqual(5, response[0].draft_slot)
- self.assertTrue(response[0].is_keeper)
- self.assertIsInstance(response[0].metadata, PlayerDraftPickMetadata)
- self.assertEqual("David", response[0].metadata.first_name)
- self.assertEqual(InjuryStatus.OUT, response[0].metadata.injury_status)
- self.assertEqual("Johnson", response[0].metadata.last_name)
- self.assertEqual("1513007102037", response[0].metadata.news_updated)
- self.assertEqual("31", response[0].metadata.number)
- self.assertEqual("2391", response[0].metadata.player_id)
- self.assertEqual(NFLPosition.RB, response[0].metadata.position)
- self.assertEqual(Sport.NFL, response[0].metadata.sport)
- self.assertEqual(NFLPlayerStatus.INJURED_RESERVE, response[0].metadata.status)
- self.assertEqual(NFLTeam.ARI, response[0].metadata.team)
- self.assertEqual(1, response[0].pick_no)
- self.assertEqual("234343434", response[0].picked_by)
- self.assertEqual("2391", response[0].player_id)
- self.assertEqual("1", response[0].roster_id)
- self.assertEqual(5, response[0].round)
-
- @mock.patch("requests.get")
- def test_get_player_draft_picks_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- DraftAPIClient.get_player_draft_picks(draft_id="12345", sport=Sport.NFL)
- self.assertEqual(
- "Could not get PlayerDraftPicks with draft_id '12345' and sport 'NFL'.",
- str(context.exception),
- )
-
- @mock.patch("requests.get")
- def test_get_player_draft_picks_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- DraftAPIClient.get_player_draft_picks(draft_id="12345", sport=Sport.NFL)
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_traded_draft_picks_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "season": "2021",
- "round": 3,
- "roster_id": 1,
- "previous_owner_id": 1,
- "owner_id": 4,
- "draft_id": 726312889421496320,
- }
- ]
-
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = DraftAPIClient.get_traded_draft_picks(draft_id="12345")
-
- self.assertIsInstance(response, list)
- self.assertIsInstance(response[0], DraftPick)
- self.assertEqual(726312889421496320, response[0].draft_id)
- self.assertEqual(4, response[0].owner_id)
- self.assertEqual(1, response[0].previous_owner_id)
- self.assertEqual(1, response[0].roster_id)
- self.assertEqual(3, response[0].round)
- self.assertEqual("2021", response[0].season)
-
- @mock.patch("requests.get")
- def test_get_traded_draft_picks_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- DraftAPIClient.get_traded_draft_picks(draft_id="12345")
- self.assertEqual(
- "Could not get traded DraftPicks with draft_id '12345'.", str(context.exception)
- )
-
- @mock.patch("requests.get")
- def test_get_traded_draft_picks_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- DraftAPIClient.get_traded_draft_picks(draft_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
diff --git a/test/test_api/test_LeagueAPIClient.py b/test/test_api/test_LeagueAPIClient.py
deleted file mode 100644
index 273fd6b..0000000
--- a/test/test_api/test_LeagueAPIClient.py
+++ /dev/null
@@ -1,1260 +0,0 @@
-import datetime
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from requests import HTTPError
-
-from sleeper.api import LeagueAPIClient
-from sleeper.enum.nfl.NFLRosterPosition import NFLRosterPosition
-from sleeper.enum.PlayoffRoundType import PlayoffRoundType
-from sleeper.enum.SeasonStatus import SeasonStatus
-from sleeper.enum.SeasonType import SeasonType
-from sleeper.enum.Sport import Sport
-from sleeper.enum.TransactionStatus import TransactionStatus
-from sleeper.enum.TransactionType import TransactionType
-from sleeper.model.FAABTransaction import FAABTransaction
-from sleeper.model.FromPlayoffMatchup import FromPlayoffMatchup
-from sleeper.model.League import League
-from sleeper.model.LeagueSettings import LeagueSettings
-from sleeper.model.Matchup import Matchup
-from sleeper.model.PlayoffMatchup import PlayoffMatchup
-from sleeper.model.Roster import Roster
-from sleeper.model.RosterSettings import RosterSettings
-from sleeper.model.ScoringSettings import ScoringSettings
-from sleeper.model.SportState import SportState
-from sleeper.model.TradedPick import TradedPick
-from sleeper.model.Transaction import Transaction
-from sleeper.model.TransactionSettings import TransactionSettings
-from sleeper.model.User import User
-
-
-class TestLeagueAPIClient(unittest.TestCase):
- @mock.patch("requests.get")
- def test_get_league_happy_path(self, mock_requests_get):
- mock_dict = {
- "total_rosters": 12,
- "status": "in_season",
- "sport": "nfl",
- "shard": 679,
- "settings": {
- "max_keepers": 1,
- "draft_rounds": 3,
- "trade_review_days": 2,
- "reserve_allow_dnr": 0,
- "capacity_override": 0,
- "pick_trading": 1,
- "disable_trades": 1,
- "taxi_years": 0,
- "taxi_allow_vets": 0,
- "best_ball": 1,
- "disable_adds": 1,
- "waiver_type": 0,
- "bench_lock": 0,
- "reserve_allow_sus": 0,
- "type": 0,
- "reserve_allow_cov": 0,
- "waiver_clear_days": 2,
- "daily_waivers_last_ran": 17,
- "waiver_day_of_week": 2,
- "start_week": 1,
- "commissioner_direct_invite": 0,
- "playoff_teams": 6,
- "num_teams": 12,
- "reserve_slots": 0,
- "playoff_round_type": 0,
- "daily_waivers_hour": 0,
- "waiver_budget": 100,
- "reserve_allow_out": 0,
- "waiver_bid_min": 0,
- "offseason_adds": 0,
- "playoff_seed_type": 0,
- "daily_waivers": 0,
- "playoff_week_start": 15,
- "daily_waivers_days": 5461,
- "league_average_match": 0,
- "leg": 1,
- "trade_deadline": 11,
- "reserve_allow_doubtful": 0,
- "taxi_deadline": 0,
- "reserve_allow_na": 0,
- "taxi_slots": 0,
- "playoff_type": 0,
- "last_report": 1,
- "last_scored_leg": 3,
- },
- "season_type": "regular",
- "season": "2022",
- "scoring_settings": {
- "pass_2pt": 2.0,
- "pass_int": -1.0,
- "fgmiss": -1.0,
- "fgmiss_0_19": -1.0,
- "fgmiss_20_29": -1.0,
- "fgmiss_30_39": -1.0,
- "fgmiss_40_49": -1.0,
- "fgmiss_50p": -1.0,
- "rec_yd": 0.1,
- "xpmiss": -1.0,
- "fgm_0_19": 3.0,
- "fgm_20_29": 3.0,
- "fgm_30_39": 3.0,
- "fgm_40_49": 4.0,
- "fgm_50p": 5.0,
- "blk_kick": 2.0,
- "blk_kick_ret_yd": 1.0,
- "pts_allow_7_13": 4.0,
- "ff": 1.0,
- "pts_allow_1_6": 7.0,
- "st_fum_rec": 1.0,
- "def_st_ff": 1.0,
- "st_ff": 1.0,
- "pts_allow_28_34": -1.0,
- "fum_rec": 2.0,
- "def_td": 6.0,
- "int": 2.0,
- "pts_allow_0": 10.0,
- "pts_allow_21_27": 0.0,
- "rec_2pt": 2.0,
- "rec": 1.0,
- "xpm": 1.0,
- "st_td": 6.0,
- "def_st_fum_rec": 1.0,
- "def_st_td": 6.0,
- "sack": 1.0,
- "fum_rec_td": 6.0,
- "rush_2pt": 2.0,
- "rec_td": 6.0,
- "pts_allow_35p": -4.0,
- "pts_allow_14_20": 1.0,
- "rush_yd": 0.1,
- "pass_yd": 0.04,
- "pass_td": 4.0,
- "rush_td": 6.0,
- "fum_lost": -2.0,
- "fum": 0.0,
- "safe": 2.0,
- "bonus_pass_yd_300": 1.0,
- "bonus_pass_yd_400": 1.0,
- "bonus_rec_yd_100": 1.0,
- "bonus_rec_yd_200": 1.0,
- "bonus_rush_yd_100": 1.0,
- "bonus_rush_yd_200": 1.0,
- "def_2pt": 1.0,
- "def_pass_def": 1.0,
- "fg_ret_yd": 1.0,
- "fgm": 1.0,
- "fum_ret_yd": 1.0,
- "idp_blk_kick": 1.0,
- "idp_def_td": 1.0,
- "idp_ff": 1.0,
- "idp_fum_rec": 1.0,
- "idp_int": 1.0,
- "idp_pass_def": 1.0,
- "idp_sack": 1.0,
- "idp_safe": 1.0,
- "idp_tkl": 1.0,
- "idp_tkl_ast": 1.0,
- "idp_tkl_solo": 1.0,
- "int_ret_yd": 1.0,
- "kr_td": 1.0,
- "kr_yd": 1.0,
- "pass_att": 1.0,
- "pass_cmp": 1.0,
- "pass_cmp_40p": 1.0,
- "pass_inc": 1.0,
- "pass_sack": 1.0,
- "pr_td": 1.0,
- "pr_yd": 1.0,
- "qb_hit": 1.0,
- "rec_40p": 1.0,
- "rush_40p": 1.0,
- "rush_att": 1.0,
- "sack_yd": 1.0,
- "st_tkl_solo": 1.0,
- "tkl": 1.0,
- "tkl_ast": 1.0,
- "tkl_loss": 1.0,
- "tkl_solo": 1.0,
- "yds_allow_0_100": 1.0,
- "yds_allow_100_199": 1.0,
- "yds_allow_200_299": 1.0,
- "yds_allow_300_349": 1.0,
- "yds_allow_350_399": 1.0,
- "yds_allow_400_449": 1.0,
- "yds_allow_450_499": 1.0,
- "yds_allow_500_549": 1.0,
- "yds_allow_550p": 1.0,
- },
- "roster_positions": ["QB", "RB", "RB", "WR", "TE", "FLEX", "BN"],
- "previous_league_id": "12345",
- "name": "R2 PooPoo DooDoo",
- "metadata": {"keeper_deadline": "0", "auto_continue": "off"},
- "loser_bracket_id": None,
- "league_id": "854528180957097984",
- "last_read_id": None,
- "last_pinned_message_id": "854538979343712256",
- "last_message_time": 1658185095507,
- "last_message_text_map": None,
- "last_message_id": "854893888614273024",
- "last_message_attachment": None,
- "last_author_is_bot": False,
- "last_author_id": "444590402142466048",
- "last_author_display_name": "BIGCELL561",
- "last_author_avatar": "9b69495def7b9b9d77e0a0126c22efbe",
- "group_id": None,
- "draft_id": "854528182030835712",
- "company_id": None,
- "bracket_id": None,
- "avatar": "d4ed6e3ae14b56422de8029566d51234",
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_league(league_id="12345")
-
- self.assertIsInstance(response, League)
- self.assertEqual("d4ed6e3ae14b56422de8029566d51234", response.avatar)
- self.assertEqual("854528182030835712", response.draft_id)
- self.assertEqual("854528180957097984", response.league_id)
- self.assertEqual("R2 PooPoo DooDoo", response.name)
- self.assertEqual("12345", response.previous_league_id)
- self.assertIsInstance(response.roster_positions, list)
- self.assertEqual(7, len(response.roster_positions))
- for nfl_roster_position in response.roster_positions:
- self.assertIsInstance(nfl_roster_position, NFLRosterPosition)
- self.assertIsInstance(response.scoring_settings, ScoringSettings)
- self.assertEqual(2.0, response.scoring_settings.blk_kick)
- self.assertEqual(1.0, response.scoring_settings.blk_kick_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.bonus_pass_yd_300)
- self.assertEqual(1.0, response.scoring_settings.bonus_pass_yd_400)
- self.assertEqual(1.0, response.scoring_settings.bonus_rec_yd_100)
- self.assertEqual(1.0, response.scoring_settings.bonus_rec_yd_200)
- self.assertEqual(1.0, response.scoring_settings.bonus_rush_yd_100)
- self.assertEqual(1.0, response.scoring_settings.bonus_rush_yd_200)
- self.assertEqual(1.0, response.scoring_settings.def_2pt)
- self.assertEqual(1.0, response.scoring_settings.def_pass_def)
- self.assertEqual(1.0, response.scoring_settings.def_st_ff)
- self.assertEqual(1.0, response.scoring_settings.def_st_fum_rec)
- self.assertEqual(6.0, response.scoring_settings.def_st_td)
- self.assertEqual(6.0, response.scoring_settings.def_td)
- self.assertEqual(1.0, response.scoring_settings.ff)
- self.assertEqual(1.0, response.scoring_settings.fg_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.fgm)
- self.assertEqual(3.0, response.scoring_settings.fgm_0_19)
- self.assertEqual(3.0, response.scoring_settings.fgm_20_29)
- self.assertEqual(3.0, response.scoring_settings.fgm_30_39)
- self.assertEqual(4.0, response.scoring_settings.fgm_40_49)
- self.assertEqual(5.0, response.scoring_settings.fgm_50p)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_0_19)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_20_29)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_30_39)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_40_49)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_50p)
- self.assertEqual(0.0, response.scoring_settings.fum)
- self.assertEqual(-2.0, response.scoring_settings.fum_lost)
- self.assertEqual(2.0, response.scoring_settings.fum_rec)
- self.assertEqual(1.0, response.scoring_settings.fum_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.idp_blk_kick)
- self.assertEqual(1.0, response.scoring_settings.idp_def_td)
- self.assertEqual(1.0, response.scoring_settings.idp_ff)
- self.assertEqual(1.0, response.scoring_settings.idp_fum_rec)
- self.assertEqual(1.0, response.scoring_settings.idp_int)
- self.assertEqual(1.0, response.scoring_settings.idp_pass_def)
- self.assertEqual(1.0, response.scoring_settings.idp_sack)
- self.assertEqual(1.0, response.scoring_settings.idp_safe)
- self.assertEqual(1.0, response.scoring_settings.idp_tkl)
- self.assertEqual(1.0, response.scoring_settings.idp_tkl_ast)
- self.assertEqual(1.0, response.scoring_settings.idp_tkl_solo)
- self.assertEqual(2.0, response.scoring_settings.int)
- self.assertEqual(1.0, response.scoring_settings.int_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.kr_td)
- self.assertEqual(1.0, response.scoring_settings.kr_yd)
- self.assertEqual(2.0, response.scoring_settings.pass_2pt)
- self.assertEqual(1.0, response.scoring_settings.pass_att)
- self.assertEqual(1.0, response.scoring_settings.pass_cmp)
- self.assertEqual(1.0, response.scoring_settings.pass_cmp_40p)
- self.assertEqual(1.0, response.scoring_settings.pass_inc)
- self.assertEqual(-1.0, response.scoring_settings.pass_int)
- self.assertEqual(1.0, response.scoring_settings.pass_sack)
- self.assertEqual(4.0, response.scoring_settings.pass_td)
- self.assertEqual(0.04, response.scoring_settings.pass_yd)
- self.assertEqual(1.0, response.scoring_settings.pr_td)
- self.assertEqual(1.0, response.scoring_settings.pr_yd)
- self.assertEqual(10.0, response.scoring_settings.pts_allow_0)
- self.assertEqual(1.0, response.scoring_settings.pts_allow_14_20)
- self.assertEqual(7.0, response.scoring_settings.pts_allow_1_6)
- self.assertEqual(0.0, response.scoring_settings.pts_allow_21_27)
- self.assertEqual(-1.0, response.scoring_settings.pts_allow_28_34)
- self.assertEqual(-4.0, response.scoring_settings.pts_allow_35p)
- self.assertEqual(4.0, response.scoring_settings.pts_allow_7_13)
- self.assertEqual(1.0, response.scoring_settings.qb_hit)
- self.assertEqual(1.0, response.scoring_settings.rec)
- self.assertEqual(2.0, response.scoring_settings.rec_2pt)
- self.assertEqual(1.0, response.scoring_settings.rec_40p)
- self.assertEqual(6.0, response.scoring_settings.rec_td)
- self.assertEqual(0.1, response.scoring_settings.rec_yd)
- self.assertEqual(2.0, response.scoring_settings.rush_2pt)
- self.assertEqual(1.0, response.scoring_settings.rush_40p)
- self.assertEqual(1.0, response.scoring_settings.rush_att)
- self.assertEqual(6.0, response.scoring_settings.rush_td)
- self.assertEqual(0.1, response.scoring_settings.rush_yd)
- self.assertEqual(1.0, response.scoring_settings.sack)
- self.assertEqual(1.0, response.scoring_settings.sack_yd)
- self.assertEqual(2.0, response.scoring_settings.safe)
- self.assertEqual(1.0, response.scoring_settings.st_ff)
- self.assertEqual(1.0, response.scoring_settings.st_fum_rec)
- self.assertEqual(6.0, response.scoring_settings.st_td)
- self.assertEqual(1.0, response.scoring_settings.st_tkl_solo)
- self.assertEqual(1.0, response.scoring_settings.tkl)
- self.assertEqual(1.0, response.scoring_settings.tkl_ast)
- self.assertEqual(1.0, response.scoring_settings.tkl_loss)
- self.assertEqual(1.0, response.scoring_settings.tkl_solo)
- self.assertEqual(1.0, response.scoring_settings.xpm)
- self.assertEqual(-1.0, response.scoring_settings.xpmiss)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_0_100)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_100_199)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_200_299)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_300_349)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_350_399)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_400_449)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_450_499)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_500_549)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_550p)
- self.assertEqual("2022", response.season)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertIsInstance(response.settings, LeagueSettings)
- self.assertEqual(3, response.settings.draft_rounds)
- self.assertEqual(1, response.settings.last_report)
- self.assertEqual(3, response.settings.last_scored_leg)
- self.assertEqual(1, response.settings.leg)
- self.assertEqual(1, response.settings.max_keepers)
- self.assertEqual(12, response.settings.num_teams)
- self.assertEqual(0, response.settings.offseason_adds)
- self.assertEqual(1, response.settings.pick_trading)
- self.assertEqual(6, response.settings.playoff_teams)
- self.assertEqual(15, response.settings.playoff_week_start)
- self.assertEqual(0, response.settings.reserve_allow_out)
- self.assertEqual(0, response.settings.reserve_slots)
- self.assertEqual(1, response.settings.start_week)
- self.assertEqual(11, response.settings.trade_deadline)
- self.assertEqual(2, response.settings.trade_review_days)
- self.assertEqual(0, response.settings.type)
- self.assertEqual(100, response.settings.waiver_budget)
- self.assertEqual(2, response.settings.waiver_clear_days)
- self.assertEqual(2, response.settings.waiver_day_of_week)
- self.assertEqual(0, response.settings.waiver_type)
- self.assertEqual(0, response.settings.bench_lock)
- self.assertEqual(1, response.settings.best_ball)
- self.assertEqual(0, response.settings.capacity_override)
- self.assertEqual(0, response.settings.commissioner_direct_invite)
- self.assertEqual(0, response.settings.daily_waivers)
- self.assertEqual(5461, response.settings.daily_waivers_days)
- self.assertEqual(0, response.settings.daily_waivers_hour)
- self.assertEqual(17, response.settings.daily_waivers_last_ran)
- self.assertEqual(1, response.settings.disable_adds)
- self.assertEqual(1, response.settings.disable_trades)
- self.assertEqual(0, response.settings.league_average_match)
- self.assertEqual(0, response.settings.playoff_round_type)
- self.assertEqual(
- PlayoffRoundType.ONE_WEEK_PER_ROUND, response.settings.playoff_round_type_enum
- )
- self.assertEqual(0, response.settings.playoff_seed_type)
- self.assertEqual(0, response.settings.playoff_type)
- self.assertEqual(0, response.settings.reserve_allow_cov)
- self.assertEqual(0, response.settings.reserve_allow_dnr)
- self.assertEqual(0, response.settings.reserve_allow_na)
- self.assertEqual(0, response.settings.reserve_allow_sus)
- self.assertEqual(0, response.settings.taxi_allow_vets)
- self.assertEqual(0, response.settings.taxi_slots)
- self.assertEqual(0, response.settings.taxi_years)
- self.assertEqual(0, response.settings.waiver_bid_min)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonStatus.IN_SEASON, response.status)
- self.assertEqual(12, response.total_rosters)
-
- @mock.patch("requests.get")
- def test_get_league_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_league(league_id="12345")
- self.assertEqual("Could not get League with league_id '12345'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_league_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_league(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_user_leagues_for_year_happy_path(self, mock_requests_get):
- mock_dict = [
- {
- "total_rosters": 12,
- "status": "in_season",
- "sport": "nfl",
- "shard": 679,
- "settings": {
- "max_keepers": 1,
- "draft_rounds": 3,
- "trade_review_days": 2,
- "reserve_allow_dnr": 0,
- "capacity_override": 0,
- "pick_trading": 1,
- "disable_trades": 1,
- "taxi_years": 0,
- "taxi_allow_vets": 0,
- "best_ball": 1,
- "disable_adds": 1,
- "waiver_type": 0,
- "bench_lock": 0,
- "reserve_allow_sus": 0,
- "type": 0,
- "reserve_allow_cov": 0,
- "waiver_clear_days": 2,
- "daily_waivers_last_ran": 17,
- "waiver_day_of_week": 2,
- "start_week": 1,
- "commissioner_direct_invite": 0,
- "playoff_teams": 6,
- "num_teams": 12,
- "reserve_slots": 0,
- "playoff_round_type": 0,
- "daily_waivers_hour": 0,
- "waiver_budget": 100,
- "reserve_allow_out": 0,
- "waiver_bid_min": 0,
- "offseason_adds": 0,
- "playoff_seed_type": 0,
- "daily_waivers": 0,
- "playoff_week_start": 15,
- "daily_waivers_days": 5461,
- "league_average_match": 0,
- "leg": 1,
- "trade_deadline": 11,
- "reserve_allow_doubtful": 0,
- "taxi_deadline": 0,
- "reserve_allow_na": 0,
- "taxi_slots": 0,
- "playoff_type": 0,
- "last_report": 1,
- "last_scored_leg": 3,
- },
- "season_type": "regular",
- "season": "2022",
- "scoring_settings": {
- "pass_2pt": 2.0,
- "pass_int": -1.0,
- "fgmiss": -1.0,
- "fgmiss_0_19": -1.0,
- "fgmiss_20_29": -1.0,
- "fgmiss_30_39": -1.0,
- "fgmiss_40_49": -1.0,
- "fgmiss_50p": -1.0,
- "rec_yd": 0.1,
- "xpmiss": -1.0,
- "fgm_0_19": 3.0,
- "fgm_20_29": 3.0,
- "fgm_30_39": 3.0,
- "fgm_40_49": 4.0,
- "fgm_50p": 5.0,
- "blk_kick": 2.0,
- "blk_kick_ret_yd": 1.0,
- "pts_allow_7_13": 4.0,
- "ff": 1.0,
- "pts_allow_1_6": 7.0,
- "st_fum_rec": 1.0,
- "def_st_ff": 1.0,
- "st_ff": 1.0,
- "pts_allow_28_34": -1.0,
- "fum_rec": 2.0,
- "def_td": 6.0,
- "int": 2.0,
- "pts_allow_0": 10.0,
- "pts_allow_21_27": 0.0,
- "rec_2pt": 2.0,
- "rec": 1.0,
- "xpm": 1.0,
- "st_td": 6.0,
- "def_st_fum_rec": 1.0,
- "def_st_td": 6.0,
- "sack": 1.0,
- "fum_rec_td": 6.0,
- "rush_2pt": 2.0,
- "rec_td": 6.0,
- "pts_allow_35p": -4.0,
- "pts_allow_14_20": 1.0,
- "rush_yd": 0.1,
- "pass_yd": 0.04,
- "pass_td": 4.0,
- "rush_td": 6.0,
- "fum_lost": -2.0,
- "fum": 0.0,
- "safe": 2.0,
- "bonus_pass_yd_300": 1.0,
- "bonus_pass_yd_400": 1.0,
- "bonus_rec_yd_100": 1.0,
- "bonus_rec_yd_200": 1.0,
- "bonus_rush_yd_100": 1.0,
- "bonus_rush_yd_200": 1.0,
- "def_2pt": 1.0,
- "def_pass_def": 1.0,
- "fg_ret_yd": 1.0,
- "fgm": 1.0,
- "fum_ret_yd": 1.0,
- "idp_blk_kick": 1.0,
- "idp_def_td": 1.0,
- "idp_ff": 1.0,
- "idp_fum_rec": 1.0,
- "idp_int": 1.0,
- "idp_pass_def": 1.0,
- "idp_sack": 1.0,
- "idp_safe": 1.0,
- "idp_tkl": 1.0,
- "idp_tkl_ast": 1.0,
- "idp_tkl_solo": 1.0,
- "int_ret_yd": 1.0,
- "kr_td": 1.0,
- "kr_yd": 1.0,
- "pass_att": 1.0,
- "pass_cmp": 1.0,
- "pass_cmp_40p": 1.0,
- "pass_inc": 1.0,
- "pass_sack": 1.0,
- "pr_td": 1.0,
- "pr_yd": 1.0,
- "qb_hit": 1.0,
- "rec_40p": 1.0,
- "rush_40p": 1.0,
- "rush_att": 1.0,
- "sack_yd": 1.0,
- "st_tkl_solo": 1.0,
- "tkl": 1.0,
- "tkl_ast": 1.0,
- "tkl_loss": 1.0,
- "tkl_solo": 1.0,
- "yds_allow_0_100": 1.0,
- "yds_allow_100_199": 1.0,
- "yds_allow_200_299": 1.0,
- "yds_allow_300_349": 1.0,
- "yds_allow_350_399": 1.0,
- "yds_allow_400_449": 1.0,
- "yds_allow_450_499": 1.0,
- "yds_allow_500_549": 1.0,
- "yds_allow_550p": 1.0,
- },
- "roster_positions": ["QB", "RB", "RB", "WR", "TE", "FLEX", "BN"],
- "previous_league_id": "12345",
- "name": "R2 PooPoo DooDoo",
- "metadata": {"keeper_deadline": "0", "auto_continue": "off"},
- "loser_bracket_id": None,
- "league_id": "854528180957097984",
- "last_read_id": None,
- "last_pinned_message_id": "854538979343712256",
- "last_message_time": 1658185095507,
- "last_message_text_map": None,
- "last_message_id": "854893888614273024",
- "last_message_attachment": None,
- "last_author_is_bot": False,
- "last_author_id": "444590402142466048",
- "last_author_display_name": "BIGCELL561",
- "last_author_avatar": "9b69495def7b9b9d77e0a0126c22efbe",
- "group_id": None,
- "draft_id": "854528182030835712",
- "company_id": None,
- "bracket_id": None,
- "avatar": "d4ed6e3ae14b56422de8029566d51234",
- }
- ]
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_user_leagues_for_year(
- user_id="12345", sport=Sport.NFL, year="2020"
- )[0]
-
- self.assertIsInstance(response, League)
- self.assertEqual("d4ed6e3ae14b56422de8029566d51234", response.avatar)
- self.assertEqual("854528182030835712", response.draft_id)
- self.assertEqual("854528180957097984", response.league_id)
- self.assertEqual("R2 PooPoo DooDoo", response.name)
- self.assertEqual("12345", response.previous_league_id)
- self.assertIsInstance(response.roster_positions, list)
- self.assertEqual(7, len(response.roster_positions))
- for nfl_roster_position in response.roster_positions:
- self.assertIsInstance(nfl_roster_position, NFLRosterPosition)
- self.assertIsInstance(response.scoring_settings, ScoringSettings)
- self.assertEqual(2.0, response.scoring_settings.blk_kick)
- self.assertEqual(1.0, response.scoring_settings.blk_kick_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.bonus_pass_yd_300)
- self.assertEqual(1.0, response.scoring_settings.bonus_pass_yd_400)
- self.assertEqual(1.0, response.scoring_settings.bonus_rec_yd_100)
- self.assertEqual(1.0, response.scoring_settings.bonus_rec_yd_200)
- self.assertEqual(1.0, response.scoring_settings.bonus_rush_yd_100)
- self.assertEqual(1.0, response.scoring_settings.bonus_rush_yd_200)
- self.assertEqual(1.0, response.scoring_settings.def_2pt)
- self.assertEqual(1.0, response.scoring_settings.def_pass_def)
- self.assertEqual(1.0, response.scoring_settings.def_st_ff)
- self.assertEqual(1.0, response.scoring_settings.def_st_fum_rec)
- self.assertEqual(6.0, response.scoring_settings.def_st_td)
- self.assertEqual(6.0, response.scoring_settings.def_td)
- self.assertEqual(1.0, response.scoring_settings.ff)
- self.assertEqual(1.0, response.scoring_settings.fg_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.fgm)
- self.assertEqual(3.0, response.scoring_settings.fgm_0_19)
- self.assertEqual(3.0, response.scoring_settings.fgm_20_29)
- self.assertEqual(3.0, response.scoring_settings.fgm_30_39)
- self.assertEqual(4.0, response.scoring_settings.fgm_40_49)
- self.assertEqual(5.0, response.scoring_settings.fgm_50p)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_0_19)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_20_29)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_30_39)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_40_49)
- self.assertEqual(-1.0, response.scoring_settings.fgmiss_50p)
- self.assertEqual(0.0, response.scoring_settings.fum)
- self.assertEqual(-2.0, response.scoring_settings.fum_lost)
- self.assertEqual(2.0, response.scoring_settings.fum_rec)
- self.assertEqual(1.0, response.scoring_settings.fum_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.idp_blk_kick)
- self.assertEqual(1.0, response.scoring_settings.idp_def_td)
- self.assertEqual(1.0, response.scoring_settings.idp_ff)
- self.assertEqual(1.0, response.scoring_settings.idp_fum_rec)
- self.assertEqual(1.0, response.scoring_settings.idp_int)
- self.assertEqual(1.0, response.scoring_settings.idp_pass_def)
- self.assertEqual(1.0, response.scoring_settings.idp_sack)
- self.assertEqual(1.0, response.scoring_settings.idp_safe)
- self.assertEqual(1.0, response.scoring_settings.idp_tkl)
- self.assertEqual(1.0, response.scoring_settings.idp_tkl_ast)
- self.assertEqual(1.0, response.scoring_settings.idp_tkl_solo)
- self.assertEqual(2.0, response.scoring_settings.int)
- self.assertEqual(1.0, response.scoring_settings.int_ret_yd)
- self.assertEqual(1.0, response.scoring_settings.kr_td)
- self.assertEqual(1.0, response.scoring_settings.kr_yd)
- self.assertEqual(2.0, response.scoring_settings.pass_2pt)
- self.assertEqual(1.0, response.scoring_settings.pass_att)
- self.assertEqual(1.0, response.scoring_settings.pass_cmp)
- self.assertEqual(1.0, response.scoring_settings.pass_cmp_40p)
- self.assertEqual(1.0, response.scoring_settings.pass_inc)
- self.assertEqual(-1.0, response.scoring_settings.pass_int)
- self.assertEqual(1.0, response.scoring_settings.pass_sack)
- self.assertEqual(4.0, response.scoring_settings.pass_td)
- self.assertEqual(0.04, response.scoring_settings.pass_yd)
- self.assertEqual(1.0, response.scoring_settings.pr_td)
- self.assertEqual(1.0, response.scoring_settings.pr_yd)
- self.assertEqual(10.0, response.scoring_settings.pts_allow_0)
- self.assertEqual(1.0, response.scoring_settings.pts_allow_14_20)
- self.assertEqual(7.0, response.scoring_settings.pts_allow_1_6)
- self.assertEqual(0.0, response.scoring_settings.pts_allow_21_27)
- self.assertEqual(-1.0, response.scoring_settings.pts_allow_28_34)
- self.assertEqual(-4.0, response.scoring_settings.pts_allow_35p)
- self.assertEqual(4.0, response.scoring_settings.pts_allow_7_13)
- self.assertEqual(1.0, response.scoring_settings.qb_hit)
- self.assertEqual(1.0, response.scoring_settings.rec)
- self.assertEqual(2.0, response.scoring_settings.rec_2pt)
- self.assertEqual(1.0, response.scoring_settings.rec_40p)
- self.assertEqual(6.0, response.scoring_settings.rec_td)
- self.assertEqual(0.1, response.scoring_settings.rec_yd)
- self.assertEqual(2.0, response.scoring_settings.rush_2pt)
- self.assertEqual(1.0, response.scoring_settings.rush_40p)
- self.assertEqual(1.0, response.scoring_settings.rush_att)
- self.assertEqual(6.0, response.scoring_settings.rush_td)
- self.assertEqual(0.1, response.scoring_settings.rush_yd)
- self.assertEqual(1.0, response.scoring_settings.sack)
- self.assertEqual(1.0, response.scoring_settings.sack_yd)
- self.assertEqual(2.0, response.scoring_settings.safe)
- self.assertEqual(1.0, response.scoring_settings.st_ff)
- self.assertEqual(1.0, response.scoring_settings.st_fum_rec)
- self.assertEqual(6.0, response.scoring_settings.st_td)
- self.assertEqual(1.0, response.scoring_settings.st_tkl_solo)
- self.assertEqual(1.0, response.scoring_settings.tkl)
- self.assertEqual(1.0, response.scoring_settings.tkl_ast)
- self.assertEqual(1.0, response.scoring_settings.tkl_loss)
- self.assertEqual(1.0, response.scoring_settings.tkl_solo)
- self.assertEqual(1.0, response.scoring_settings.xpm)
- self.assertEqual(-1.0, response.scoring_settings.xpmiss)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_0_100)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_100_199)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_200_299)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_300_349)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_350_399)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_400_449)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_450_499)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_500_549)
- self.assertEqual(1.0, response.scoring_settings.yds_allow_550p)
- self.assertEqual("2022", response.season)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertIsInstance(response.settings, LeagueSettings)
- self.assertEqual(3, response.settings.draft_rounds)
- self.assertEqual(1, response.settings.last_report)
- self.assertEqual(3, response.settings.last_scored_leg)
- self.assertEqual(1, response.settings.leg)
- self.assertEqual(1, response.settings.max_keepers)
- self.assertEqual(12, response.settings.num_teams)
- self.assertEqual(0, response.settings.offseason_adds)
- self.assertEqual(1, response.settings.pick_trading)
- self.assertEqual(6, response.settings.playoff_teams)
- self.assertEqual(15, response.settings.playoff_week_start)
- self.assertEqual(0, response.settings.reserve_allow_out)
- self.assertEqual(0, response.settings.reserve_slots)
- self.assertEqual(1, response.settings.start_week)
- self.assertEqual(11, response.settings.trade_deadline)
- self.assertEqual(2, response.settings.trade_review_days)
- self.assertEqual(0, response.settings.type)
- self.assertEqual(100, response.settings.waiver_budget)
- self.assertEqual(2, response.settings.waiver_clear_days)
- self.assertEqual(2, response.settings.waiver_day_of_week)
- self.assertEqual(0, response.settings.waiver_type)
- self.assertEqual(0, response.settings.bench_lock)
- self.assertEqual(1, response.settings.best_ball)
- self.assertEqual(0, response.settings.capacity_override)
- self.assertEqual(0, response.settings.commissioner_direct_invite)
- self.assertEqual(0, response.settings.daily_waivers)
- self.assertEqual(5461, response.settings.daily_waivers_days)
- self.assertEqual(0, response.settings.daily_waivers_hour)
- self.assertEqual(17, response.settings.daily_waivers_last_ran)
- self.assertEqual(1, response.settings.disable_adds)
- self.assertEqual(1, response.settings.disable_trades)
- self.assertEqual(0, response.settings.league_average_match)
- self.assertEqual(0, response.settings.playoff_round_type)
- self.assertEqual(
- PlayoffRoundType.ONE_WEEK_PER_ROUND, response.settings.playoff_round_type_enum
- )
- self.assertEqual(0, response.settings.playoff_seed_type)
- self.assertEqual(0, response.settings.playoff_type)
- self.assertEqual(0, response.settings.reserve_allow_cov)
- self.assertEqual(0, response.settings.reserve_allow_dnr)
- self.assertEqual(0, response.settings.reserve_allow_na)
- self.assertEqual(0, response.settings.reserve_allow_sus)
- self.assertEqual(0, response.settings.taxi_allow_vets)
- self.assertEqual(0, response.settings.taxi_slots)
- self.assertEqual(0, response.settings.taxi_years)
- self.assertEqual(0, response.settings.waiver_bid_min)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonStatus.IN_SEASON, response.status)
- self.assertEqual(12, response.total_rosters)
-
- @mock.patch("requests.get")
- def test_get_user_leagues_for_year_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_user_leagues_for_year(user_id="12345", sport=Sport.NFL, year="2020")
- self.assertEqual(
- "Could not get user Leagues for user_id '12345', sport 'NFL', and year '2020'.",
- str(context.exception),
- )
-
- @mock.patch("requests.get")
- def test_get_user_leagues_for_year_non_200_status_code_raises_exception(
- self, mock_requests_get
- ):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_user_leagues_for_year(user_id="12345", sport=Sport.NFL, year="2020")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_rosters_happy_path(self, mock_requests_get):
- mock_dict = [
- {
- "taxi": 1,
- "starters": ["3163", "CHI"],
- "settings": {
- "wins": 10,
- "waiver_position": 10,
- "waiver_budget_used": 0,
- "waiver_adjusted": 14,
- "total_moves": 0,
- "ties": 0,
- "ppts_decimal": 64,
- "ppts": 1934,
- "losses": 3,
- "fpts_decimal": 8,
- "fpts_against_decimal": 4,
- "fpts_against": 1101,
- "fpts": 1611,
- },
- "roster_id": 1,
- "reserve": ["test"],
- "players": ["1833", "CHI"],
- "player_map": {"test": "t"},
- "owner_id": "66947650880421888",
- "metadata": {"test": "t"},
- "league_id": "308857914418823168",
- "co_owners": 1,
- }
- ]
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_rosters(league_id="12345")[0]
-
- self.assertIsInstance(response, Roster)
- self.assertEqual(1, response.co_owners)
- self.assertEqual("308857914418823168", response.league_id)
- self.assertEqual({"test": "t"}, response.metadata)
- self.assertEqual("66947650880421888", response.owner_id)
- self.assertEqual(["1833", "CHI"], response.players)
- self.assertEqual({"test": "t"}, response.player_map)
- self.assertEqual(["test"], response.reserve)
- self.assertEqual(1, response.roster_id)
- self.assertIsInstance(response.settings, RosterSettings)
- self.assertEqual(1611, response.settings.fpts)
- self.assertEqual(1101, response.settings.fpts_against)
- self.assertEqual(4, response.settings.fpts_against_decimal)
- self.assertEqual(8, response.settings.fpts_decimal)
- self.assertEqual(3, response.settings.losses)
- self.assertEqual(1934, response.settings.ppts)
- self.assertEqual(64, response.settings.ppts_decimal)
- self.assertEqual(0, response.settings.ties)
- self.assertEqual(0, response.settings.total_moves)
- self.assertEqual(14, response.settings.waiver_adjusted)
- self.assertEqual(0, response.settings.waiver_budget_used)
- self.assertEqual(10, response.settings.waiver_position)
- self.assertEqual(10, response.settings.wins)
- self.assertEqual(["3163", "CHI"], response.starters)
- self.assertEqual(1, response.taxi)
-
- @mock.patch("requests.get")
- def test_get_rosters_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_rosters(league_id="12345")
- self.assertEqual("Could not get Rosters for league_id '12345'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_rosters_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_rosters(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_users_in_league_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "verification": "v",
- "username": "username",
- "user_id": "user_id",
- "token": "t",
- "summoner_region": "r",
- "solicitable": "s",
- "real_name": "name",
- "phone": "1",
- "pending": "1",
- "notifications": "1",
- "metadata": {"test": "t"},
- "is_bot": True,
- "email": "email",
- "display_name": "display_name",
- "deleted": "deleted",
- "data_updated": "data",
- "currencies": "currencies",
- "created": "created",
- "cookies": "cookies",
- "avatar": "avatar",
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_users_in_league(league_id="12345")[0]
-
- self.assertIsInstance(response, User)
- self.assertEqual(response.username, "username")
- self.assertEqual(response.user_id, "user_id")
- self.assertEqual(response.display_name, "display_name")
- self.assertEqual(response.avatar, "avatar")
- self.assertEqual("cookies", response.cookies)
- self.assertEqual("created", response.created)
- self.assertEqual("currencies", response.currencies)
- self.assertEqual("data", response.data_updated)
- self.assertEqual("deleted", response.deleted)
- self.assertEqual("email", response.email)
- self.assertEqual({"test": "t"}, response.metadata)
- self.assertEqual("1", response.notifications)
- self.assertEqual("1", response.pending)
- self.assertEqual("1", response.phone)
- self.assertEqual("name", response.real_name)
- self.assertEqual("s", response.solicitable)
- self.assertEqual("r", response.summoner_region)
- self.assertEqual("t", response.token)
- self.assertEqual("v", response.verification)
-
- @mock.patch("requests.get")
- def test_get_users_in_league_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_users_in_league(league_id="12345")
- self.assertEqual("Could not get Users for league_id '12345'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_users_in_league_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_users_in_league(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_matchups_for_week_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "starters_points": [10.04, 20.7],
- "starters": ["421", "2315"],
- "roster_id": 1,
- "points": 74.04,
- "players_points": {"NO": -9.0, "830": 11.2},
- "players": ["NO", "830"],
- "matchup_id": 5,
- "custom_points": "cp",
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_matchups_for_week(league_id="12345", week=1)[0]
-
- self.assertIsInstance(response, Matchup)
- self.assertEqual("cp", response.custom_points)
- self.assertEqual(5, response.matchup_id)
- self.assertEqual(["NO", "830"], response.players)
- self.assertEqual({"NO": -9.0, "830": 11.2}, response.players_points)
- self.assertEqual(74.04, response.points)
- self.assertEqual(1, response.roster_id)
- self.assertEqual(["421", "2315"], response.starters)
- self.assertEqual([10.04, 20.7], response.starters_points)
-
- @mock.patch("requests.get")
- def test_get_matchups_for_week_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_matchups_for_week(league_id="12345", week=1)
- self.assertEqual(
- "Could not get Matchups for league_id '12345' and week '1'.", str(context.exception)
- )
-
- @mock.patch("requests.get")
- def test_get_matchups_for_week_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_matchups_for_week(league_id="12345", week=1)
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_winners_bracket_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "w": 8,
- "t2_from": {"l": 5, "w": 6},
- "t2": 4,
- "t1_from": {"l": 6, "w": 5},
- "t1": 8,
- "r": 3,
- "p": 1,
- "m": 9,
- "l": 4,
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_winners_bracket(league_id="12345")[0]
-
- self.assertIsInstance(response, PlayoffMatchup)
- self.assertEqual(4, response.losing_roster_id)
- self.assertEqual(9, response.matchup_id)
- self.assertEqual(3, response.round)
- self.assertIsInstance(response.team_1_from, FromPlayoffMatchup)
- self.assertEqual(6, response.team_1_from.lost_matchup_id)
- self.assertEqual(5, response.team_1_from.won_matchup_id)
- self.assertEqual(8, response.team_1_roster_id)
- self.assertIsInstance(response.team_2_from, FromPlayoffMatchup)
- self.assertEqual(5, response.team_2_from.lost_matchup_id)
- self.assertEqual(6, response.team_2_from.won_matchup_id)
- self.assertEqual(4, response.team_2_roster_id)
- self.assertEqual(8, response.winning_roster_id)
- self.assertEqual(1, response.p)
-
- @mock.patch("requests.get")
- def test_get_winners_bracket_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_winners_bracket(league_id="12345")
- self.assertEqual(
- "Could not get PlayoffMatchups for league_id '12345'.", str(context.exception)
- )
-
- @mock.patch("requests.get")
- def test_get_winners_bracket_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_winners_bracket(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_losers_bracket_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "w": 8,
- "t2_from": {"l": 5, "w": 6},
- "t2": 4,
- "t1_from": {"l": 6, "w": 5},
- "t1": 8,
- "r": 3,
- "p": 1,
- "m": 9,
- "l": 4,
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_losers_bracket(league_id="12345")[0]
-
- self.assertIsInstance(response, PlayoffMatchup)
- self.assertEqual(4, response.losing_roster_id)
- self.assertEqual(9, response.matchup_id)
- self.assertEqual(3, response.round)
- self.assertIsInstance(response.team_1_from, FromPlayoffMatchup)
- self.assertEqual(6, response.team_1_from.lost_matchup_id)
- self.assertEqual(5, response.team_1_from.won_matchup_id)
- self.assertEqual(8, response.team_1_roster_id)
- self.assertIsInstance(response.team_2_from, FromPlayoffMatchup)
- self.assertEqual(5, response.team_2_from.lost_matchup_id)
- self.assertEqual(6, response.team_2_from.won_matchup_id)
- self.assertEqual(4, response.team_2_roster_id)
- self.assertEqual(8, response.winning_roster_id)
- self.assertEqual(1, response.p)
-
- @mock.patch("requests.get")
- def test_get_losers_bracket_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_losers_bracket(league_id="12345")
- self.assertEqual(
- "Could not get PlayoffMatchups for league_id '12345'.", str(context.exception)
- )
-
- @mock.patch("requests.get")
- def test_get_losers_bracket_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_losers_bracket(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_transactions_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "waiver_budget": [{"sender": 2, "receiver": 3, "amount": 55}],
- "type": "free_agent",
- "transaction_id": "852289191705423872",
- "status_updated": 1657564087371,
- "status": "complete",
- "settings": {"seq": 1, "waiver_bid": 1},
- "roster_ids": [1],
- "metadata": {"test": "t"},
- "leg": 1,
- "drops": {"1234": 1},
- "draft_picks": [
- {
- "season": "2019",
- "round": 5,
- "roster_id": 1,
- "previous_owner_id": 1,
- "owner_id": 2,
- "draft_id": "12345",
- }
- ],
- "creator": "342404703486779392",
- "created": 1657564087371,
- "consenter_ids": [1],
- "adds": {"5880": 1},
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_transactions(league_id="12345", week=1)[0]
-
- self.assertIsInstance(response, Transaction)
- self.assertEqual({"5880": 1}, response.adds)
- self.assertEqual([1], response.consenter_ids)
- self.assertEqual(1657564087371, response.created)
- self.assertEqual("342404703486779392", response.creator)
- self.assertIsInstance(response.draft_picks, list)
- self.assertEqual(1, len(response.draft_picks))
- self.assertEqual("12345", response.draft_picks[0].draft_id)
- self.assertEqual(2, response.draft_picks[0].owner_id)
- self.assertEqual(1, response.draft_picks[0].previous_owner_id)
- self.assertEqual(1, response.draft_picks[0].roster_id)
- self.assertEqual(5, response.draft_picks[0].round)
- self.assertEqual("2019", response.draft_picks[0].season)
- self.assertEqual({"1234": 1}, response.drops)
- self.assertEqual([1], response.roster_ids)
- self.assertIsInstance(response.settings, TransactionSettings)
- self.assertEqual(1, response.settings.seq)
- self.assertEqual(1, response.settings.waiver_bid)
- self.assertIsInstance(response.status, TransactionStatus)
- self.assertEqual(TransactionStatus.COMPLETE, response.status)
- self.assertEqual(1657564087371, response.status_updated)
- self.assertEqual("852289191705423872", response.transaction_id)
- self.assertEqual(TransactionType.FREE_AGENT, response.type)
- self.assertIsInstance(response.waiver_budget[0], FAABTransaction)
- self.assertEqual(2, response.waiver_budget[0].sender)
- self.assertEqual(3, response.waiver_budget[0].receiver)
- self.assertEqual(55, response.waiver_budget[0].amount)
- self.assertEqual(1, response.leg)
- self.assertEqual({"test": "t"}, response.metadata)
-
- @mock.patch("requests.get")
- def test_get_transactions_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_transactions(league_id="12345", week=1)
- self.assertEqual(
- "Could not get Transactions for league_id '12345' and week '1'.", str(context.exception)
- )
-
- @mock.patch("requests.get")
- def test_get_transactions_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_transactions(league_id="12345", week=1)
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_traded_picks_happy_path(self, mock_requests_get):
- mock_list = [
- {"season": "2019", "round": 5, "roster_id": 1, "previous_owner_id": 1, "owner_id": 2}
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_traded_picks(league_id="12345")[0]
-
- self.assertIsInstance(response, TradedPick)
- self.assertEqual(2, response.owner_id)
- self.assertEqual(1, response.previous_owner_id)
- self.assertEqual(1, response.roster_id)
- self.assertEqual(5, response.round)
- self.assertEqual("2019", response.season)
-
- @mock.patch("requests.get")
- def test_get_traded_picks_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_traded_picks(league_id="12345")
- self.assertEqual("Could not get TradedPicks for league_id '12345'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_traded_picks_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_traded_picks(league_id="12345")
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_sport_state_happy_path(self, mock_requests_get):
- mock_dict = {
- "week": 0,
- "season_type": "off",
- "season_start_date": "2022-09-08",
- "season": "2022",
- "previous_season": "2021",
- "leg": 0,
- "league_season": "2022",
- "league_create_season": "2022",
- "display_week": 0,
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = LeagueAPIClient.get_sport_state(sport=Sport.NFL)
-
- self.assertIsInstance(response, SportState)
- self.assertEqual(0, response.display_week)
- self.assertEqual("2022", response.league_create_season)
- self.assertEqual("2022", response.league_season)
- self.assertEqual(0, response.leg)
- self.assertEqual("2021", response.previous_season)
- self.assertEqual("2022", response.season)
- self.assertEqual(datetime.date(2022, 9, 8), response.season_start_date)
- self.assertEqual(SeasonType.OFF, response.season_type)
- self.assertEqual(0, response.week)
-
- @mock.patch("requests.get")
- def test_get_sport_state_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- LeagueAPIClient.get_sport_state(sport=Sport.NFL)
- self.assertEqual("Could not get SportState for sport 'NFL'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_sport_state_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- LeagueAPIClient.get_sport_state(sport=Sport.NFL)
- self.assertEqual("404 Client Error", str(context.exception))
diff --git a/test/test_api/test_PlayerAPIClient.py b/test/test_api/test_PlayerAPIClient.py
deleted file mode 100644
index 4017c1d..0000000
--- a/test/test_api/test_PlayerAPIClient.py
+++ /dev/null
@@ -1,225 +0,0 @@
-import datetime
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from requests import HTTPError
-
-from sleeper.api.PlayerAPIClient import PlayerAPIClient
-from sleeper.enum.InjuryStatus import InjuryStatus
-from sleeper.enum.nfl.NFLPlayerStatus import NFLPlayerStatus
-from sleeper.enum.nfl.NFLPosition import NFLPosition
-from sleeper.enum.nfl.NFLTeam import NFLTeam
-from sleeper.enum.PracticeParticipation import PracticeParticipation
-from sleeper.enum.Sport import Sport
-from sleeper.enum.TrendType import TrendType
-from sleeper.model.Player import Player
-from sleeper.model.PlayerTrend import PlayerTrend
-
-
-class TestPlayerAPIClient(unittest.TestCase):
- @mock.patch("requests.get")
- def test_get_all_players_happy_path(self, mock_requests_get):
- mock_dict = {
- "2103": {
- "player_id": "2103",
- "number": 60,
- "years_exp": 1,
- "swish_id": 12345,
- "birth_city": "Milwaukee",
- "espn_id": 17054,
- "rotowire_id": 9866,
- "injury_notes": "some injury",
- "gsis_id": "gsis",
- "birth_state": "WI",
- "weight": "285",
- "status": "Inactive",
- "practice_description": "practice description",
- "last_name": "Booth",
- "hashtag": "#codybooth-NFL-FA-60",
- "fantasy_positions": ["OL"],
- "position": "OT",
- "stats_id": 12345,
- "search_last_name": "booth",
- "yahoo_id": 27841,
- "birth_country": "USA",
- "full_name": "Cody Booth",
- "age": 27,
- "sport": "nfl",
- "team": "GB",
- "pandascore_id": "pandascore",
- "high_school": "Rufus King",
- "news_updated": 20200101,
- "metadata": {"test": 1},
- "injury_body_part": "ear",
- "injury_start_date": "20000101",
- "fantasy_data_id": 16426,
- "depth_chart_position": 1,
- "height": "6'5\"",
- "injury_status": None,
- "sportradar_id": "4cd4976e-e230-4935-ad3f-c12876a41350",
- "practice_participation": None,
- "birth_date": "1991-04-22",
- "first_name": "Cody",
- "active": False,
- "depth_chart_order": 1,
- "college": "Temple",
- "rotoworld_id": 12345,
- "search_rank": 9999999,
- "search_first_name": "cody",
- "search_full_name": "codybooth",
- }
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = PlayerAPIClient.get_all_players(sport=Sport.NFL)
-
- self.assertIsInstance(response, dict)
- self.assertIsInstance(response["2103"], Player)
- self.assertEqual(1, len(response.keys()))
- self.assertEqual(27, response["2103"].age)
- self.assertEqual("USA", response["2103"].birth_country)
- self.assertEqual("Temple", response["2103"].college)
- self.assertEqual(1, response["2103"].depth_chart_order)
- self.assertEqual(1, response["2103"].depth_chart_position)
- self.assertEqual(17054, response["2103"].espn_id)
- self.assertEqual(16426, response["2103"].fantasy_data_id)
- self.assertEqual(1, len(response["2103"].fantasy_positions))
- self.assertEqual(NFLPosition.OL, response["2103"].fantasy_positions[0])
- self.assertEqual("Cody", response["2103"].first_name)
- self.assertEqual("#codybooth-NFL-FA-60", response["2103"].hashtag)
- self.assertEqual("6'5\"", response["2103"].height)
- self.assertEqual("20000101", response["2103"].injury_start_date)
- self.assertEqual(InjuryStatus.NA, response["2103"].injury_status)
- self.assertEqual("Booth", response["2103"].last_name)
- self.assertEqual(60, response["2103"].number)
- self.assertEqual("2103", response["2103"].player_id)
- self.assertEqual(NFLPosition.OT, response["2103"].position)
- self.assertEqual(PracticeParticipation.NA, response["2103"].practice_participation)
- self.assertEqual(9866, response["2103"].rotowire_id)
- self.assertEqual(12345, response["2103"].rotoworld_id)
- self.assertEqual("cody", response["2103"].search_first_name)
- self.assertEqual("codybooth", response["2103"].search_full_name)
- self.assertEqual("booth", response["2103"].search_last_name)
- self.assertEqual(9999999, response["2103"].search_rank)
- self.assertEqual(Sport.NFL, response["2103"].sport)
- self.assertEqual("4cd4976e-e230-4935-ad3f-c12876a41350", response["2103"].sportradar_id)
- self.assertEqual(12345, response["2103"].stats_id)
- self.assertEqual(NFLPlayerStatus.INACTIVE, response["2103"].status)
- self.assertEqual(NFLTeam.GB, response["2103"].team)
- self.assertEqual("285", response["2103"].weight)
- self.assertEqual(27841, response["2103"].yahoo_id)
- self.assertEqual(1, response["2103"].years_exp)
- self.assertEqual(12345, response["2103"].swish_id)
- self.assertEqual("Milwaukee", response["2103"].birth_city)
- self.assertEqual("some injury", response["2103"].injury_notes)
- self.assertEqual("gsis", response["2103"].gsis_id)
- self.assertEqual("WI", response["2103"].birth_state)
- self.assertEqual("practice description", response["2103"].practice_description)
- self.assertEqual("pandascore", response["2103"].pandascore_id)
- self.assertEqual("Rufus King", response["2103"].high_school)
- self.assertEqual(20200101, response["2103"].news_updated)
- self.assertEqual({"test": 1}, response["2103"].metadata)
- self.assertEqual("ear", response["2103"].injury_body_part)
- self.assertEqual(datetime.date(1991, 4, 22), response["2103"].birth_date)
- self.assertFalse(response["2103"].active)
-
- @mock.patch("requests.get")
- def test_get_all_players_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- PlayerAPIClient.get_all_players(sport=Sport.NFL)
- self.assertEqual("Could not get Players for sport: 'NFL'.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_all_players_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- PlayerAPIClient.get_all_players(sport=Sport.NFL)
- self.assertEqual("404 Client Error", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_trending_players_add_happy_path(self, mock_requests_get):
- mock_dict = [
- {"player_id": "943", "count": 13750},
- {"player_id": "5284", "count": 8070},
- {"player_id": "4863", "count": 6139},
- ]
-
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = PlayerAPIClient.get_trending_players(sport=Sport.NFL, trend_type=TrendType.ADD)
-
- self.assertIsInstance(response, list)
- self.assertEqual(3, len(response))
- self.assertIsInstance(response[0], PlayerTrend)
- self.assertEqual("943", response[0].player_id)
- self.assertEqual(13750, response[0].count)
-
- @mock.patch("requests.get")
- def test_get_trending_players_drop_happy_path(self, mock_requests_get):
- mock_dict = [
- {"player_id": "943", "count": 13750},
- {"player_id": "5284", "count": 8070},
- {"player_id": "4863", "count": 6139},
- ]
-
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = PlayerAPIClient.get_trending_players(sport=Sport.NFL, trend_type=TrendType.DROP)
-
- self.assertIsInstance(response, list)
- self.assertEqual(3, len(response))
- self.assertIsInstance(response[0], PlayerTrend)
- self.assertEqual("943", response[0].player_id)
- self.assertEqual(13750, response[0].count)
-
- @mock.patch("requests.get")
- def test_get_trending_players_filters_given(self, mock_requests_get):
- mock_dict = [
- {"player_id": "943", "count": 13750},
- {"player_id": "5284", "count": 8070},
- {"player_id": "4863", "count": 6139},
- ]
-
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = PlayerAPIClient.get_trending_players(
- sport=Sport.NFL, trend_type=TrendType.ADD, lookback_hours=1, limit=3
- )
-
- self.assertIsInstance(response, list)
- self.assertEqual(3, len(response))
- self.assertIsInstance(response[0], PlayerTrend)
- self.assertEqual("943", response[0].player_id)
- self.assertEqual(13750, response[0].count)
-
- @mock.patch("requests.get")
- def test_get_trending_players_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- PlayerAPIClient.get_trending_players(sport=Sport.NFL, trend_type=TrendType.ADD)
- self.assertEqual("Could not get PlayerTrends.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_trending_players_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- PlayerAPIClient.get_trending_players(sport=Sport.NFL, trend_type=TrendType.ADD)
- self.assertEqual("404 Client Error", str(context.exception))
diff --git a/test/test_api/test_UserAPIClient.py b/test/test_api/test_UserAPIClient.py
deleted file mode 100644
index e302379..0000000
--- a/test/test_api/test_UserAPIClient.py
+++ /dev/null
@@ -1,87 +0,0 @@
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from requests import HTTPError
-
-from sleeper.api.UserAPIClient import UserAPIClient
-from sleeper.model.User import User
-
-
-class TestUserAPIClient(unittest.TestCase):
- @mock.patch("requests.get")
- def test_get_user_happy_path(self, mock_requests_get):
- mock_dict = {
- "verification": "v",
- "username": "username",
- "user_id": "user_id",
- "token": "t",
- "summoner_region": "r",
- "solicitable": "s",
- "real_name": "name",
- "phone": "1",
- "pending": "1",
- "notifications": "1",
- "metadata": {"test": "t"},
- "is_bot": True,
- "email": "email",
- "display_name": "display_name",
- "deleted": "deleted",
- "data_updated": "data",
- "currencies": "currencies",
- "created": "created",
- "cookies": "cookies",
- "avatar": "avatar",
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = UserAPIClient.get_user(user_id="user_id")
-
- self.assertIsInstance(response, User)
- self.assertEqual(response.username, "username")
- self.assertEqual(response.user_id, "user_id")
- self.assertEqual(response.display_name, "display_name")
- self.assertEqual(response.avatar, "avatar")
- self.assertEqual("cookies", response.cookies)
- self.assertEqual("created", response.created)
- self.assertEqual("currencies", response.currencies)
- self.assertEqual("data", response.data_updated)
- self.assertEqual("deleted", response.deleted)
- self.assertEqual("email", response.email)
- self.assertEqual({"test": "t"}, response.metadata)
- self.assertEqual("1", response.notifications)
- self.assertEqual("1", response.pending)
- self.assertEqual("1", response.phone)
- self.assertEqual("name", response.real_name)
- self.assertEqual("s", response.solicitable)
- self.assertEqual("r", response.summoner_region)
- self.assertEqual("t", response.token)
- self.assertEqual("v", response.verification)
-
- def test_get_user_username_and_user_id_not_given_raises_exception(self):
- with self.assertRaises(ValueError) as context:
- UserAPIClient.get_user()
- self.assertEqual("'username' and 'user_id' cannot both be None.", str(context.exception))
-
- @mock.patch("requests.get")
- def test_get_user_username_or_user_id_not_found_raises_exception(self, mock_requests_get):
- mock_dict = None
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(ValueError) as context:
- UserAPIClient.get_user(user_id="user_id")
- self.assertEqual(
- "Could not find User for username/user_id: 'user_id'.", str(context.exception)
- )
-
- @mock.patch("requests.get")
- def test_get_user_non_200_status_code_raises_exception(self, mock_requests_get):
- mock_dict = {}
- mock_response = MockResponse(mock_dict, 404)
- mock_requests_get.return_value = mock_response
-
- with self.assertRaises(HTTPError) as context:
- UserAPIClient.get_user(user_id="user_id")
- self.assertEqual("404 Client Error", str(context.exception))
diff --git a/test/test_api/test_unofficial/test_UPlayerAPIClient.py b/test/test_api/test_unofficial/test_UPlayerAPIClient.py
deleted file mode 100644
index 51eb5a9..0000000
--- a/test/test_api/test_unofficial/test_UPlayerAPIClient.py
+++ /dev/null
@@ -1,376 +0,0 @@
-import os
-import tempfile
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from sleeper.api.unofficial import UPlayerAPIClient
-from sleeper.enum import Category, Company, SeasonType
-from sleeper.enum.nfl import NFLPosition, NFLTeam
-from sleeper.enum.Sport import Sport
-from sleeper.model import Player, PlayerStats
-from sleeper.model.nfl import NFLStats
-
-
-class TestUPlayerAPIClient(unittest.TestCase):
- PATH_TO_TEST_DIR = os.path.abspath(
- os.path.join(os.path.dirname(__file__), "..", "..", "files", "api")
- )
-
- @mock.patch("requests.get")
- def test_get_player_stats_no_week_given_happy_path(self, mock_requests_get):
- mock_dict = {
- "team": "LAR",
- "stats": {"rush_yd": 1.0, "rush_fd": 2.0, "rush_att": 3.0},
- "sport": "nfl",
- "season_type": "regular",
- "season": "2021",
- "player_id": "1234",
- "player": {
- "years_exp": 1,
- "team": "LAR",
- "position": "WR",
- "news_updated": 1234,
- "last_name": "ln",
- "first_name": "fn",
- "fantasy_positions": ["WR"],
- },
- "game_id": "season",
- "company": "rotowire",
- "category": "stat",
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = UPlayerAPIClient.get_player_stats(
- sport=Sport.NFL, player_id="1234", season="2021"
- )
-
- self.assertIsInstance(response, PlayerStats)
- self.assertEqual(NFLTeam.LAR, response.team)
- self.assertIsInstance(response.stats, NFLStats)
- self.assertEqual(1.0, response.stats.rush_yd)
- self.assertEqual(2.0, response.stats.rush_fd)
- self.assertEqual(3.0, response.stats.rush_att)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertEqual("2021", response.season)
- self.assertEqual("1234", response.player_id)
- self.assertIsInstance(response.player, Player)
- self.assertEqual(1, response.player.years_exp)
- self.assertEqual(NFLTeam.LAR, response.player.team)
- self.assertEqual(NFLPosition.WR, response.player.position)
- self.assertEqual(1234, response.player.news_updated)
- self.assertIsNone(response.player.metadata)
- self.assertEqual("ln", response.player.last_name)
- self.assertEqual("fn", response.player.first_name)
- self.assertEqual([NFLPosition.WR], response.player.fantasy_positions)
- self.assertEqual("season", response.game_id)
- self.assertEqual(Company.ROTOWIRE, response.company)
- self.assertEqual(Category.STAT, response.category)
-
- @mock.patch("requests.get")
- def test_get_player_stats_week_is_given_happy_path(self, mock_requests_get):
- mock_dict = {
- "week": 1,
- "team": "LAR",
- "stats": {"rush_yd": 1.0, "rush_fd": 2.0, "rush_att": 3.0},
- "sport": "nfl",
- "season_type": "regular",
- "season": "2021",
- "opponent": "SEA",
- "player_id": "1234",
- "player": {
- "years_exp": 1,
- "team": "LAR",
- "position": "WR",
- "news_updated": 1234,
- "last_name": "ln",
- "first_name": "fn",
- "fantasy_positions": ["WR"],
- },
- "game_id": "1234",
- "company": "sportradar",
- "category": "stat",
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = UPlayerAPIClient.get_player_stats(
- sport=Sport.NFL, player_id="1234", season="2021", week=1
- )
-
- self.assertIsInstance(response, PlayerStats)
- self.assertEqual(NFLTeam.LAR, response.team)
- self.assertIsInstance(response.stats, NFLStats)
- self.assertEqual(1, response.week)
- self.assertEqual(1.0, response.stats.rush_yd)
- self.assertEqual(2.0, response.stats.rush_fd)
- self.assertEqual(3.0, response.stats.rush_att)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertEqual("2021", response.season)
- self.assertEqual("1234", response.player_id)
- self.assertIsInstance(response.player, Player)
- self.assertEqual(1, response.player.years_exp)
- self.assertEqual(NFLTeam.LAR, response.player.team)
- self.assertEqual(NFLPosition.WR, response.player.position)
- self.assertEqual(1234, response.player.news_updated)
- self.assertIsNone(response.player.metadata)
- self.assertEqual("ln", response.player.last_name)
- self.assertEqual("fn", response.player.first_name)
- self.assertEqual([NFLPosition.WR], response.player.fantasy_positions)
- self.assertEqual("1234", response.game_id)
- self.assertEqual(Company.SPORTRADAR, response.company)
- self.assertEqual(Category.STAT, response.category)
- self.assertEqual(NFLTeam.SEA, response.opponent)
-
- @mock.patch("requests.get")
- def test_get_player_projections_no_week_given_happy_path(self, mock_requests_get):
- mock_dict = {
- "team": "LAR",
- "stats": {"rush_yd": 1.0, "rush_fd": 2.0, "rush_att": 3.0},
- "sport": "nfl",
- "season_type": "regular",
- "season": "2021",
- "player_id": "1234",
- "player": {
- "years_exp": 1,
- "team": "LAR",
- "position": "WR",
- "news_updated": 1234,
- "last_name": "ln",
- "first_name": "fn",
- "fantasy_positions": ["WR"],
- },
- "game_id": "season",
- "company": "rotowire",
- "category": "proj",
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = UPlayerAPIClient.get_player_projections(
- sport=Sport.NFL, player_id="1234", season="2021"
- )
-
- self.assertIsInstance(response, PlayerStats)
- self.assertEqual(NFLTeam.LAR, response.team)
- self.assertIsInstance(response.stats, NFLStats)
- self.assertEqual(1.0, response.stats.rush_yd)
- self.assertEqual(2.0, response.stats.rush_fd)
- self.assertEqual(3.0, response.stats.rush_att)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertEqual("2021", response.season)
- self.assertEqual("1234", response.player_id)
- self.assertIsInstance(response.player, Player)
- self.assertEqual(1, response.player.years_exp)
- self.assertEqual(NFLTeam.LAR, response.player.team)
- self.assertEqual(NFLPosition.WR, response.player.position)
- self.assertEqual(1234, response.player.news_updated)
- self.assertIsNone(response.player.metadata)
- self.assertEqual("ln", response.player.last_name)
- self.assertEqual("fn", response.player.first_name)
- self.assertEqual([NFLPosition.WR], response.player.fantasy_positions)
- self.assertEqual("season", response.game_id)
- self.assertEqual(Company.ROTOWIRE, response.company)
- self.assertEqual(Category.PROJ, response.category)
-
- @mock.patch("requests.get")
- def test_get_player_projections_week_is_given_happy_path(self, mock_requests_get):
- mock_dict = {
- "week": 1,
- "team": "LAR",
- "stats": {"rush_yd": 1.0, "rush_fd": 2.0, "rush_att": 3.0},
- "sport": "nfl",
- "season_type": "regular",
- "season": "2021",
- "opponent": "SEA",
- "player_id": "1234",
- "player": {
- "years_exp": 1,
- "team": "LAR",
- "position": "WR",
- "news_updated": 1234,
- "last_name": "ln",
- "first_name": "fn",
- "fantasy_positions": ["WR"],
- },
- "game_id": "1234",
- "company": "sportradar",
- "category": "proj",
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = UPlayerAPIClient.get_player_stats(
- sport=Sport.NFL, player_id="1234", season="2021", week=1
- )
-
- self.assertIsInstance(response, PlayerStats)
- self.assertEqual(NFLTeam.LAR, response.team)
- self.assertIsInstance(response.stats, NFLStats)
- self.assertEqual(1, response.week)
- self.assertEqual(1.0, response.stats.rush_yd)
- self.assertEqual(2.0, response.stats.rush_fd)
- self.assertEqual(3.0, response.stats.rush_att)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertEqual("2021", response.season)
- self.assertEqual("1234", response.player_id)
- self.assertIsInstance(response.player, Player)
- self.assertEqual(1, response.player.years_exp)
- self.assertEqual(NFLTeam.LAR, response.player.team)
- self.assertEqual(NFLPosition.WR, response.player.position)
- self.assertEqual(1234, response.player.news_updated)
- self.assertIsNone(response.player.metadata)
- self.assertEqual("ln", response.player.last_name)
- self.assertEqual("fn", response.player.first_name)
- self.assertEqual([NFLPosition.WR], response.player.fantasy_positions)
- self.assertEqual("1234", response.game_id)
- self.assertEqual(Company.SPORTRADAR, response.company)
- self.assertEqual(Category.PROJ, response.category)
- self.assertEqual(NFLTeam.SEA, response.opponent)
-
- @mock.patch("requests.get")
- def test_get_all_player_stats_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "week": 1,
- "team": "LAR",
- "stats": {"rush_yd": 1.0, "rush_fd": 2.0, "rush_att": 3.0},
- "sport": "nfl",
- "season_type": "regular",
- "season": "2021",
- "opponent": "SEA",
- "player_id": "1234",
- "player": {
- "years_exp": 1,
- "team": "LAR",
- "position": "WR",
- "news_updated": 1234,
- "last_name": "ln",
- "first_name": "fn",
- "fantasy_positions": ["WR"],
- },
- "game_id": "1234",
- "company": "sportradar",
- "category": "stat",
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response_list = UPlayerAPIClient.get_all_player_stats(
- sport=Sport.NFL, season="2021", week=1
- )
- response = response_list[0]
-
- self.assertIsInstance(response_list, list)
- self.assertEqual(1, len(response_list))
- self.assertIsInstance(response, PlayerStats)
- self.assertEqual(NFLTeam.LAR, response.team)
- self.assertIsInstance(response.stats, NFLStats)
- self.assertEqual(1, response.week)
- self.assertEqual(1.0, response.stats.rush_yd)
- self.assertEqual(2.0, response.stats.rush_fd)
- self.assertEqual(3.0, response.stats.rush_att)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertEqual("2021", response.season)
- self.assertEqual("1234", response.player_id)
- self.assertIsInstance(response.player, Player)
- self.assertEqual(1, response.player.years_exp)
- self.assertEqual(NFLTeam.LAR, response.player.team)
- self.assertEqual(NFLPosition.WR, response.player.position)
- self.assertEqual(1234, response.player.news_updated)
- self.assertIsNone(response.player.metadata)
- self.assertEqual("ln", response.player.last_name)
- self.assertEqual("fn", response.player.first_name)
- self.assertEqual([NFLPosition.WR], response.player.fantasy_positions)
- self.assertEqual("1234", response.game_id)
- self.assertEqual(Company.SPORTRADAR, response.company)
- self.assertEqual(Category.STAT, response.category)
- self.assertEqual(NFLTeam.SEA, response.opponent)
-
- @mock.patch("requests.get")
- def test_get_all_player_projections_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "week": 1,
- "team": "LAR",
- "stats": {"rush_yd": 1.0, "rush_fd": 2.0, "rush_att": 3.0},
- "sport": "nfl",
- "season_type": "regular",
- "season": "2021",
- "opponent": "SEA",
- "player_id": "1234",
- "player": {
- "years_exp": 1,
- "team": "LAR",
- "position": "WR",
- "news_updated": 1234,
- "last_name": "ln",
- "first_name": "fn",
- "fantasy_positions": ["WR"],
- },
- "game_id": "1234",
- "company": "sportradar",
- "category": "proj",
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response_list = UPlayerAPIClient.get_all_player_projections(
- sport=Sport.NFL, season="2021", week=1
- )
- response = response_list[0]
-
- self.assertIsInstance(response_list, list)
- self.assertEqual(1, len(response_list))
- self.assertIsInstance(response, PlayerStats)
- self.assertEqual(NFLTeam.LAR, response.team)
- self.assertIsInstance(response.stats, NFLStats)
- self.assertEqual(1, response.week)
- self.assertEqual(1.0, response.stats.rush_yd)
- self.assertEqual(2.0, response.stats.rush_fd)
- self.assertEqual(3.0, response.stats.rush_att)
- self.assertEqual(Sport.NFL, response.sport)
- self.assertEqual(SeasonType.REGULAR, response.season_type)
- self.assertEqual("2021", response.season)
- self.assertEqual("1234", response.player_id)
- self.assertIsInstance(response.player, Player)
- self.assertEqual(1, response.player.years_exp)
- self.assertEqual(NFLTeam.LAR, response.player.team)
- self.assertEqual(NFLPosition.WR, response.player.position)
- self.assertEqual(1234, response.player.news_updated)
- self.assertIsNone(response.player.metadata)
- self.assertEqual("ln", response.player.last_name)
- self.assertEqual("fn", response.player.first_name)
- self.assertEqual([NFLPosition.WR], response.player.fantasy_positions)
- self.assertEqual("1234", response.game_id)
- self.assertEqual(Company.SPORTRADAR, response.company)
- self.assertEqual(Category.PROJ, response.category)
- self.assertEqual(NFLTeam.SEA, response.opponent)
-
- @mock.patch("requests.get")
- def test_get_player_head_shot_happy_path(self, mock_requests_get):
- with open(os.path.join(self.PATH_TO_TEST_DIR, "test.png"), "rb") as image:
- f = image.read()
- original_image_bytes = bytearray(f)
- mock_response = MockResponse(dict(), 200, content=original_image_bytes)
- mock_requests_get.return_value = mock_response
-
- with tempfile.TemporaryDirectory() as temp_dir:
- full_image_path = os.path.join(temp_dir, "tmp.png")
- UPlayerAPIClient.get_player_head_shot(
- sport=Sport.NFL, player_id="1234", save_to_path=full_image_path
- )
-
- with open(full_image_path, "rb") as image:
- f = image.read()
- saved_image_bytes = bytearray(f)
- self.assertEqual(original_image_bytes, saved_image_bytes)
- self.assertTrue(os.path.exists(full_image_path))
diff --git a/test/test_api/test_unofficial/test_USportAPIClient.py b/test/test_api/test_unofficial/test_USportAPIClient.py
deleted file mode 100644
index 3fb7083..0000000
--- a/test/test_api/test_unofficial/test_USportAPIClient.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import datetime
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from sleeper.api.unofficial import USportAPIClient
-from sleeper.enum import SeasonStatus
-from sleeper.enum.nfl import NFLTeam
-from sleeper.enum.Sport import Sport
-from sleeper.model import Game
-
-
-class TestUSportAPIClient(unittest.TestCase):
- @mock.patch("requests.get")
- def test_get_player_stats_no_week_given_happy_path(self, mock_requests_get):
- mock_list = [
- {
- "week": 1,
- "status": "complete",
- "home": "ATL",
- "game_id": "1234",
- "date": "2021-09-12",
- "away": "PHI",
- }
- ]
- mock_response = MockResponse(mock_list, 200)
- mock_requests_get.return_value = mock_response
-
- response = USportAPIClient.get_regular_season_schedule(sport=Sport.NFL, season="2021")
-
- self.assertIsInstance(response, list)
- self.assertEqual(1, len(response))
- self.assertIsInstance(response[0], Game)
- self.assertEqual(1, response[0].week)
- self.assertEqual(SeasonStatus.COMPLETE, response[0].status)
- self.assertEqual(NFLTeam.ATL, response[0].home)
- self.assertEqual("1234", response[0].game_id)
- self.assertEqual(datetime.datetime(2021, 9, 12).date(), response[0].date)
- self.assertEqual(NFLTeam.PHI, response[0].away)
diff --git a/test/test_api/test_unofficial/test_UTeamAPIClient.py b/test/test_api/test_unofficial/test_UTeamAPIClient.py
deleted file mode 100644
index ab419fb..0000000
--- a/test/test_api/test_unofficial/test_UTeamAPIClient.py
+++ /dev/null
@@ -1,121 +0,0 @@
-import unittest
-from test.helper.helper_classes import MockResponse
-from unittest import mock
-
-from sleeper.api.unofficial import UTeamAPIClient
-from sleeper.enum.nfl import NFLTeam
-from sleeper.enum.Sport import Sport
-from sleeper.model.nfl import NFLDepthChart
-
-
-class TestUSTeamAPIClient(unittest.TestCase):
- @mock.patch("requests.get")
- def test_get_team_depth_chart_happy_path(self, mock_requests_get):
- mock_dict = {
- "WR3": ["1817", "8167"],
- "WR2": ["928", "7540", "8235"],
- "WR1": ["5185", "8121", "6223"],
- "TE": ["4602", "111", "7050"],
- "SS": ["2445", "5736", "6355"],
- "RT": ["5877", "8511"],
- "ROLB": ["5839", "8382"],
- "RILB": ["8266", "7782"],
- "RG": ["7702", "8460"],
- "RDE": ["3220", "8270"],
- "RCB": ["7628", "6333"],
- "RB": ["4199", "6828"],
- "QB": ["96", "6804"],
- "PK": ["59"],
- "NT": ["3186", "7818", "8344"],
- "NB": ["4136", "4223"],
- "LT": ["1521", "6008"],
- "LOLB": ["2343", "6965", "6981"],
- "LILB": ["3276", "7268"],
- "LG": ["6980", "8463"],
- "LDE": ["3295"],
- "LCB": ["4979", "7813"],
- "FS": ["6210", "8405"],
- "C": ["7645", "7132"],
- }
- mock_response = MockResponse(mock_dict, 200)
- mock_requests_get.return_value = mock_response
-
- response = UTeamAPIClient.get_team_depth_chart(sport=Sport.NFL, team=NFLTeam.GB)
-
- self.assertIsInstance(response, NFLDepthChart)
- self.assertEqual(2, len(response.WR3))
- self.assertEqual("1817", response.WR3[0])
- self.assertEqual("8167", response.WR3[1])
- self.assertEqual(3, len(response.WR2))
- self.assertEqual("928", response.WR2[0])
- self.assertEqual("7540", response.WR2[1])
- self.assertEqual("8235", response.WR2[2])
- self.assertEqual(3, len(response.WR1))
- self.assertEqual("5185", response.WR1[0])
- self.assertEqual("8121", response.WR1[1])
- self.assertEqual("6223", response.WR1[2])
- self.assertEqual(3, len(response.TE))
- self.assertEqual("4602", response.TE[0])
- self.assertEqual("111", response.TE[1])
- self.assertEqual("7050", response.TE[2])
- self.assertEqual(3, len(response.SS))
- self.assertEqual("2445", response.SS[0])
- self.assertEqual("5736", response.SS[1])
- self.assertEqual("6355", response.SS[2])
- self.assertEqual(2, len(response.RT))
- self.assertEqual("5877", response.RT[0])
- self.assertEqual("8511", response.RT[1])
- self.assertEqual(2, len(response.ROLB))
- self.assertEqual("5839", response.ROLB[0])
- self.assertEqual("8382", response.ROLB[1])
- self.assertEqual(2, len(response.RILB))
- self.assertEqual("8266", response.RILB[0])
- self.assertEqual("7782", response.RILB[1])
- self.assertEqual(2, len(response.RG))
- self.assertEqual("7702", response.RG[0])
- self.assertEqual("8460", response.RG[1])
- self.assertEqual(2, len(response.RDE))
- self.assertEqual("3220", response.RDE[0])
- self.assertEqual("8270", response.RDE[1])
- self.assertEqual(2, len(response.RCB))
- self.assertEqual("7628", response.RCB[0])
- self.assertEqual("6333", response.RCB[1])
- self.assertEqual(2, len(response.RB))
- self.assertEqual("4199", response.RB[0])
- self.assertEqual("6828", response.RB[1])
- self.assertEqual(2, len(response.QB))
- self.assertEqual("96", response.QB[0])
- self.assertEqual("6804", response.QB[1])
- self.assertEqual(1, len(response.PK))
- self.assertEqual("59", response.PK[0])
- self.assertEqual(3, len(response.NT))
- self.assertEqual("3186", response.NT[0])
- self.assertEqual("7818", response.NT[1])
- self.assertEqual("8344", response.NT[2])
- self.assertEqual(2, len(response.NB))
- self.assertEqual("4136", response.NB[0])
- self.assertEqual("4223", response.NB[1])
- self.assertEqual(2, len(response.LT))
- self.assertEqual("1521", response.LT[0])
- self.assertEqual("6008", response.LT[1])
- self.assertEqual(3, len(response.LOLB))
- self.assertEqual("2343", response.LOLB[0])
- self.assertEqual("6965", response.LOLB[1])
- self.assertEqual("6981", response.LOLB[2])
- self.assertEqual(2, len(response.LILB))
- self.assertEqual("3276", response.LILB[0])
- self.assertEqual("7268", response.LILB[1])
- self.assertEqual(2, len(response.LG))
- self.assertEqual("6980", response.LG[0])
- self.assertEqual("8463", response.LG[1])
- self.assertEqual(1, len(response.LDE))
- self.assertEqual("3295", response.LDE[0])
- self.assertEqual(2, len(response.LCB))
- self.assertEqual("4979", response.LCB[0])
- self.assertEqual("7813", response.LCB[1])
- self.assertEqual(2, len(response.FS))
- self.assertEqual("6210", response.FS[0])
- self.assertEqual("8405", response.FS[1])
- self.assertEqual(2, len(response.C))
- self.assertEqual("7645", response.C[0])
- self.assertEqual("7132", response.C[1])
diff --git a/test/test_api/test_unofficial/__init__.py b/test/unit/__init__.py
similarity index 100%
rename from test/test_api/test_unofficial/__init__.py
rename to test/unit/__init__.py
diff --git a/test/helper/helper_classes.py b/test/unit/helper/helper_classes.py
similarity index 100%
rename from test/helper/helper_classes.py
rename to test/unit/helper/helper_classes.py
diff --git a/test/unit/test_api/__init__.py b/test/unit/test_api/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/test/unit/test_api/test_avatar.py b/test/unit/test_api/test_avatar.py
new file mode 100644
index 0000000..e2724fe
--- /dev/null
+++ b/test/unit/test_api/test_avatar.py
@@ -0,0 +1,31 @@
+import unittest
+from unittest.mock import patch
+
+from sleeper.api import get_avatar
+from test.unit.helper.helper_classes import MockResponse
+
+
+class TestAvatar(unittest.TestCase):
+ @patch("requests.get")
+ def test_get_avatar_defaults(self, mock_requests_get):
+ mock_bytes = b"foo"
+ mock_response = MockResponse({}, 200, mock_bytes)
+ mock_requests_get.return_value = mock_response
+
+ response = get_avatar(avatar_id="abc")
+
+ self.assertEqual(mock_bytes, response)
+ mock_requests_get.assert_called_once_with("https://sleepercdn.com/avatars/abc")
+
+ @patch("requests.get")
+ def test_get_avatar_as_thumbnail(self, mock_requests_get):
+ mock_bytes = b"foo"
+ mock_response = MockResponse({}, 200, mock_bytes)
+ mock_requests_get.return_value = mock_response
+
+ response = get_avatar(avatar_id="abc", as_thumbnail=True)
+
+ self.assertEqual(mock_bytes, response)
+ mock_requests_get.assert_called_once_with(
+ "https://sleepercdn.com/avatars/thumbs/abc"
+ )
diff --git a/test/unit/test_api/test_draft.py b/test/unit/test_api/test_draft.py
new file mode 100644
index 0000000..9a8f81b
--- /dev/null
+++ b/test/unit/test_api/test_draft.py
@@ -0,0 +1,78 @@
+import unittest
+from unittest.mock import patch
+
+from sleeper.api import (
+ get_draft,
+ get_drafts_in_league,
+ get_player_draft_picks,
+ get_traded_draft_picks,
+ get_user_drafts_for_year,
+)
+from test.unit.helper.helper_classes import MockResponse
+
+
+class TestDraft(unittest.TestCase):
+ @patch("requests.get")
+ def test_get_user_drafts_for_year_happy_path(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_user_drafts_for_year(user_id="user_id", sport="nfl", year=2020)
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/user/user_id/drafts/nfl/2020"
+ )
+
+ @patch("requests.get")
+ def test_get_drafts_in_league(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_drafts_in_league(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/drafts"
+ )
+
+ @patch("requests.get")
+ def test_get_draft(self, mock_requests_get):
+ mock_dict = {"foo": "bar"}
+ mock_response = MockResponse(mock_dict, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_draft(draft_id="12345")
+
+ self.assertEqual(mock_dict, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/draft/12345"
+ )
+
+ @patch("requests.get")
+ def test_get_player_draft_picks(self, mock_requests_get):
+ mock_dict = {"foo": "bar"}
+ mock_response = MockResponse(mock_dict, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_player_draft_picks(draft_id="12345")
+
+ self.assertEqual(mock_dict, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/draft/12345/picks"
+ )
+
+ @patch("requests.get")
+ def test_get_traded_draft_picks(self, mock_requests_get):
+ mock_dict = {"foo": "bar"}
+ mock_response = MockResponse(mock_dict, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_traded_draft_picks(draft_id="12345")
+
+ self.assertEqual(mock_dict, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/draft/12345/traded_picks"
+ )
diff --git a/test/unit/test_api/test_league.py b/test/unit/test_api/test_league.py
new file mode 100644
index 0000000..97ac6b9
--- /dev/null
+++ b/test/unit/test_api/test_league.py
@@ -0,0 +1,148 @@
+import unittest
+from unittest.mock import patch
+
+from sleeper.api import (
+ get_league,
+ get_losers_bracket,
+ get_matchups_for_week,
+ get_rosters,
+ get_sport_state,
+ get_traded_picks,
+ get_transactions,
+ get_user_leagues_for_year,
+ get_users_in_league,
+ get_winners_bracket,
+)
+from test.unit.helper.helper_classes import MockResponse
+
+
+class TestLeague(unittest.TestCase):
+ @patch("requests.get")
+ def test_get_league(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_league(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345"
+ )
+
+ @patch("requests.get")
+ def test_get_user_leagues_for_year(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_user_leagues_for_year(user_id="12345", sport="nfl", year=2024)
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/user/12345/leagues/nfl/2024"
+ )
+
+ @patch("requests.get")
+ def test_get_rosters(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_rosters(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/rosters"
+ )
+
+ @patch("requests.get")
+ def test_get_users_in_league(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_users_in_league(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/users"
+ )
+
+ @patch("requests.get")
+ def test_get_matchups_for_week(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_matchups_for_week(league_id="12345", week=1)
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/matchups/1"
+ )
+
+ @patch("requests.get")
+ def test_get_winners_bracket(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_winners_bracket(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/winners_bracket"
+ )
+
+ @patch("requests.get")
+ def test_get_losers_bracket(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_losers_bracket(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/losers_bracket"
+ )
+
+ @patch("requests.get")
+ def test_get_transactions(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_transactions(league_id="12345", week=1)
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/transactions/1"
+ )
+
+ @patch("requests.get")
+ def test_get_traded_picks(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_traded_picks(league_id="12345")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/league/12345/traded_picks"
+ )
+
+ @patch("requests.get")
+ def test_get_sport_state(self, mock_requests_get):
+ mock_dict = {"foo": "bar"}
+ mock_response = MockResponse(mock_dict, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_sport_state(sport="nfl")
+
+ self.assertEqual(mock_dict, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/state/nfl"
+ )
diff --git a/test/unit/test_api/test_player.py b/test/unit/test_api/test_player.py
new file mode 100644
index 0000000..bb425f9
--- /dev/null
+++ b/test/unit/test_api/test_player.py
@@ -0,0 +1,48 @@
+import unittest
+from unittest.mock import patch
+
+from sleeper.api import get_all_players, get_trending_players
+from test.unit.helper.helper_classes import MockResponse
+
+
+class TestPlayer(unittest.TestCase):
+ @patch("requests.get")
+ def test_get_all_players(self, mock_requests_get):
+ mock_dict = {"foo": {"bar": "baz"}}
+ mock_response = MockResponse(mock_dict, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_all_players(sport="nfl")
+
+ self.assertEqual(mock_dict, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/players/nfl"
+ )
+
+ @patch("requests.get")
+ def test_get_trending_players_with_defaults(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_trending_players(sport="nfl", trend_type="add")
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/players/nfl/trending/add"
+ )
+
+ @patch("requests.get")
+ def test_get_trending_players_with_optional_params_given(self, mock_requests_get):
+ mock_list = [{"foo": "bar"}]
+ mock_response = MockResponse(mock_list, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_trending_players(
+ sport="nfl", trend_type="add", lookback_hours=1, limit=2
+ )
+
+ self.assertEqual(mock_list, response)
+ mock_requests_get.assert_called_once_with(
+ "https://api.sleeper.app/v1/players/nfl/trending/add?lookback_hours=1&limit=2"
+ )
diff --git a/test/unit/test_api/test_user.py b/test/unit/test_api/test_user.py
new file mode 100644
index 0000000..58921af
--- /dev/null
+++ b/test/unit/test_api/test_user.py
@@ -0,0 +1,18 @@
+import unittest
+from unittest.mock import patch
+
+from sleeper.api import get_user
+from test.unit.helper.helper_classes import MockResponse
+
+
+class TestUser(unittest.TestCase):
+ @patch("requests.get")
+ def test_get_user(self, mock_requests_get):
+ mock_dict = {"foo": "bar"}
+ mock_response = MockResponse(mock_dict, 200)
+ mock_requests_get.return_value = mock_response
+
+ response = get_user(identifier="foo")
+
+ self.assertEqual(mock_dict, response)
+ mock_requests_get.assert_called_once_with("https://api.sleeper.app/v1/user/foo")
diff --git a/test/unit/test_api/test_utils.py b/test/unit/test_api/test_utils.py
new file mode 100644
index 0000000..1fdc6a7
--- /dev/null
+++ b/test/unit/test_api/test_utils.py
@@ -0,0 +1,36 @@
+import unittest
+
+from sleeper.api._utils import add_filters, build_route
+
+
+class TestUtils(unittest.TestCase):
+ def test_build_route_with_str_paths(self):
+ resp = build_route("https://foo", "bar", "/baz")
+ self.assertEqual("https://foo/bar/baz", resp)
+
+ def test_build_route_with_int_and_str_paths(self):
+ resp = build_route("https://foo", "bar", 1)
+ self.assertEqual("https://foo/bar/1", resp)
+
+ def test_build_route_base_url_ends_with_slash(self):
+ resp = build_route("https://foo/", "bar", "/baz")
+ self.assertEqual("https://foo/bar/baz", resp)
+
+ def test_build_route_ending_path_ends_with_slash(self):
+ resp = build_route("https://foo/", "bar", "/baz/")
+ self.assertEqual("https://foo/bar/baz", resp)
+
+ def test_add_filters_no_filters_given(self):
+ resp = add_filters("https://foo")
+ self.assertEqual("https://foo", resp)
+
+ def test_add_filters_filters_given(self):
+ resp = add_filters("https://foo", ("bar", "baz"), ("qux", 1))
+ self.assertEqual("https://foo?bar=baz&qux=1", resp)
+
+ def test_add_filters_url_already_has_filters(self):
+ resp = add_filters(
+ "https://foo?bar=baz",
+ ("qux", 1),
+ )
+ self.assertEqual("https://foo?bar=baz&qux=1", resp)