diff --git a/basketball_reference_web_scraper/client.py b/basketball_reference_web_scraper/client.py
index 2694c5f3..ededda1c 100644
--- a/basketball_reference_web_scraper/client.py
+++ b/basketball_reference_web_scraper/client.py
@@ -1,5 +1,9 @@
+from typing import Any, Callable
+
import requests
+from basketball_reference_web_scraper.contracts.data.models import PlayerContract
+from basketball_reference_web_scraper.contracts.data.parsers import create_player_contract
from basketball_reference_web_scraper.errors import InvalidSeason, InvalidDate, InvalidPlayerAndSeason
from basketball_reference_web_scraper.http_service import HTTPService
from basketball_reference_web_scraper.output.columns import BOX_SCORE_COLUMN_NAMES, SCHEDULE_COLUMN_NAMES, \
@@ -250,3 +254,9 @@ def search(term, output_type=None, output_file_path=None, output_write_option=No
csv_writer=SearchCSVWriter(value_formatter=format_value)
)
return output_service.output(data=values, options=options)
+
+
+def player_contracts(player_contract_processor: Callable[[PlayerContract], Any]):
+ HTTPService(parser=ParserService()).player_contracts(
+ player_contract_processor=lambda player_row_contract_data: player_contract_processor(
+ create_player_contract(player_row_contract_data)))
diff --git a/basketball_reference_web_scraper/html.py b/basketball_reference_web_scraper/content.py
similarity index 100%
rename from basketball_reference_web_scraper/html.py
rename to basketball_reference_web_scraper/content.py
diff --git a/basketball_reference_web_scraper/contracts/__init__.py b/basketball_reference_web_scraper/contracts/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/basketball_reference_web_scraper/contracts/data/__init__.py b/basketball_reference_web_scraper/contracts/data/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/basketball_reference_web_scraper/contracts/data/models.py b/basketball_reference_web_scraper/contracts/data/models.py
new file mode 100644
index 00000000..b291bb8c
--- /dev/null
+++ b/basketball_reference_web_scraper/contracts/data/models.py
@@ -0,0 +1,61 @@
+from dataclasses import dataclass
+from decimal import Decimal
+from typing import Dict, Optional
+
+from basketball_reference_web_scraper.data import Team
+
+
+@dataclass(frozen=True)
+class Player:
+ identifier: str
+ name: str
+
+ def __post_init__(self):
+ if 0 == len(self.identifier):
+ raise ValueError("identifier should not be an empty string")
+
+ if 0 == len(self.name):
+ raise ValueError("name should not be an empty string")
+
+ if any(char.isspace() for char in self.identifier):
+ raise ValueError(f"identifier: {self.identifier} should not contain whitespace")
+
+
+@dataclass(frozen=True)
+class Salary:
+ amount: Decimal
+ currency: str
+
+ def __post_init__(self):
+ if self.amount is None:
+ raise ValueError("amount should not be None")
+
+ if 0 > self.amount:
+ raise ValueError("amount should not be negative")
+
+
+@dataclass(frozen=True)
+class PlayerContract:
+ player: Player
+ team: Team
+ salaries_by_season_start_year: Dict[int, Optional[Salary]]
+ guaranteed_salary: Salary
+
+ def __post_init__(self):
+ if self.player is None:
+ raise ValueError("player should not be None")
+
+ if self.team is None:
+ raise ValueError("team should not be None")
+
+ if self.salaries_by_season_start_year is None:
+ raise ValueError("season salaries should not be None")
+
+ if 0 == len(self.salaries_by_season_start_year):
+ raise ValueError("season salaries should not be empty")
+
+ if self.guaranteed_salary is None:
+ raise ValueError("guaranteed salary should not be None")
+
+ if all(salary is None for salary in self.salaries_by_season_start_year.values()):
+ raise ValueError("not all salaries should be None")
diff --git a/basketball_reference_web_scraper/contracts/data/parsers.py b/basketball_reference_web_scraper/contracts/data/parsers.py
new file mode 100644
index 00000000..a49124b5
--- /dev/null
+++ b/basketball_reference_web_scraper/contracts/data/parsers.py
@@ -0,0 +1,59 @@
+from datetime import datetime
+from typing import Dict
+
+from coverage.types import Protocol
+from price_parser import Price
+
+from basketball_reference_web_scraper.contracts.data.models import Salary, PlayerContract, Player
+from basketball_reference_web_scraper.contracts.page.parsers import PlayerRowData, PlayerContractData
+from basketball_reference_web_scraper.data import TEAM_ABBREVIATIONS_TO_TEAM
+
+GUARANTEED_SALARY_COLUMN_DATA_STAT_VALUE = "remain_gtd"
+
+
+class PlayerContractRowDataProcessor(Protocol):
+ def process_row(self, headers: Dict[str, str], row_data: PlayerRowData) -> PlayerContract:
+ raise NotImplementedError()
+
+
+def parse_season_start_date(serialized_season: str) -> int:
+ return datetime.strptime(serialized_season, "%Y-%y").year
+
+
+def parse_player_contract_values(contract_values_by_column_identifier: Dict[str, str],
+ column_names_by_identifier: Dict[str, str]):
+ guaranteed_salary_value = contract_values_by_column_identifier.get(GUARANTEED_SALARY_COLUMN_DATA_STAT_VALUE, None)
+ if guaranteed_salary_value:
+ parsed_guaranteed_salary = Price.fromstring(price=guaranteed_salary_value)
+
+ return (
+ dict(map(lambda item: (
+ item[0], None if item[1] is None else Salary(amount=item[1].amount, currency=item[1].currency)),
+ map(lambda item: (item[0], None if item[1] is None else Price.fromstring(item[1])),
+ map(lambda item: (parse_season_start_date(item[0]), item[1]),
+ map(lambda item: (column_names_by_identifier.get(item[0]), item[1]),
+ filter(lambda item: item[0] != GUARANTEED_SALARY_COLUMN_DATA_STAT_VALUE,
+ contract_values_by_column_identifier.items())))))),
+ Salary(
+ amount=parsed_guaranteed_salary.amount,
+ currency=parsed_guaranteed_salary.currency
+ ))
+
+ raise ValueError("Unparseable player contract values")
+
+
+def create_player_contract(player_contract_data: PlayerContractData):
+ salaries_by_season, guaranteed_salary = parse_player_contract_values(
+ contract_values_by_column_identifier=player_contract_data.row.values_by_header,
+ column_names_by_identifier=player_contract_data.headers
+ )
+
+ return PlayerContract(
+ player=Player(
+ identifier=player_contract_data.row.id,
+ name=player_contract_data.row.name
+ ),
+ team=TEAM_ABBREVIATIONS_TO_TEAM.get(player_contract_data.row.team_abbreviation, None),
+ salaries_by_season_start_year=salaries_by_season,
+ guaranteed_salary=guaranteed_salary
+ )
diff --git a/basketball_reference_web_scraper/contracts/page/__init__.py b/basketball_reference_web_scraper/contracts/page/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/basketball_reference_web_scraper/contracts/page/parsers.py b/basketball_reference_web_scraper/contracts/page/parsers.py
new file mode 100644
index 00000000..c15f6c00
--- /dev/null
+++ b/basketball_reference_web_scraper/contracts/page/parsers.py
@@ -0,0 +1,81 @@
+from collections import defaultdict
+from dataclasses import dataclass
+from typing import Optional, Dict, Callable
+
+from lxml.etree import HTMLPullParser, LxmlError
+
+from basketball_reference_web_scraper.contracts.data.models import PlayerContract
+
+
+@dataclass(frozen=False)
+class PlayerRowData:
+ id: Optional[str]
+ name: Optional[str]
+ team_abbreviation: Optional[str]
+ values_by_header: Dict[str, Optional[str]]
+
+
+@dataclass(frozen=True)
+class PlayerContractData:
+ row: PlayerRowData
+ headers: Dict[str, str]
+
+
+class NothingMoreToParse(StopIteration):
+ """
+ Custom exception to indicate player contract data from player contracts page HTML has been fully parsed
+ """
+ pass
+
+
+class PlayerContractsPageParser:
+ def __init__(self, player_contract_data_processor: Callable[[PlayerContractData], PlayerContract]):
+ self._data_processor = player_contract_data_processor
+ self._seen_table = False
+ self._headers = defaultdict(str)
+ self._current_player_data = PlayerRowData(id=None, name=None, team_abbreviation=None, values_by_header={})
+
+ def __enter__(self):
+ self._html_parser = HTMLPullParser(events=["start", "end"], tag=["table", "th", "tr", "td"])
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ try:
+ self._html_parser.close()
+ except LxmlError:
+ # LxmlErrors can occur when forcibly stopping processing (i.e. closing the parser) since there's no more
+ # relevant data to parse
+ pass
+
+ def parse(self, chunk) -> None:
+ self._html_parser.feed(str(chunk))
+
+ for event, element in self._html_parser.read_events():
+ if event == "start" and element.tag == "table" and element.attrib.get("id") == "player-contracts":
+ self._seen_table = True
+ elif self._seen_table:
+ if event == "end" and element.tag == "th" and element.attrib.get(
+ "data-stat") is not None and element.attrib.get("scope") == "col":
+ self._headers[element.attrib.get('data-stat')] = element.text
+ element.clear(keep_tail=True)
+ elif event == "start" and element.tag == "tr" and element.attrib.get("class") is None:
+ self._current_player_data = PlayerRowData(id=None, name=None, team_abbreviation=None,
+ values_by_header={})
+ elif event == "end" and element.tag == "tr" and element.attrib.get("class") is None:
+ element.clear(keep_tail=True)
+ if self._current_player_data.id is not None:
+ self._data_processor(PlayerContractData(
+ row=self._current_player_data,
+ headers=self._headers
+ ))
+ elif event == "end" and element.tag == "td" and element.attrib.get("data-stat") is not None:
+ if element.attrib.get('data-stat') == "player":
+ self._current_player_data.id = element.attrib.get('data-append-csv')
+ self._current_player_data.name = "".join(element.itertext())
+ elif element.attrib.get('data-stat') == "team_id":
+ self._current_player_data.team_abbreviation = "".join(element.itertext())
+ else:
+ self._current_player_data.values_by_header[element.attrib.get('data-stat')] = element.text
+ element.clear(keep_tail=True)
+ elif event == "end" and element.tag == "table" and element.attrib.get("id") == "player-contracts":
+ raise NothingMoreToParse()
diff --git a/basketball_reference_web_scraper/http_service.py b/basketball_reference_web_scraper/http_service.py
index 466b566a..cdd49fb2 100644
--- a/basketball_reference_web_scraper/http_service.py
+++ b/basketball_reference_web_scraper/http_service.py
@@ -1,11 +1,21 @@
+from typing import Callable
+
import requests
from lxml import html
-from basketball_reference_web_scraper.data import TEAM_TO_TEAM_ABBREVIATION, TeamTotal, PlayerData
-from basketball_reference_web_scraper.errors import InvalidDate, InvalidPlayerAndSeason
-from basketball_reference_web_scraper.html import DailyLeadersPage, PlayerSeasonBoxScoresPage, PlayerSeasonTotalTable, \
+from basketball_reference_web_scraper.content import DailyLeadersPage, PlayerSeasonBoxScoresPage, \
+ PlayerSeasonTotalTable, \
PlayerAdvancedSeasonTotalsTable, PlayByPlayPage, SchedulePage, BoxScoresPage, DailyBoxScoresPage, SearchPage, \
PlayerPage, StandingsPage
+from basketball_reference_web_scraper.contracts.data.models import PlayerContract
+from basketball_reference_web_scraper.contracts.page.parsers import PlayerContractsPageParser, NothingMoreToParse, \
+ PlayerContractData
+from basketball_reference_web_scraper.data import TEAM_TO_TEAM_ABBREVIATION, TeamTotal, PlayerData
+from basketball_reference_web_scraper.errors import InvalidDate, InvalidPlayerAndSeason
+
+
+class CouldNotGetPlayerContractData(Exception):
+ pass
class HTTPService:
@@ -26,7 +36,7 @@ def standings(self, season_end_year):
page = StandingsPage(html=html.fromstring(response.content))
return self.parser.parse_division_standings(standings=page.division_standings.eastern_conference_table.rows) + \
- self.parser.parse_division_standings(standings=page.division_standings.western_conference_table.rows)
+ self.parser.parse_division_standings(standings=page.division_standings.western_conference_table.rows)
def player_box_scores(self, day, month, year):
url = '{BASE_URL}/friv/dailyleaders.cgi?month={month}&day={day}&year={year}'.format(
@@ -65,7 +75,8 @@ def regular_season_player_box_scores(self, player_identifier, season_end_year, i
if page.regular_season_box_scores_table is None:
raise InvalidPlayerAndSeason(player_identifier=player_identifier, season_end_year=season_end_year)
- return self.parser.parse_player_season_box_scores(box_scores=page.regular_season_box_scores_table.rows, include_inactive_games=include_inactive_games)
+ return self.parser.parse_player_season_box_scores(box_scores=page.regular_season_box_scores_table.rows,
+ include_inactive_games=include_inactive_games)
def playoff_player_box_scores(self, player_identifier, season_end_year, include_inactive_games=False):
# Makes assumption that basketball reference pattern of breaking out player pathing using first character of
@@ -86,7 +97,8 @@ def playoff_player_box_scores(self, player_identifier, season_end_year, include_
if page.playoff_box_scores_table is None:
raise InvalidPlayerAndSeason(player_identifier=player_identifier, season_end_year=season_end_year)
- return self.parser.parse_player_season_box_scores(box_scores=page.playoff_box_scores_table.rows, include_inactive_games=include_inactive_games)
+ return self.parser.parse_player_season_box_scores(box_scores=page.playoff_box_scores_table.rows,
+ include_inactive_games=include_inactive_games)
def play_by_play(self, home_team, day, month, year):
add_0_if_needed = lambda s: "0" + s if len(s) == 1 else s
@@ -240,3 +252,22 @@ def search(self, term):
return {
"players": player_results
}
+
+ def player_contracts(self, player_contract_processor: Callable[[PlayerContractData], PlayerContract]) -> None:
+ with requests.get(
+ url=f"{HTTPService.BASE_URL}/contracts/players.html",
+ stream=True,
+
+ ) as response:
+ if not response.ok:
+ raise CouldNotGetPlayerContractData()
+
+ if response.encoding is None:
+ response.encoding = 'utf-8'
+
+ with PlayerContractsPageParser(player_contract_data_processor=player_contract_processor) as p:
+ for chunk in response.iter_content(chunk_size=500, decode_unicode=True):
+ try:
+ p.parse(chunk=chunk)
+ except NothingMoreToParse:
+ break
diff --git a/poetry.lock b/poetry.lock
index d5fa396d..78a67bcb 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,26 @@
-# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
+
+[[package]]
+name = "attrs"
+version = "24.2.0"
+description = "Classes Without Boilerplate"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"},
+ {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"},
+]
+
+[package.dependencies]
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[package.extras]
+benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
[[package]]
name = "babel"
@@ -330,6 +352,26 @@ MarkupSafe = ">=2.0"
[package.extras]
i18n = ["Babel (>=2.7)"]
+[[package]]
+name = "linkify-it-py"
+version = "2.0.3"
+description = "Links recognition library with FULL unicode support."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048"},
+ {file = "linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79"},
+]
+
+[package.dependencies]
+uc-micro-py = "*"
+
+[package.extras]
+benchmark = ["pytest", "pytest-benchmark"]
+dev = ["black", "flake8", "isort", "pre-commit", "pyproject-flake8"]
+doc = ["myst-parser", "sphinx", "sphinx-book-theme"]
+test = ["coverage", "pytest", "pytest-cov"]
+
[[package]]
name = "lxml"
version = "5.2.1"
@@ -518,6 +560,33 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"]
testing = ["coverage", "pyyaml"]
+[[package]]
+name = "markdown-it-py"
+version = "2.2.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"},
+ {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"},
+]
+
+[package.dependencies]
+linkify-it-py = {version = ">=1,<3", optional = true, markers = "extra == \"linkify\""}
+mdit-py-plugins = {version = "*", optional = true, markers = "extra == \"plugins\""}
+mdurl = ">=0.1,<1.0"
+typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
+
+[package.extras]
+benchmarking = ["psutil", "pytest", "pytest-benchmark"]
+code-style = ["pre-commit (>=3.0,<4.0)"]
+compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
+linkify = ["linkify-it-py (>=1,<3)"]
+plugins = ["mdit-py-plugins"]
+profiling = ["gprof2dot"]
+rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
[[package]]
name = "markupsafe"
version = "2.1.5"
@@ -587,6 +656,101 @@ files = [
{file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
]
+[[package]]
+name = "mdit-py-plugins"
+version = "0.3.5"
+description = "Collection of plugins for markdown-it-py"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"},
+ {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=1.0.0,<3.0.0"
+
+[package.extras]
+code-style = ["pre-commit"]
+rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+description = "Markdown URL utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
+ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
+]
+
+[[package]]
+name = "memray"
+version = "1.16.0"
+description = "A memory profiler for Python applications"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "memray-1.16.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:3c2f1611c4cc62fe4308298c3ed5cb4aad591d5bdce2ccb14c732140e3393bab"},
+ {file = "memray-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:933d39b9cd9b4f3a5d78a6e1ce49cd6a07d40e87cd46a2ca084271a4bbca6c31"},
+ {file = "memray-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:43cb231dcaa6927e34d9ea09ee4522c03a65435969acd00b34ccda4df7b08845"},
+ {file = "memray-1.16.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f29c8e7d13669e3165fee6571e55d7215eb094613e5e0e90daef8c1f4ffd08aa"},
+ {file = "memray-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda15dc410410404fdbbfd0e350e7396cc37d95758f5229fc6a9a28bd9c432f9"},
+ {file = "memray-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:164b78a253e15c9bc5a2c8e06930aafde629bb4f466a8af1cf079ecbf02828b7"},
+ {file = "memray-1.16.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:e8a7d5602fe654a77de1847b068fad0e40728fa44f066106c5f4e867f8a09e47"},
+ {file = "memray-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64da3712d57a634bd129c31ba66f8fe7d7f4fa7a08031d6bf79d94ded9411537"},
+ {file = "memray-1.16.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b0674afb6eda2d43e437d95e23391ee7cc5e16cb242d33cdb09927249ed56455"},
+ {file = "memray-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fa7aeb59416ccb41b36e9741ea4e6e16c556ebd1c9e0667bfcf130f6e146475"},
+ {file = "memray-1.16.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a1d173a9243735ec4991d5bc4c7df11ace95a06b4f5db645b645c204d243698"},
+ {file = "memray-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1619f5822712e8f7f96fed581d48ed5038df752596698021b21c305a12582896"},
+ {file = "memray-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afb225cfd65b0589fa44b0f3c422d8740409e32e70871d916cdcc0a17fdb8d57"},
+ {file = "memray-1.16.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:36a259c13ea87e59da241976c8b826c2b500eed1282b26d2b651c5484c509dd6"},
+ {file = "memray-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9ce1a96e50399e8ef1074b2af8fa4e96f2337368282590fdc472f246c3b69663"},
+ {file = "memray-1.16.0-cp312-cp312-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3287ee7f69909850e4af7e09ec3727dbcab1c0fce5bb6a7dcff7ecc4339177f6"},
+ {file = "memray-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8298f96a7a11c0db236dfe9c985e191f2be2db31233e1b246c08d38adc0b2ce1"},
+ {file = "memray-1.16.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c6f6cf50adc9513fb4334005d1302fdc02c5e8c49f4b0fa2d8d7d89ba9e008"},
+ {file = "memray-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01c6f82eea4a0eadde3a20f24ece99bbfd88c1c31ad7ba69b95f337bb12f4c4d"},
+ {file = "memray-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:50f27638f6eb9e088648cd6453559b169256b01185c8a9be17e8e07e6084df35"},
+ {file = "memray-1.16.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:3c5cdd0d528fc13c6f9e88ab8a96a78fb34dc446420dc744e7681d3592f9aa26"},
+ {file = "memray-1.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dacd4cb18854ee2a759e594f42c8c56659c883601fa316a47d6ad965c564fe70"},
+ {file = "memray-1.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:309b2ccebe739cc55d66ede3c0e1331ed515271d0f889d36275290e761b260ee"},
+ {file = "memray-1.16.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30dd96211335c69d6787216df25171075092348e02cd68072955fc918fbc81c9"},
+ {file = "memray-1.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cc055e43502ed8e6b0d2b8196658d05b86cfa812495aa5fe168eafd6cd1103"},
+ {file = "memray-1.16.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6edabaab7c7caab935c4a5b12b2364c1b856efdf151c5de59360095bcc9c271a"},
+ {file = "memray-1.16.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cbaa2a375434067eb036ab1db00b1fc6a0d81402439322aa388108280fa94be"},
+ {file = "memray-1.16.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93befe46d6e6fd8b4ba4f1ddf355260513a41908a1656e76f465d8c2639459df"},
+ {file = "memray-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0adef6b5b26d3852dd7648f7213aa3fc16b1ca541f6678fe2136bca5ff506e85"},
+ {file = "memray-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0efb99b4245954e2da5df23593f0e16b410a1de3e24c933c3985db9c90837d8a"},
+ {file = "memray-1.16.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:cc02c9eaca4ff025d0882625777edb5e363d7c456106e7807a146084be916032"},
+ {file = "memray-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93a5d28786bdd49dd42b7c80c0e43b41066f3cfe6b9e66be3015aa3660c8848e"},
+ {file = "memray-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:53ac30be89c8b0fdfd74850089387da4a5c04ac2d26d66f74bcb43035c9532b1"},
+ {file = "memray-1.16.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:69c6c7f39b6c237d66f993150758c1cf530ce3ef9c9f647b8fc536bf869ed19d"},
+ {file = "memray-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89bb7d72d63367aff4933453bbb16e63a0a843a31111235b03505c64434d6e74"},
+ {file = "memray-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a577dbc0a41b800d46a66ba545eadb2e5a1cc136ae22603570d57374dbfc320"},
+ {file = "memray-1.16.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:065d608aed0a01046f6d59afb8ec5aff564b7d6c2608a9dc4fccecfd25c01b60"},
+ {file = "memray-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:86adadabcc59b528e101167ea34bc867eafa1bf998e24792ebf3762bec1152f4"},
+ {file = "memray-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d39567c489291d70e35afe60833b40bdf5cbce4ee25796c564d65a9d6db42f5f"},
+ {file = "memray-1.16.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:637578f8b202f9eb4629a27bfb89b9d8c75046965afc616e25dce0dcec9727c0"},
+ {file = "memray-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dae47eedf62a3965653358b32a59b72e9069e3bf67d3df08896563c968e02801"},
+ {file = "memray-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5c8a1a3a18e5bed9c5927a708f964923779d93276399adeed7c4b9d96df03a1"},
+ {file = "memray-1.16.0.tar.gz", hash = "sha256:57319f74333a58a9b3d5fba411b0bff3f2974a37e362a09a577e7c6fe1d29a36"},
+]
+
+[package.dependencies]
+jinja2 = ">=2.9"
+rich = ">=11.2.0"
+textual = ">=0.41.0"
+typing_extensions = {version = "*", markers = "python_version < \"3.8.0\""}
+
+[package.extras]
+benchmark = ["asv"]
+dev = ["Cython", "IPython", "asv", "black", "bump2version", "check-manifest", "flake8", "furo", "greenlet", "ipython", "isort", "mypy", "packaging", "pytest", "pytest-cov", "pytest-textual-snapshot", "setuptools", "sphinx", "sphinx-argparse", "textual (>=0.43,!=0.65.2,!=0.66)", "towncrier"]
+docs = ["IPython", "bump2version", "furo", "sphinx", "sphinx-argparse", "towncrier"]
+lint = ["black", "check-manifest", "flake8", "isort", "mypy"]
+test = ["Cython", "greenlet", "ipython", "packaging", "pytest", "pytest-cov", "pytest-textual-snapshot", "setuptools", "textual (>=0.43,!=0.65.2,!=0.66)"]
+
[[package]]
name = "mergedeep"
version = "1.3.4"
@@ -733,6 +897,20 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
+[[package]]
+name = "price-parser"
+version = "0.4.0"
+description = "Extract price and currency from a raw string"
+optional = false
+python-versions = "*"
+files = [
+ {file = "price_parser-0.4.0-py3-none-any.whl", hash = "sha256:940b5844dc96ce6aeccb29d0607bee30759f1a04e45d7886dd3c93f32b7cac70"},
+ {file = "price_parser-0.4.0.tar.gz", hash = "sha256:c11a88b64cc0a42b3f8f384adb4cadd1106df214c3a47c3fa314899cf3a609f7"},
+]
+
+[package.dependencies]
+attrs = ">=17.3.0"
+
[[package]]
name = "pygments"
version = "2.17.2"
@@ -839,7 +1017,6 @@ files = [
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
- {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
{file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
{file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
{file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
@@ -1023,6 +1200,25 @@ requests = ">=2.22,<3"
[package.extras]
fixture = ["fixtures"]
+[[package]]
+name = "rich"
+version = "13.8.1"
+description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"},
+ {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=2.2.0"
+pygments = ">=2.13.0,<3.0.0"
+typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""}
+
+[package.extras]
+jupyter = ["ipywidgets (>=7.5.1,<9)"]
+
[[package]]
name = "six"
version = "1.16.0"
@@ -1034,6 +1230,26 @@ files = [
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
+[[package]]
+name = "textual"
+version = "0.43.2"
+description = "Modern Text User Interface framework"
+optional = false
+python-versions = ">=3.7,<4.0"
+files = [
+ {file = "textual-0.43.2-py3-none-any.whl", hash = "sha256:b6a3340738e3c2223049bb6a4fbce059e4f942a4480b8fd146b816ce5228a8ec"},
+ {file = "textual-0.43.2.tar.gz", hash = "sha256:7f4f84f1ae753aa39290659dc0bb0aab06abb7e37aa3041349c86940698c6b54"},
+]
+
+[package.dependencies]
+importlib-metadata = ">=4.11.3"
+markdown-it-py = {version = ">=2.1.0", extras = ["linkify", "plugins"]}
+rich = ">=13.3.3"
+typing-extensions = ">=4.4.0,<5.0.0"
+
+[package.extras]
+syntax = ["tree-sitter (>=0.20.1,<0.21.0)", "tree_sitter_languages (>=1.7.0)"]
+
[[package]]
name = "tomli"
version = "2.0.1"
@@ -1056,6 +1272,20 @@ files = [
{file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
]
+[[package]]
+name = "uc-micro-py"
+version = "1.0.3"
+description = "Micro subset of unicode data files for linkify-it-py projects."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a"},
+ {file = "uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5"},
+]
+
+[package.extras]
+test = ["coverage", "pytest", "pytest-cov"]
+
[[package]]
name = "urllib3"
version = "2.0.7"
@@ -1130,4 +1360,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more
[metadata]
lock-version = "2.0"
python-versions = "^3.7"
-content-hash = "7be7eb2ae909b5cd638c569cbcb05e1905bcb9babcffa835438d1916d28cdc70"
+content-hash = "e2b4aaeebbda098379620c81932ea511a1046be3abb722d460d098b64d06b4b0"
diff --git a/pyproject.toml b/pyproject.toml
index 52ad1b36..7d7b1b96 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,6 +17,7 @@ python = "^3.7"
lxml = "^5.1.0"
pytz = "^2024.1"
requests = "^2.31.0"
+price-parser = "^0.4.0"
[tool.poetry.dev-dependencies]
codecov = "^2.1.13"
@@ -31,6 +32,9 @@ requests-mock = "^1.12.1"
issues = "https://github.com/jaebradley/basketball_reference_web_scraper/issues"
pull_requests = "https://github.com/jaebradley/basketball_reference_web_scraper/pull_requests"
+[tool.poetry.group.dev.dependencies]
+memray = "^1.16.0"
+
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
diff --git a/tests/integration/client/test_player_contracts.py b/tests/integration/client/test_player_contracts.py
new file mode 100644
index 00000000..40355205
--- /dev/null
+++ b/tests/integration/client/test_player_contracts.py
@@ -0,0 +1,23 @@
+import os
+from unittest import TestCase
+
+import requests_mock
+
+from basketball_reference_web_scraper.client import player_contracts
+
+
+class TestPlayerContracts(TestCase):
+ def setUp(self):
+ with open(os.path.join(
+ os.path.dirname(__file__),
+ "../files/contracts/2025/03/07.html"
+ ), 'r') as file_input: self._html = file_input.read()
+
+ @requests_mock.Mocker()
+ def test_player_contracts(self, m):
+ m.get("https://www.basketball-reference.com/contracts/players.html",
+ text=self._html,
+ status_code=200)
+ data = []
+ player_contracts(player_contract_processor=lambda player_contract: data.append(player_contract))
+ assert 496 == len(data)
diff --git a/tests/integration/files/contracts/2025/03/07.html b/tests/integration/files/contracts/2025/03/07.html
new file mode 100644
index 00000000..bf0b6cc0
--- /dev/null
+++ b/tests/integration/files/contracts/2025/03/07.html
@@ -0,0 +1,2192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2024-25 NBA Player Contracts | Basketball-Reference.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
2024-25 NBA Player Contracts
+
+
+
+
+
+
+
+
+
+
+
2024-25 Salary Cap: $140,588,000
+(Salary Cap History)
+
Average Salary: $10,398,834
+Median Salary: $4,935,960
+
Largest Guarantee: Jaylen Brown, BOS ($285,393,640)
+
+
+
+
+
+
+
+
+
Color Key: Player Option, Team Option
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 496 Contracts Table
+
+
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+
+1 | Stephen Curry | GSW | $55,761,216 | $59,606,817 | $62,587,158 | | | | $177,955,191 |
+2 | Joel Embiid | PHI | $51,415,938 | $55,224,526 | $57,985,752 | $62,624,612 | $67,263,472 | | $227,250,828 |
+3 | Nikola Jokić | DEN | $51,415,938 | $55,224,526 | $59,033,114 | $62,841,702 | | | $165,673,578 |
+4 | Kevin Durant | PHO | $51,179,021 | $54,708,609 | | | | | $105,887,630 |
+5 | Bradley Beal | PHO | $50,203,930 | $53,666,270 | $57,128,610 | | | | $103,870,200 |
+6 | Jaylen Brown | BOS | $49,205,800 | $53,142,264 | $57,078,728 | $61,015,192 | $64,951,656 | | $285,393,640 |
+7 | Devin Booker | PHO | $49,205,800 | $53,142,264 | $57,078,728 | $61,015,192 | | | $220,441,984 |
+8 | Karl-Anthony Towns | NYK | $49,205,800 | $53,142,264 | $57,078,728 | $61,015,192 | | | $159,426,792 |
+9 | Paul George | PHI | $49,205,800 | $51,666,090 | $54,126,380 | $56,586,670 | | | $154,998,270 |
+10 | Kawhi Leonard | LAC | $49,205,800 | $50,000,000 | $50,300,000 | | | | $149,505,800 |
+11 | Jimmy Butler | GSW | $48,798,677 | $54,126,450 | $56,832,773 | | | | $159,757,900 |
+12 | Giannis Antetokounmpo | MIL | $48,787,676 | $54,126,450 | $58,456,566 | $62,786,682 | | | $161,370,692 |
+13 | Damian Lillard | MIL | $48,787,676 | $54,126,450 | $58,456,566 | | | | $102,914,126 |
+14 | LeBron James | LAL | $48,728,845 | $52,627,153 | | | | | $48,728,845 |
+15 | Zach LaVine | SAC | $44,531,940 | $47,499,660 | $48,967,380 | | | | $92,031,600 |
+16 | Rudy Gobert | MIN | $43,827,586 | $35,000,000 | $36,500,000 | $38,000,000 | | | $115,327,586 |
+17 | Anthony Davis | DAL | $43,219,440 | $54,126,450 | $58,456,566 | $62,786,682 | | | $155,802,456 |
+18 | Luka Dončić | LAL | $43,031,940 | $45,999,660 | $48,967,380 | | | | $89,031,600 |
+19 | Trae Young | ATL | $43,031,940 | $45,999,660 | $48,967,380 | | | | $89,031,600 |
+20 | Fred VanVleet | HOU | $42,846,615 | $44,886,930 | | | | | $42,846,615 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 21 | Anthony Edwards | MIN | $42,176,400 | $45,550,512 | $48,924,624 | $52,298,736 | $55,672,848 | | $244,623,120 |
+22 | Tyrese Haliburton | IND | $42,176,400 | $45,550,512 | $48,924,624 | $52,298,736 | $55,672,848 | | $244,623,120 |
+23 | Lauri Markkanen | UTA | $42,176,400 | $46,394,100 | $46,113,154 | $49,824,681 | $53,536,209 | | $238,044,544 |
+24 | Pascal Siakam | IND | $42,176,400 | $45,550,512 | $48,924,624 | $52,298,736 | | | $188,950,272 |
+25 | Kyrie Irving | DAL | $41,000,000 | $43,962,963 | | | | | $41,000,000 |
+26 | Domantas Sabonis | SAC | $40,500,000 | $43,636,000 | $46,772,000 | $49,908,000 | | | $180,816,000 |
+27 | Ben Simmons | BRK | $40,011,909 | | | | | | $39,256,083 |
+28 | Zion Williamson | NOP | $36,725,670 | $39,446,090 | $42,166,510 | $44,886,930 | | | $163,225,200 |
+29 | Ja Morant | MEM | $36,725,670 | $39,446,090 | $42,166,510 | $44,886,930 | | | $163,225,200 |
+30 | Darius Garland | CLE | $36,725,670 | $39,446,090 | $42,166,510 | $44,886,930 | | | $163,225,200 |
+31 | OG Anunoby | NYK | $36,637,932 | $39,568,966 | $42,500,000 | $45,431,034 | $48,362,068 | | $164,137,932 |
+32 | Jamal Murray | DEN | $36,016,200 | $46,394,100 | $50,105,628 | $53,817,156 | $57,528,684 | | $243,861,768 |
+33 | Brandon Ingram | TOR | $36,016,200 | $38,095,238 | $40,000,000 | $41,904,762 | | | $114,111,438 |
+34 | Shai Gilgeous-Alexander | OKC | $35,859,950 | $38,333,050 | $40,806,150 | | | | $114,999,150 |
+35 | Michael Porter Jr. | DEN | $35,859,950 | $38,333,050 | $40,806,150 | | | | $86,193,000 |
+36 | Donovan Mitchell | CLE | $35,410,310 | $46,394,100 | $50,105,628 | $53,817,156 | | | $131,910,038 |
+37 | Tyrese Maxey | PHI | $35,147,000 | $37,958,760 | $40,770,520 | $43,582,280 | $46,394,040 | | $203,852,600 |
+38 | LaMelo Ball | CHO | $35,147,000 | $37,958,760 | $40,770,520 | $43,582,280 | $46,394,040 | | $203,852,600 |
+39 | Jayson Tatum | BOS | $34,848,340 | $54,126,450 | $58,456,566 | $62,786,682 | $67,116,798 | $71,446,914 | $277,334,836 |
+40 | Bam Adebayo | MIA | $34,848,340 | $37,096,620 | $48,713,700 | $52,610,796 | $56,507,892 | | $173,269,456 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 41 | De'Aaron Fox | SAS | $34,848,340 | $37,096,620 | | | | | $71,944,960 |
+42 | Desmond Bane | MEM | $34,005,250 | $36,725,670 | $39,446,090 | $42,166,510 | $44,886,930 | | $197,230,450 |
+43 | Deandre Ayton | POR | $34,005,126 | $35,550,814 | | | | | $69,555,940 |
+44 | James Harden | LAC | $33,653,846 | $36,346,154 | | | | | $33,653,846 |
+45 | CJ McCollum | NOP | $33,333,333 | $30,666,666 | | | | | $63,999,999 |
+46 | Julius Randle | MIN | $33,073,920 | $30,935,520 | | | | | $33,073,920 |
+47 | Immanuel Quickley | TOR | $32,500,000 | $32,500,000 | $32,500,000 | $32,500,000 | $32,500,000 | | $162,500,000 |
+48 | Khris Middleton | WAS | $31,000,000 | $33,296,296 | | | | | $31,000,000 |
+49 | Jrue Holiday | BOS | $30,000,000 | $32,400,000 | $34,800,000 | $37,200,000 | | | $97,200,000 |
+50 | Isaiah Hartenstein | OKC | $30,000,000 | $28,500,000 | $28,500,000 | | | | $58,500,000 |
+51 | Jerami Grant | POR | $29,793,104 | $32,000,001 | $34,206,898 | $36,413,790 | | | $96,000,003 |
+52 | Jordan Poole | WAS | $29,651,786 | $31,848,215 | $34,044,642 | | | | $95,544,643 |
+53 | Dejounte Murray | NOP | $29,517,135 | $31,557,103 | $33,597,072 | $31,619,506 | | | $94,671,310 |
+54 | Devin Vassell | SAS | $29,347,826 | $27,000,000 | $27,000,000 | $24,652,174 | $27,000,000 | | $135,000,000 |
+55 | Kristaps Porziņģis | BOS | $29,268,293 | $30,731,707 | | | | | $60,000,000 |
+56 | Tyler Herro | MIA | $29,000,000 | $31,000,000 | $33,000,000 | | | | $93,000,000 |
+57 | Nic Claxton | BRK | $27,556,817 | $25,352,272 | $23,147,727 | $20,943,184 | | | $97,000,000 |
+58 | Miles Bridges | CHO | $27,173,913 | $25,000,000 | $22,826,087 | | | | $75,000,000 |
+59 | John Collins | UTA | $26,580,000 | $26,580,000 | | | | | $26,580,000 |
+60 | Andrew Wiggins | MIA | $26,276,786 | $28,223,215 | $30,169,644 | | | | $54,500,001 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 61 | Anfernee Simons | POR | $25,892,857 | $27,678,571 | | | | | $53,571,428 |
+62 | RJ Barrett | TOR | $25,794,643 | $27,705,357 | $29,616,071 | | | | $83,116,071 |
+63 | Tobias Harris | DET | $25,365,854 | $26,634,146 | | | | | $52,000,000 |
+64 | Jaren Jackson Jr. | MEM | $25,257,798 | $23,413,395 | | | | | $48,671,193 |
+65 | Jonathan Isaac | ORL | $25,000,000 | $15,000,000 | $14,500,000 | $14,500,000 | $15,000,000 | | $69,000,000 |
+66 | Jalen Brunson | NYK | $24,960,001 | $34,944,001 | $37,739,521 | $40,535,041 | $43,330,561 | | $138,178,564 |
+67 | Terry Rozier | MIA | $24,924,126 | $26,643,031 | | | | | $51,567,157 |
+68 | Kyle Kuzma | MIL | $24,456,061 | $22,410,605 | $20,345,152 | | | | $67,211,818 |
+69 | Draymond Green | GSW | $24,107,143 | $25,892,857 | $27,678,571 | | | | $77,678,571 |
+70 | DeMar DeRozan | SAC | $23,400,000 | $24,570,000 | $25,740,000 | | | | $47,970,000 |
+71 | Mikal Bridges | NYK | $23,300,000 | $24,900,000 | | | | | $48,200,000 |
+72 | Jaden McDaniels | MIN | $23,017,242 | $24,858,622 | $26,700,001 | $28,541,380 | $30,382,755 | | $133,500,000 |
+73 | Bruce Brown | NOP | $23,000,000 | | | | | | $23,000,000 |
+74 | Brook Lopez | MIL | $23,000,000 | | | | | | $23,000,000 |
+75 | Aaron Gordon | DEN | $22,841,455 | $22,841,455 | $31,978,037 | $34,536,280 | $37,094,523 | | $112,197,227 |
+76 | Kentavious Caldwell-Pope | ORL | $22,757,000 | $21,621,500 | $21,621,500 | | | | $44,378,500 |
+77 | Cameron Johnson | BRK | $22,500,000 | $20,543,478 | $22,500,000 | | | | $65,543,478 |
+78 | Malcolm Brogdon | WAS | $22,500,000 | | | | | | $22,500,000 |
+79 | Clint Capela | ATL | $22,265,280 | | | | | | $22,265,280 |
+80 | Dillon Brooks | HOU | $22,255,493 | $21,124,110 | $19,992,727 | | | | $63,372,330 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 81 | De'Andre Hunter | CLE | $21,696,429 | $23,303,571 | $24,910,714 | | | | $69,910,714 |
+82 | Lonzo Ball | CHI | $21,395,348 | $10,000,000 | $10,000,000 | | | | $31,395,348 |
+83 | Marcus Smart | WAS | $20,210,284 | $21,586,855 | | | | | $41,797,139 |
+84 | Derrick White | BOS | $20,071,429 | $28,100,000 | $30,348,000 | $32,596,000 | $34,844,000 | | $111,115,429 |
+85 | Jarrett Allen | CLE | $20,000,000 | $20,000,000 | $28,000,000 | $30,240,000 | $32,480,000 | | $130,720,000 |
+86 | Nikola Vučević | CHI | $20,000,000 | $21,481,481 | | | | | $41,481,481 |
+87 | Myles Turner | IND | $19,928,500 | | | | | | $19,928,500 |
+88 | Jakob Poeltl | TOR | $19,500,000 | $19,500,000 | $19,500,000 | | | | $39,000,000 |
+89 | Duncan Robinson | MIA | $19,406,000 | $19,888,000 | | | | | $29,294,000 |
+90 | Norman Powell | LAC | $19,241,379 | $20,482,758 | | | | | $39,724,137 |
+91 | Bojan Bogdanović | BRK | $19,032,850 | | | | | | $19,032,850 |
+92 | Keldon Johnson | SAS | $19,000,000 | $17,500,000 | $17,500,000 | | | | $54,000,000 |
+93 | D'Angelo Russell | BRK | $18,692,307 | | | | | | $18,692,307 |
+94 | Collin Sexton | UTA | $18,350,000 | $19,175,000 | | | | | $37,525,000 |
+95 | Josh Hart | NYK | $18,144,000 | $19,472,240 | $20,923,760 | $22,375,280 | | | $58,540,000 |
+96 | Jusuf Nurkić | CHO | $18,125,000 | $19,375,000 | | | | | $37,500,000 |
+97 | Patrick Williams | CHI | $18,000,000 | $18,000,000 | $18,000,000 | $18,000,000 | $18,000,000 | | $72,000,000 |
+98 | Harrison Barnes | SAS | $18,000,000 | $19,000,000 | | | | | $37,000,000 |
+99 | Malik Monk | SAC | $17,405,203 | $18,797,619 | $20,190,035 | $21,582,451 | | | $56,392,857 |
+100 | Bogdan Bogdanović | LAC | $17,260,000 | $16,020,000 | $16,020,000 | | | | $33,280,000 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 101 | Rui Hachimura | LAL | $17,000,000 | $18,259,259 | | | | | $35,259,259 |
+102 | Kevin Huerter | CHI | $16,830,357 | $17,991,071 | | | | | $34,821,428 |
+103 | Zach Collins | CHI | $16,741,200 | $18,080,496 | | | | | $34,821,696 |
+104 | Caris LeVert | ATL | $16,615,384 | | | | | | $16,615,384 |
+105 | Luguentz Dort | OKC | $16,500,000 | $17,722,222 | $17,722,222 | | | | $34,222,222 |
+106 | Tim Hardaway Jr. | DET | $16,193,183 | | | | | | $16,193,183 |
+107 | Klay Thompson | DAL | $15,873,016 | $16,666,667 | $17,460,317 | | | | $50,000,000 |
+108 | Deni Avdija | POR | $15,625,000 | $14,375,000 | $13,125,000 | $11,875,000 | | | $55,000,000 |
+109 | Grayson Allen | PHO | $15,625,000 | $16,875,000 | $18,125,000 | $19,375,000 | | | $50,625,000 |
+110 | P.J. Washington | DAL | $15,500,000 | $14,152,174 | | | | | $29,652,174 |
+111 | Max Strus | CLE | $15,212,068 | $15,936,452 | $16,660,836 | | | | $47,809,356 |
+112 | Isaiah Stewart | DET | $15,000,000 | $15,000,000 | $15,000,000 | $15,000,000 | | | $45,000,000 |
+113 | Dorian Finney-Smith | LAL | $14,924,167 | $15,378,480 | | | | | $14,924,167 |
+114 | Mitchell Robinson | NYK | $14,318,182 | $12,954,546 | | | | | $27,272,728 |
+115 | Jordan Clarkson | UTA | $14,092,577 | $14,285,714 | | | | | $28,378,291 |
+116 | Onyeka Okongwu | ATL | $14,000,000 | $15,000,000 | $16,120,000 | $16,880,000 | | | $62,000,000 |
+117 | Naz Reid | MIN | $13,986,432 | $15,022,464 | | | | | $13,986,432 |
+118 | Cade Cunningham | DET | $13,940,809 | $38,661,750 | $41,754,690 | $44,847,630 | $47,940,570 | $51,033,510 | $238,178,959 |
+119 | Daniel Gafford | DAL | $13,394,160 | $14,386,320 | | | | | $27,780,480 |
+120 | Grant Williams | CHO | $13,025,250 | $13,645,500 | $14,265,750 | | | | $40,936,500 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 121 | Dennis Schröder | DET | $13,025,250 | | | | | | $13,025,250 |
+122 | Isaiah Joe | OKC | $12,991,650 | $12,362,338 | $11,323,006 | $11,323,006 | | | $36,676,994 |
+123 | Herbert Jones | NOP | $12,976,362 | $13,937,574 | $14,898,786 | | | | $41,812,722 |
+124 | Austin Reaves | LAL | $12,976,362 | $13,937,574 | $14,898,786 | | | | $26,913,936 |
+125 | Obi Toppin | IND | $12,975,000 | $14,000,000 | $15,000,000 | $16,025,000 | | | $58,000,000 |
+126 | Cole Anthony | ORL | $12,900,000 | $13,100,000 | $13,100,000 | | | | $26,000,000 |
+127 | De'Anthony Melton | BRK | $12,822,000 | | | | | | $12,822,000 |
+128 | Kelly Olynyk | NOP | $12,804,878 | $13,445,122 | | | | | $26,250,000 |
+129 | Victor Wembanyama | SAS | $12,768,960 | $13,376,880 | $16,868,246 | | | | $26,145,840 |
+130 | Josh Green | CHO | $12,654,321 | $13,666,667 | $14,679,012 | | | | $41,000,000 |
+131 | Richaun Holmes | WAS | $12,648,321 | $13,280,737 | | | | | $12,648,321 |
+132 | Steven Adams | HOU | $12,600,000 | | | | | | $12,600,000 |
+133 | Bobby Portis | MIL | $12,578,286 | $13,445,754 | | | | | $12,578,286 |
+134 | Zaccharie Risacher | ATL | $12,569,040 | $13,197,720 | $13,826,040 | $17,434,637 | | | $25,766,760 |
+135 | Brandon Clarke | MEM | $12,500,000 | $12,500,000 | $12,500,000 | | | | $37,500,000 |
+136 | Marvin Bagley III | MEM | $12,500,000 | | | | | | $12,500,000 |
+137 | Jalen Green | HOU | $12,483,048 | $33,333,333 | $36,000,000 | $36,000,000 | | | $81,816,381 |
+138 | Robert Williams | POR | $12,428,571 | $13,285,713 | | | | | $25,714,284 |
+139 | Paolo Banchero | ORL | $12,160,800 | $15,334,769 | | | | | $27,495,569 |
+140 | Coby White | CHI | $12,000,000 | $12,888,889 | | | | | $24,888,889 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 141 | Wendell Carter Jr. | ORL | $11,950,000 | $10,850,000 | $18,102,000 | $19,550,160 | $20,998,320 | | $60,452,160 |
+142 | Ivica Zubac | LAC | $11,743,210 | $18,102,000 | $19,550,160 | $20,998,320 | | | $70,393,690 |
+143 | P.J. Tucker | TOR | $11,539,000 | | | | | | $11,539,000 |
+144 | Donte DiVincenzo | MIN | $11,445,000 | $11,990,000 | $12,535,000 | | | | $35,970,000 |
+145 | Brandon Miller | CHO | $11,424,600 | $11,968,800 | $15,104,626 | | | | $23,393,400 |
+146 | Terance Mann | ATL | $11,423,077 | $15,500,000 | $15,500,000 | $16,000,000 | | | $58,423,077 |
+147 | Alex Sarr | WAS | $11,245,680 | $11,808,240 | $12,370,680 | $15,611,798 | | | $23,053,920 |
+148 | Evan Mobley | CLE | $11,227,657 | $38,661,750 | $41,754,690 | $44,847,630 | $47,940,570 | $51,033,510 | $235,465,807 |
+149 | Larry Nance Jr. | ATL | $11,205,000 | | | | | | $11,205,000 |
+150 | Matisse Thybulle | POR | $11,025,000 | $11,550,000 | | | | | $11,025,000 |
+151 | Aaron Nesmith | IND | $11,000,000 | $11,000,000 | $11,000,000 | | | | $33,000,000 |
+152 | Gabe Vincent | LAL | $11,000,000 | $11,500,000 | | | | | $22,500,000 |
+153 | Maxi Kleber | LAL | $11,000,000 | $11,000,000 | | | | | $22,000,000 |
+154 | Moritz Wagner | ORL | $11,000,000 | $11,000,000 | | | | | $11,000,000 |
+155 | Chet Holmgren | OKC | $10,880,640 | $13,731,368 | | | | | $24,612,008 |
+156 | Chris Boucher | TOR | $10,810,000 | | | | | | $10,810,000 |
+157 | Jarred Vanderbilt | LAL | $10,714,286 | $11,571,429 | $12,428,571 | $13,285,714 | | | $34,714,286 |
+158 | Aaron Wiggins | OKC | $10,514,017 | $9,672,897 | $8,831,776 | $7,990,655 | $7,990,655 | | $45,000,000 |
+159 | Chris Paul | SAS | $10,460,000 | | | | | | $10,460,000 |
+160 | Scoot Henderson | POR | $10,259,160 | $10,748,040 | $13,585,523 | | | | $21,007,200 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 161 | Isaac Okoro | CLE | $10,185,186 | $11,000,000 | $11,814,814 | | | | $33,000,000 |
+162 | Scottie Barnes | TOR | $10,130,980 | $38,661,750 | $41,754,690 | $44,847,630 | $47,940,570 | $51,033,510 | $234,369,130 |
+163 | Reed Sheppard | HOU | $10,098,960 | $10,603,560 | $11,108,880 | $14,041,625 | | | $20,702,520 |
+164 | Mike Conley | MIN | $9,975,962 | $10,774,038 | | | | | $20,750,000 |
+165 | Jonas Valančiūnas | SAC | $9,900,000 | $10,395,000 | $10,000,000 | | | | $20,295,000 |
+166 | Alex Caruso | OKC | $9,890,000 | $18,102,000 | $19,550,160 | $20,998,320 | $22,446,480 | | $90,986,960 |
+167 | Jabari Smith Jr. | HOU | $9,770,880 | $12,350,392 | | | | | $22,121,272 |
+168 | Derrick Jones Jr. | LAC | $9,523,810 | $10,000,000 | $10,476,190 | | | | $30,000,000 |
+169 | Al Horford | BOS | $9,500,000 | | | | | | $9,500,000 |
+170 | Pat Connaughton | MIL | $9,423,869 | $9,423,869 | | | | | $9,423,869 |
+171 | Royce O'Neale | PHO | $9,375,000 | $10,125,000 | $10,875,000 | $11,625,000 | | | $42,000,000 |
+172 | T.J. McConnell | IND | $9,300,000 | $10,200,000 | $11,000,000 | $11,800,000 | $11,800,000 | | $42,300,000 |
+173 | Luke Kennard | MEM | $9,250,000 | | | | | | $9,250,000 |
+174 | Amen Thompson | HOU | $9,249,960 | $9,690,600 | $12,258,609 | | | | $18,940,560 |
+175 | Jalen Suggs | ORL | $9,188,385 | $35,000,000 | $32,400,000 | $29,600,000 | $26,800,000 | $26,700,000 | $132,988,385 |
+176 | Caleb Martin | DAL | $9,186,594 | $9,594,044 | $10,001,493 | $9,371,351 | | | $28,782,131 |
+177 | Gary Payton II | GSW | $9,130,000 | | | | | | $9,130,000 |
+178 | Stephon Castle | SAS | $9,105,120 | $9,560,520 | $10,015,920 | $12,670,139 | | | $18,665,640 |
+179 | Tre Jones | CHI | $9,104,167 | | | | | | $9,104,167 |
+180 | Goga Bitadze | ORL | $9,057,971 | $8,333,333 | $7,608,696 | | | | $25,000,000 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 181 | Zeke Nnaji | DEN | $8,888,889 | $8,177,778 | $7,466,667 | $7,466,667 | | | $24,533,334 |
+182 | Keegan Murray | SAC | $8,809,560 | $11,144,093 | | | | | $19,953,653 |
+183 | Buddy Hield | GSW | $8,780,488 | $9,219,512 | $9,658,536 | $10,097,560 | | | $27,658,536 |
+184 | Kyle Anderson | MIA | $8,780,488 | $9,219,512 | $9,658,536 | | | | $18,000,000 |
+185 | Naji Marshall | DAL | $8,571,429 | $9,000,000 | $9,428,571 | | | | $27,000,000 |
+186 | Jalen Smith | CHI | $8,571,429 | $9,000,000 | $9,428,571 | | | | $27,000,000 |
+187 | Georges Niang | ATL | $8,500,000 | $8,200,000 | | | | | $16,700,000 |
+188 | Ausar Thompson | DET | $8,376,000 | $8,775,000 | $11,117,925 | | | | $17,151,000 |
+189 | Josh Giddey | CHI | $8,352,367 | | | | | | $8,352,367 |
+190 | Josh Okogie | CHO | $8,250,000 | $7,750,000 | | | | | $8,250,000 |
+191 | Ron Holland | DET | $8,245,320 | $8,657,280 | $9,069,600 | $11,491,183 | | | $16,902,600 |
+192 | Cody Martin | PHO | $8,120,000 | $8,680,000 | | | | | $8,120,000 |
+193 | Jock Landale | HOU | $8,000,000 | $8,000,000 | $8,000,000 | | | | $16,000,000 |
+194 | Trey Lyles | SAC | $8,000,000 | | | | | | $8,000,000 |
+195 | Jeff Green | HOU | $8,000,000 | | | | | | $8,000,000 |
+196 | Kevon Looney | GSW | $8,000,000 | | | | | | $8,000,000 |
+197 | Kelly Oubre Jr. | PHI | $7,983,000 | $8,382,150 | | | | | $7,983,000 |
+198 | Jaden Ivey | DET | $7,977,240 | $10,107,163 | | | | | $18,084,403 |
+199 | KJ Martin | UTA | $7,975,000 | $8,025,000 | | | | | $7,975,000 |
+200 | Vasilije Micić | PHO | $7,723,000 | $8,109,150 | | | | | $7,723,000 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 201 | Simone Fontecchio | DET | $7,692,308 | $8,307,692 | | | | | $16,000,000 |
+202 | Jonathan Kuminga | GSW | $7,636,307 | | | | | | $7,636,307 |
+203 | Anthony Black | ORL | $7,607,760 | $7,970,280 | $10,106,316 | | | | $15,578,040 |
+204 | Jae'Sean Tate | HOU | $7,565,217 | | | | | | $7,565,217 |
+205 | Gary Harris | ORL | $7,500,000 | $7,500,000 | | | | | $7,500,000 |
+206 | Tidjane Salaün | CHO | $7,488,720 | $7,863,240 | $8,237,880 | $10,445,633 | | | $15,351,960 |
+207 | Bennedict Mathurin | IND | $7,245,720 | $9,187,573 | | | | | $16,433,293 |
+208 | Max Christie | DAL | $7,142,857 | $7,714,286 | $8,285,714 | $8,857,143 | | | $23,142,857 |
+209 | Franz Wagner | ORL | $7,007,092 | $38,661,750 | $41,754,690 | $44,847,630 | $47,940,570 | $51,033,510 | $231,245,242 |
+210 | Ayo Dosunmu | CHI | $7,000,000 | $7,518,518 | | | | | $14,518,518 |
+211 | Bilal Coulibaly | WAS | $6,945,240 | $7,275,600 | $9,240,012 | | | | $14,220,840 |
+212 | Donovan Clingan | POR | $6,836,400 | $7,178,400 | $7,519,920 | $9,550,298 | | | $14,014,800 |
+213 | Payton Pritchard | BOS | $6,696,429 | $7,232,143 | $7,767,857 | $8,303,571 | | | $30,000,000 |
+214 | Kenrich Williams | OKC | $6,669,000 | $7,163,000 | $7,163,000 | | | | $13,832,000 |
+215 | Shaedon Sharpe | POR | $6,614,160 | $8,399,983 | | | | | $15,014,143 |
+216 | Jevon Carter | CHI | $6,500,000 | $6,809,524 | | | | | $6,500,000 |
+217 | Davion Mitchell | MIA | $6,451,077 | | | | | | $6,451,077 |
+218 | Saddiq Bey | WAS | $6,440,678 | $6,118,644 | $6,440,678 | | | | $19,000,000 |
+219 | Jarace Walker | IND | $6,362,520 | $6,665,520 | $8,478,542 | | | | $13,028,040 |
+220 | Rob Dillingham | MIN | $6,262,920 | $6,576,120 | $6,889,320 | $8,763,216 | | | $12,839,040 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 221 | Dean Wade | CLE | $6,166,667 | $6,623,456 | | | | | $6,166,667 |
+222 | John Konchar | MEM | $6,165,000 | $6,165,000 | $6,165,000 | | | | $18,495,000 |
+223 | Ziaire Williams | BRK | $6,133,005 | | | | | | $6,133,005 |
+224 | Dyson Daniels | ATL | $6,059,520 | $7,707,709 | | | | | $13,767,229 |
+225 | Precious Achiuwa | NYK | $6,000,000 | | | | | | $6,000,000 |
+226 | Malik Beasley | DET | $6,000,000 | | | | | | $6,000,000 |
+227 | Chris Duarte | CHI | $5,893,768 | | | | | | $5,893,768 |
+228 | Taylor Hendricks | UTA | $5,848,680 | $6,127,080 | $7,805,900 | | | | $11,975,760 |
+229 | Moses Moody | GSW | $5,803,269 | $11,574,075 | $12,500,000 | $13,425,925 | | | $43,303,269 |
+230 | Zach Edey | MEM | $5,756,880 | $6,045,000 | $6,332,760 | $8,067,937 | | | $11,801,880 |
+231 | Corey Kispert | WAS | $5,705,887 | $13,975,000 | $13,975,000 | $13,050,000 | $13,050,000 | | $46,705,887 |
+232 | Jeremy Sochan | SAS | $5,570,040 | $7,096,231 | | | | | $12,666,271 |
+233 | Cason Wallace | OKC | $5,555,880 | $5,820,240 | $7,420,806 | | | | $11,376,120 |
+234 | Cody Williams | UTA | $5,469,120 | $5,742,480 | $6,015,600 | $7,669,890 | | | $11,211,600 |
+235 | Alperen Şengün | HOU | $5,424,654 | $33,944,954 | $35,642,202 | $37,339,450 | $39,036,697 | $39,036,697 | $151,387,957 |
+236 | Johnny Davis | MEM | $5,291,160 | | | | | | $5,291,160 |
+237 | Jett Howard | ORL | $5,278,320 | $5,529,720 | $7,337,939 | | | | $10,808,040 |
+238 | Dāvis Bertāns | CHO | $5,250,000 | | | | | | $5,250,000 |
+239 | Haywood Highsmith | MIA | $5,200,000 | $5,616,000 | | | | | $10,816,000 |
+240 | Matas Buzelis | CHI | $5,195,520 | $5,455,560 | $5,715,360 | $7,584,283 | | | $10,651,080 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 241 | Kris Dunn | LAC | $5,168,000 | $5,426,400 | $5,684,800 | | | | $10,594,400 |
+242 | Dario Šarić | DEN | $5,168,000 | $5,426,400 | | | | | $5,168,000 |
+243 | Trey Murphy III | NOP | $5,159,854 | $25,000,000 | $27,000,000 | $29,000,000 | $31,000,000 | | $117,159,854 |
+244 | Ousmane Dieng | OKC | $5,027,040 | $6,670,882 | | | | | $11,697,922 |
+245 | Dereck Lively II | DAL | $5,014,560 | $5,253,360 | $7,239,131 | | | | $10,267,920 |
+246 | Nick Richards | PHO | $5,000,000 | $5,000,000 | | | | | $5,000,000 |
+247 | Andre Drummond | PHI | $5,000,000 | $5,000,000 | | | | | $5,000,000 |
+248 | Drew Eubanks | LAC | $5,000,000 | $4,750,000 | | | | | $5,000,000 |
+249 | Nikola Topić | OKC | $4,935,960 | $5,182,920 | $5,429,760 | $7,482,210 | | | $10,118,880 |
+250 | Tre Mann | CHO | $4,908,373 | | | | | | $4,908,373 |
+251 | Jalen Williams | OKC | $4,775,760 | $6,580,997 | | | | | $11,356,757 |
+252 | Gradey Dick | TOR | $4,763,760 | $4,990,560 | $7,131,511 | | | | $9,754,320 |
+253 | Jalen McDaniels | SAS | $4,741,800 | | | | | | $4,741,800 |
+254 | Miles McBride | NYK | $4,710,144 | $4,333,333 | $3,956,523 | | | | $13,000,000 |
+255 | Devin Carter | SAC | $4,689,000 | $4,923,720 | $5,158,080 | $7,370,897 | | | $9,612,720 |
+256 | Nicolas Batum | LAC | $4,668,000 | $4,901,400 | | | | | $4,668,000 |
+257 | Aaron Holiday | HOU | $4,668,000 | $4,901,400 | | | | | $4,668,000 |
+258 | Jalen Duren | DET | $4,536,840 | $6,483,144 | | | | | $11,019,984 |
+259 | Jordan Hawkins | NOP | $4,525,680 | $4,741,320 | $7,021,895 | | | | $9,267,000 |
+260 | Jalen Johnson | ATL | $4,510,905 | $30,000,000 | $30,000,000 | $30,000,000 | $30,000,000 | $30,000,000 | $154,510,905 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 261 | Bub Carrington | WAS | $4,454,880 | $4,677,600 | $4,900,560 | $7,257,730 | | | $9,132,480 |
+262 | Isaiah Jackson | IND | $4,435,381 | | | | | | $4,435,381 |
+263 | Nickeil Alexander-Walker | MIN | $4,312,500 | | | | | | $4,312,500 |
+264 | Ochai Agbaji | TOR | $4,310,280 | $6,383,525 | | | | | $10,693,805 |
+265 | Kobe Bufkin | ATL | $4,299,000 | $4,503,720 | $6,904,203 | | | | $8,802,720 |
+266 | Quentin Grimes | PHI | $4,296,682 | | | | | | $4,296,682 |
+267 | Kel'el Ware | MIA | $4,231,800 | $4,443,360 | $4,654,920 | $7,135,992 | | | $8,675,160 |
+268 | Bones Hyland | ATL | $4,158,439 | | | | | | $4,158,439 |
+269 | Mark Williams | CHO | $4,094,280 | $6,276,531 | | | | | $10,370,811 |
+270 | Keyonte George | UTA | $4,084,200 | $4,278,960 | $6,563,925 | | | | $8,363,160 |
+271 | Cam Thomas | BRK | $4,041,249 | | | | | | $4,041,249 |
+272 | Jared McCain | PHI | $4,020,360 | $4,221,360 | $4,422,600 | $6,784,268 | | | $8,241,720 |
+273 | Jaden Springer | HOU | $4,018,363 | | | | | | $4,018,363 |
+274 | Dwight Powell | DAL | $4,000,000 | $4,000,000 | | | | | $4,000,000 |
+275 | Day'Ron Sharpe | BRK | $3,989,122 | | | | | | $3,989,122 |
+276 | Santi Aldama | MEM | $3,960,531 | | | | | | $3,960,531 |
+277 | Amir Coffey | LAC | $3,938,271 | | | | | | $3,938,271 |
+278 | Jalen Hood-Schifino | UTA | $3,879,840 | | | | | | $3,879,840 |
+279 | Kevin Love | MIA | $3,850,000 | $4,150,000 | | | | | $8,000,000 |
+280 | Dalton Knecht | LAL | $3,819,120 | $4,010,160 | $4,201,080 | $6,452,860 | | | $7,829,280 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 281 | Tari Eason | HOU | $3,695,160 | $5,675,766 | | | | | $9,370,926 |
+282 | Jaime Jaquez Jr. | MIA | $3,685,800 | $3,861,600 | $5,939,141 | | | | $7,547,400 |
+283 | Tristan Da Silva | ORL | $3,628,440 | $3,809,520 | $3,991,200 | $6,138,466 | | | $7,437,960 |
+284 | Brandin Podziemski | GSW | $3,519,960 | $3,687,960 | $5,679,459 | | | | $7,207,920 |
+285 | Dalen Terry | CHI | $3,510,480 | $5,399,118 | | | | | $8,909,598 |
+286 | Svi Mykhailiuk | UTA | $3,500,000 | $3,675,000 | $3,850,000 | $4,025,000 | | | $3,500,000 |
+287 | Cody Zeller | HOU | $3,500,000 | | | | | | $3,500,000 |
+288 | Ja'Kobe Walter | TOR | $3,465,000 | $3,638,160 | $3,811,800 | $5,870,172 | | | $7,103,160 |
+289 | Cam Whitmore | HOU | $3,379,080 | $3,539,760 | $5,458,310 | | | | $6,918,840 |
+290 | Jake LaRavia | SAC | $3,352,680 | $5,163,127 | | | | | $3,352,680 |
+291 | Jaylon Tyson | CLE | $3,326,160 | $3,492,480 | $3,658,560 | $5,641,500 | | | $6,818,640 |
+292 | Eric Gordon | PHI | $3,303,771 | $3,468,960 | | | | | $3,303,771 |
+293 | Cory Joseph | ORL | $3,303,771 | $3,468,960 | | | | | $3,303,771 |
+294 | Russell Westbrook | DEN | $5,631,296 | $3,468,960 | | | | | $3,303,771 |
+295 | Noah Clowney | BRK | $3,244,080 | $3,398,640 | $5,414,034 | | | | $6,642,720 |
+296 | Malaki Branham | SAS | $3,217,920 | $4,962,033 | | | | | $8,179,953 |
+297 | Yves Missi | NOP | $3,193,200 | $3,353,040 | $3,512,760 | $5,595,827 | | | $6,546,240 |
+298 | Dante Exum | DAL | $3,150,000 | | | | | | $3,150,000 |
+299 | Dariq Whitehead | BRK | $3,114,240 | $3,262,560 | $5,366,912 | | | | $6,376,800 |
+300 | Nassir Little | PHO | $3,107,143 | $3,107,143 | $3,107,143 | $3,107,143 | $3,107,143 | | $15,535,715 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 301 | Christian Braun | DEN | $3,089,640 | $4,921,797 | | | | | $8,011,437 |
+302 | Johnny Juzang | UTA | $3,087,519 | $2,840,518 | $2,708,000 | $2,789,215 | | | $3,087,519 |
+303 | DaRon Holmes | DEN | $3,065,640 | $3,218,760 | $3,372,120 | $5,547,138 | | | $6,284,400 |
+304 | Josh Richardson | UTA | $3,051,153 | | | | | | $3,051,153 |
+305 | Christian Wood | LAL | $3,036,040 | | | | | | $3,036,040 |
+306 | Kyle Filipowski | UTA | $3,000,000 | $3,000,000 | $3,000,000 | $3,000,000 | | | $6,000,000 |
+307 | Julian Champagnie | SAS | $3,000,000 | $3,000,000 | $3,000,000 | | | | $3,000,000 |
+308 | Ajay Mitchell | OKC | $3,000,000 | $3,000,000 | | | | | $3,000,000 |
+309 | Kris Murray | POR | $2,990,040 | $3,132,000 | $5,315,004 | | | | $6,122,040 |
+310 | Walker Kessler | UTA | $2,965,920 | $4,878,938 | | | | | $7,844,858 |
+311 | Shake Milton | LAL | $2,875,000 | $3,000,000 | $3,287,406 | | | | $9,162,406 |
+312 | Olivier-Maxence Prosper | DAL | $2,870,400 | $3,007,080 | $5,259,383 | | | | $5,877,480 |
+313 | David Roddy | ATL | $2,967,212 | | | | | | $2,847,240 |
+314 | Torrey Craig | CHI | $3,625,162 | | | | | | $2,845,342 |
+315 | Kyshawn George | WAS | $2,825,520 | $2,966,760 | $3,108,000 | $5,435,892 | | | $5,792,280 |
+316 | AJ Johnson | WAS | $2,795,294 | $3,090,480 | $3,237,120 | $5,493,394 | | | $5,885,774 |
+317 | Marcus Sasser | DET | $2,755,080 | $2,886,720 | $5,198,983 | | | | $5,641,800 |
+318 | Dewayne Dedmon | DET | $2,748,674 | | | | | | $2,748,674 |
+319 | MarJon Beauchamp | LAC | $2,733,720 | | | | | | $2,733,720 |
+320 | Trendon Watford | BRK | $2,726,603 | | | | | | $2,726,603 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 321 | Ben Sheppard | IND | $2,663,880 | $2,790,720 | $5,031,669 | | | | $5,454,600 |
+322 | Keita Bates-Diop | MIN | $2,654,644 | | | | | | $2,654,644 |
+323 | Blake Wesley | SAS | $2,624,280 | $4,726,328 | | | | | $7,350,608 |
+324 | Dillon Jones | OKC | $2,622,360 | $2,753,280 | $2,884,440 | $5,200,646 | | | $5,375,640 |
+325 | Nick Smith Jr. | CHO | $2,587,200 | $2,710,680 | $4,890,067 | | | | $5,297,880 |
+326 | Brice Sensabaugh | UTA | $2,571,480 | $2,693,760 | $4,862,237 | | | | $5,265,240 |
+327 | Ty Jerome | CLE | $2,560,975 | | | | | | $2,560,975 |
+328 | Julian Strawther | DEN | $2,552,520 | $2,674,200 | $4,826,931 | | | | $5,226,720 |
+329 | Terrence Shannon Jr. | MIN | $2,546,640 | $2,674,080 | $2,801,640 | $5,054,159 | | | $5,220,720 |
+330 | Wendell Moore Jr. | DET | $2,537,040 | | | | | | $2,537,040 |
+331 | Kobe Brown | LAC | $2,533,920 | $2,654,880 | $4,792,059 | | | | $5,188,800 |
+332 | Ryan Dunn | PHO | $2,530,800 | $2,657,760 | $2,784,240 | $5,025,553 | | | $5,188,560 |
+333 | Isaiah Collier | UTA | $2,512,680 | $2,638,200 | $2,763,960 | $4,988,948 | | | $5,150,880 |
+334 | Baylor Scheierman | BOS | $2,494,320 | $2,619,000 | $2,744,040 | $4,952,993 | | | $10,191,353 |
+335 | Paul Reed | DET | $3,913,234 | | | | | | $3,913,234 |
+336 | Nikola Jović | MIA | $2,464,200 | $4,445,417 | | | | | $6,909,617 |
+337 | Jaxson Hayes | LAL | $2,463,946 | | | | | | $2,463,946 |
+338 | Cam Reddish | LAL | $2,463,946 | | | | | | $2,463,946 |
+339 | Patrick Baldwin Jr. | SAS | $2,448,840 | | | | | | $2,448,840 |
+340 | DaQuan Jeffries | CHO | $2,425,404 | $2,743,776 | $3,080,918 | | | | $2,425,404 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 341 | Peyton Watson | DEN | $2,413,560 | $4,356,476 | | | | | $6,770,036 |
+342 | Russell Westbrook | UTA | $5,631,296 | $3,468,960 | | | | | $2,327,525 |
+343 | Charlie Brown Jr. | CHO | $2,237,692 | | | | | | $2,237,692 |
+344 | Xavier Tillman Sr. | BOS | $2,237,691 | $2,546,675 | | | | | $4,784,366 |
+345 | Anthony Gill | WAS | $2,237,691 | $2,546,675 | | | | | $2,237,691 |
+346 | James Wiseman | TOR | $2,237,691 | | | | | | $2,237,691 |
+347 | Kevin Porter Jr. | MIL | $3,237,691 | $2,546,675 | | | | | $2,237,691 |
+348 | Garrison Mathews | ATL | $2,230,253 | | | | | | $2,230,253 |
+349 | JaVale McGee | DAL | $2,208,856 | $2,208,856 | $2,208,856 | $2,208,856 | | | $8,835,424 |
+350 | Jeremiah Robinson-Earl | NOP | $2,196,970 | | | | | | $2,196,970 |
+351 | Lindy Waters III | DET | $2,196,970 | | | | | | $2,196,970 |
+352 | Dalano Banton | POR | $2,196,970 | | | | | | $2,019,706 |
+353 | Sam Merrill | CLE | $2,164,993 | | | | | | $2,164,993 |
+354 | Duane Washington Jr. | CHO | $2,162,607 | | | | | | $2,162,607 |
+355 | Luka Garza | MIN | $2,162,606 | $2,349,578 | | | | | $2,162,606 |
+356 | Keon Johnson | BRK | $2,162,606 | $2,349,578 | | | | | $2,162,606 |
+357 | Neemias Queta | BOS | $2,162,606 | $2,349,578 | $2,667,944 | | | | $2,162,606 |
+358 | Vit Krejci | ATL | $2,162,606 | $2,349,578 | $2,667,944 | $3,005,085 | | | $2,162,606 |
+359 | Vince Williams Jr. | MEM | $2,120,693 | $2,301,587 | $2,489,752 | | | | $4,422,280 |
+360 | Colby Jones | WAS | $2,120,693 | $2,221,677 | $2,406,205 | | | | $2,120,693 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 361 | Keon Ellis | SAC | $2,120,693 | $2,301,587 | | | | | $2,120,693 |
+362 | A.J. Green | MIL | $2,120,693 | $2,301,587 | | | | | $2,120,693 |
+363 | Sam Hauser | BOS | $2,092,344 | $10,044,644 | $10,848,215 | $11,651,785 | $12,455,356 | | $47,092,344 |
+364 | Jericho Sims | MIL | $2,092,344 | | | | | | $2,092,344 |
+365 | Jay Huff | MEM | $2,088,033 | $2,349,578 | $2,667,944 | $3,005,085 | | | $4,437,611 |
+366 | Tyler Kolek | NYK | $2,087,519 | $2,191,897 | $2,296,271 | $2,486,995 | | | $6,575,687 |
+367 | Scotty Pippen Jr. | MEM | $2,087,519 | $2,270,735 | $2,461,462 | $2,789,215 | | | $4,358,254 |
+368 | Reggie Jackson | WAS | $4,033,748 | | | | | | $2,087,519 |
+369 | Alex Len | WAS | $2,831,348 | | | | | | $2,087,519 |
+370 | Mo Bamba | UTA | $2,087,519 | | | | | | $2,087,519 |
+371 | Garrett Temple | TOR | $2,087,519 | | | | | | $2,087,519 |
+372 | Charles Bassey | SAS | $2,087,519 | $2,500,000 | | | | | $2,087,519 |
+373 | Jordan McLaughlin | SAS | $2,087,519 | | | | | | $2,087,519 |
+374 | Sandro Mamukelashvili | SAS | $2,087,519 | | | | | | $2,087,519 |
+375 | Doug McDermott | SAC | $2,087,519 | | | | | | $2,087,519 |
+376 | Tyus Jones | PHO | $2,087,519 | | | | | | $2,087,519 |
+377 | Bol Bol | PHO | $2,087,519 | | | | | | $2,087,519 |
+378 | Monte Morris | PHO | $2,087,519 | | | | | | $2,087,519 |
+379 | Mason Plumlee | PHO | $2,087,519 | | | | | | $2,087,519 |
+380 | Damion Lee | PHO | $2,087,519 | | | | | | $2,087,519 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 381 | Guerschon Yabusele | PHI | $2,087,519 | | | | | | $2,087,519 |
+382 | Kyle Lowry | PHI | $2,087,519 | | | | | | $2,087,519 |
+383 | Daniel Theis | OKC | $2,087,519 | | | | | | $2,087,519 |
+384 | Cameron Payne | NYK | $2,087,519 | | | | | | $2,087,519 |
+385 | Delon Wright | NYK | $2,087,519 | | | | | | $2,087,519 |
+386 | Joe Ingles | MIN | $2,087,519 | | | | | | $2,087,519 |
+387 | Gary Trent Jr. | MIL | $2,087,519 | | | | | | $2,087,519 |
+388 | Taurean Prince | MIL | $2,087,519 | | | | | | $2,087,519 |
+389 | Alec Burks | MIA | $2,087,519 | | | | | | $2,087,519 |
+390 | Markieff Morris | LAL | $2,087,519 | | | | | | $2,087,519 |
+391 | Patty Mills | LAC | $2,087,519 | | | | | | $2,087,519 |
+392 | James Johnson | IND | $2,087,519 | | | | | | $2,087,519 |
+393 | Thomas Bryant | IND | $2,087,519 | | | | | | $2,087,519 |
+394 | DeAndre Jordan | DEN | $2,087,519 | | | | | | $2,087,519 |
+395 | Vlatko Čančar | DEN | $2,087,519 | | | | | | $2,087,519 |
+396 | Spencer Dinwiddie | DAL | $2,087,519 | | | | | | $2,087,519 |
+397 | Tristan Thompson | CLE | $2,087,519 | | | | | | $2,087,519 |
+398 | Seth Curry | CHO | $2,087,519 | | | | | | $2,087,519 |
+399 | Taj Gibson | CHO | $2,087,519 | | | | | | $2,087,519 |
+400 | Talen Horton-Tucker | CHI | $2,087,519 | | | | | | $2,087,519 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 401 | Luke Kornet | BOS | $2,087,519 | | | | | | $2,087,519 |
+402 | Duop Reath | POR | $2,048,780 | $2,221,677 | | | | | $2,048,780 |
+403 | Andrew Nembhard | IND | $2,019,699 | $18,102,000 | $19,550,160 | $20,998,320 | | | $60,670,179 |
+404 | Jaden Hardy | DAL | $2,019,699 | $6,000,000 | $6,000,000 | $6,000,000 | | | $14,019,699 |
+405 | Jabari Walker | POR | $2,019,699 | | | | | | $2,019,699 |
+406 | Caleb Houstan | ORL | $2,019,699 | $2,187,699 | | | | | $2,019,699 |
+407 | Jaylin Williams | OKC | $2,019,699 | $2,187,451 | | | | | $2,019,699 |
+408 | Josh Minott | MIN | $2,019,699 | $2,187,451 | | | | | $2,019,699 |
+409 | Kennedy Chandler | MEM | $2,019,699 | | | | | | $2,019,699 |
+410 | Jose Alvarado | NOP | $1,988,598 | $4,500,000 | $4,500,000 | | | | $6,488,598 |
+411 | Reggie Jackson | CHO | $4,033,748 | | | | | | $1,946,229 |
+412 | Ricky Council IV | PHI | $1,891,857 | $2,221,677 | $2,406,205 | | | | $4,113,534 |
+413 | GG Jackson II | MEM | $1,891,857 | $2,221,677 | $2,406,205 | | | | $4,113,534 |
+414 | Jalen Pickett | DEN | $1,891,857 | $2,221,677 | $2,406,205 | | | | $4,113,534 |
+415 | Hunter Tyson | DEN | $1,891,857 | $2,221,677 | $2,406,205 | | | | $4,113,534 |
+416 | Julian Phillips | CHI | $1,891,857 | $2,221,677 | $2,406,205 | | | | $4,113,534 |
+417 | Jordan Walsh | BOS | $1,891,857 | $2,221,677 | $2,406,205 | | | | $2,091,857 |
+418 | Sidy Cissoko | WAS | $1,891,857 | | | | | | $1,891,857 |
+419 | Toumani Camara | POR | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+420 | Rayan Rupert | POR | $1,891,857 | $2,221,677 | | | | | $1,891,857 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 421 | Leonard Miller | MIN | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+422 | Chris Livingston | MIL | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+423 | Andre Jackson Jr. | MIL | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+424 | Gui Santos | GSW | $1,891,857 | $2,221,677 | | | | | $1,891,857 |
+425 | Trayce Jackson-Davis | GSW | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+426 | Craig Porter Jr. | CLE | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+427 | Jalen Wilson | BRK | $1,891,857 | $2,221,677 | | | | | $1,891,857 |
+428 | Maxwell Lewis | BRK | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+429 | Mouhamed Gueye | ATL | $1,891,857 | $2,221,677 | $2,406,205 | | | | $1,891,857 |
+430 | Jonathan Mogbo | TOR | $1,862,265 | $1,955,377 | $2,296,271 | | | | $3,817,642 |
+431 | Jamal Shead | TOR | $1,862,265 | $1,955,377 | $2,296,271 | | | | $3,817,642 |
+432 | Johnny Furphy | IND | $1,850,842 | $1,955,377 | $2,296,271 | $2,486,995 | | | $6,102,490 |
+433 | Pacome Dadiet | NYK | $1,808,080 | $2,847,600 | $2,983,680 | $5,373,608 | | | $4,655,680 |
+434 | Javonte Green | NOP | $1,728,488 | | | | | | $1,728,488 |
+435 | Jae Crowder | SAC | $1,655,619 | | | | | | $1,655,619 |
+436 | Paul Reed | DET | $3,913,234 | | | | | | $3,913,234 |
+437 | Karlo Matković | NOP | $1,407,153 | $1,955,377 | $2,296,271 | | | | $3,362,530 |
+438 | Landry Shamet | NYK | $1,343,690 | | | | | | $1,343,690 |
+439 | Eric Bledsoe | POR | $1,300,000 | | | | | | $1,300,000 |
+440 | Bobi Klintman | DET | $1,257,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $3,212,530 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 441 | Tyler Smith | MIL | $1,157,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $5,408,801 |
+442 | Oso Ighodaro | PHO | $1,157,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $3,112,530 |
+443 | Jaylen Wells | MEM | $1,157,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $3,112,530 |
+444 | Bronny James | LAL | $1,157,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $3,112,530 |
+445 | Cam Christie | LAC | $1,157,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $3,112,530 |
+446 | Adem Bona | PHI | $1,157,153 | $1,955,377 | $2,296,271 | $2,486,995 | | | $1,157,153 |
+447 | Antonio Reeves | NOP | $1,157,153 | $1,955,377 | $2,296,271 | | | | $1,157,153 |
+448 | Pelle Larsson | MIA | $1,157,153 | $1,955,377 | $2,296,271 | | | | $1,157,153 |
+449 | Bruno Fernando | TOR | $1,115,128 | | | | | | $1,115,128 |
+450 | Ariel Hukporti | NYK | $1,064,049 | $1,955,377 | | | | | $1,064,049 |
+451 | PJ Dozier | MIN | $1,051,255 | | | | | | $1,051,255 |
+452 | Jamison Battle | TOR | $1,000,000 | $1,955,377 | $2,296,271 | | | | $1,000,000 |
+453 | Kevin Porter Jr. | OKC | $3,237,691 | $2,546,675 | | | | | $1,000,000 |
+454 | Joshua Primo | LAC | $1,000,000 | | | | | | $1,000,000 |
+455 | Orlando Robinson | SAC | $1,199,723 | | | | | | $959,779 |
+456 | Moussa Diabaté | CHO | $957,763 | $2,270,735 | $2,461,462 | | | | $957,763 |
+457 | Torrey Craig | BOS | $3,625,162 | | | | | | $779,820 |
+458 | Ben Simmons | LAC | $40,011,909 | | | | | | $755,826 |
+459 | Jared Butler | PHI | $745,726 | $2,349,578 | | | | | $745,726 |
+460 | Alex Len | LAL | $2,831,348 | | | | | | $743,829 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 461 | Markelle Fultz | SAC | $731,831 | | | | | | $731,831 |
+462 | Keshad Johnson | MIA | $724,883 | $1,955,377 | | | | | $724,883 |
+463 | E.J. Liddell | PHO | $706,898 | $706,898 | $706,898 | | | | $2,120,694 |
+464 | Nik Stauskas | IND | $702,310 | | | | | | $702,310 |
+465 | Matt Ryan | NYK | $621,439 | | | | | | $621,439 |
+466 | Ryan Rollins | WAS | $600,000 | | | | | | $600,000 |
+467 | Juwan Morgan | IND | $576,229 | | | | | | $576,229 |
+468 | Malik Fitts | IND | $555,216 | | | | | | $555,216 |
+469 | Mamadi Diakite | MEM | $464,050 | $464,050 | $464,050 | | | | $1,392,150 |
+470 | Quinten Post | GSW | $438,920 | $1,955,377 | | | | | $438,920 |
+471 | Justin Edwards | PHI | $425,619 | $1,955,377 | | | | | $425,619 |
+472 | Ricky Rubio | CLE | $424,672 | $424,672 | $424,672 | | | | $1,274,016 |
+473 | Branden Carlson | OKC | $496,519 | | | | | | $496,519 |
+474 | Moses Brown | IND | $306,660 | | | | | | $306,660 |
+475 | Jaylen Nowell | NOP | $446,743 | | | | | | $278,782 |
+476 | Elfrid Payton | NOP | $514,753 | | | | | | $274,809 |
+477 | Didi Louzada | POR | $268,032 | $268,032 | $268,032 | $268,032 | $268,032 | | $1,340,160 |
+478 | AJ Griffin | HOU | $250,000 | | | | | | $250,000 |
+479 | Jaylen Nowell | WAS | $446,743 | | | | | | $167,961 |
+480 | Bismack Biyombo | SAS | $143,967 | | | | | | $287,934 |
+
+
+
+
+
+
+
+ Rk |
+ Player |
+ Tm |
+ 2024-25 |
+ 2025-26 |
+ 2026-27 |
+ 2027-28 |
+ 2028-29 |
+ 2029-30 |
+ Guaranteed |
+
+ 481 | Bismack Biyombo | SAS | $143,967 | | | | | | $287,934 |
+482 | Malevy Leons | OKC | $126,356 | | | | | | $126,356 |
+483 | Orlando Robinson | TOR | $1,199,723 | | | | | | $239,944 |
+484 | Orlando Robinson | TOR | $1,199,723 | | | | | | $239,944 |
+485 | Elfrid Payton | CHO | $514,753 | | | | | | $239,944 |
+486 | Elfrid Payton | CHO | $514,753 | | | | | | $239,944 |
+487 | Eugene Omoruyi | TOR | $119,972 | | | | | | $119,972 |
+488 | Daishen Nix | SAC | $119,972 | | | | | | $119,972 |
+489 | David Roddy | PHI | $2,967,212 | | | | | | $119,972 |
+490 | Chuma Okeke | PHI | $119,972 | | | | | | $119,972 |
+491 | Jahlil Okafor | IND | $119,972 | | | | | | $119,972 |
+492 | Javon Freeman-Liberty | TOR | $100,000 | | | | | | $100,000 |
+493 | Erik Stevenson | WAS | $66,503 | | | | | | $66,503 |
+494 | Branden Carlson | OKC | $496,519 | | | | | | $496,519 |
+495 | Branden Carlson | OKC | $496,519 | | | | | | $496,519 |
+496 | Javante McCoy | DET | $47,265 | | | | | | $47,265 |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/integration/html/test_daily_box_scores_page.py b/tests/integration/html/test_daily_box_scores_page.py
index 129089e4..715508dc 100644
--- a/tests/integration/html/test_daily_box_scores_page.py
+++ b/tests/integration/html/test_daily_box_scores_page.py
@@ -3,7 +3,7 @@
from lxml import html
-from basketball_reference_web_scraper.html import DailyBoxScoresPage
+from basketball_reference_web_scraper.content import DailyBoxScoresPage
class TestDailyBoxScoresPage(TestCase):
diff --git a/tests/integration/html/test_play_by_play_page.py b/tests/integration/html/test_play_by_play_page.py
index 56ad6076..bdb5976f 100644
--- a/tests/integration/html/test_play_by_play_page.py
+++ b/tests/integration/html/test_play_by_play_page.py
@@ -1,7 +1,7 @@
import os
from unittest import TestCase
-from basketball_reference_web_scraper.html import PlayByPlayPage
+from basketball_reference_web_scraper.content import PlayByPlayPage
from lxml import html
diff --git a/tests/integration/html/test_player_contracts.py b/tests/integration/html/test_player_contracts.py
index 60f9b111..f83878da 100644
--- a/tests/integration/html/test_player_contracts.py
+++ b/tests/integration/html/test_player_contracts.py
@@ -2,7 +2,7 @@
from lxml import html
-from basketball_reference_web_scraper.html import PlayerContractsRow
+from basketball_reference_web_scraper.content import PlayerContractsRow
class TestPlayerContractsRow(TestCase):
diff --git a/tests/integration/parsers/test_parse_player_advanced_season_totals.py b/tests/integration/parsers/test_parse_player_advanced_season_totals.py
index 96024df6..165b04dc 100644
--- a/tests/integration/parsers/test_parse_player_advanced_season_totals.py
+++ b/tests/integration/parsers/test_parse_player_advanced_season_totals.py
@@ -5,7 +5,7 @@
from basketball_reference_web_scraper.data import Team, Position, TEAM_ABBREVIATIONS_TO_TEAM, \
POSITION_ABBREVIATIONS_TO_POSITION
-from basketball_reference_web_scraper.html import PlayerAdvancedSeasonTotalsTable
+from basketball_reference_web_scraper.content import PlayerAdvancedSeasonTotalsTable
from basketball_reference_web_scraper.parsers import PlayerAdvancedSeasonTotalsParser, PositionAbbreviationParser, \
TeamAbbreviationParser
diff --git a/tests/integration/parsers/test_parse_player_box_scores.py b/tests/integration/parsers/test_parse_player_box_scores.py
index 389408f2..516b913c 100644
--- a/tests/integration/parsers/test_parse_player_box_scores.py
+++ b/tests/integration/parsers/test_parse_player_box_scores.py
@@ -7,7 +7,7 @@
from basketball_reference_web_scraper.data import TEAM_ABBREVIATIONS_TO_TEAM, LOCATION_ABBREVIATIONS_TO_POSITION, \
OUTCOME_ABBREVIATIONS_TO_OUTCOME
from basketball_reference_web_scraper.data import Team, Outcome
-from basketball_reference_web_scraper.html import DailyLeadersPage
+from basketball_reference_web_scraper.content import DailyLeadersPage
from basketball_reference_web_scraper.parsers import TeamAbbreviationParser, \
LocationAbbreviationParser, OutcomeAbbreviationParser, \
SecondsPlayedParser, PlayerBoxScoresParser
diff --git a/tests/integration/parsers/test_parse_player_season_totals.py b/tests/integration/parsers/test_parse_player_season_totals.py
index dff4c48a..96b0f5e2 100644
--- a/tests/integration/parsers/test_parse_player_season_totals.py
+++ b/tests/integration/parsers/test_parse_player_season_totals.py
@@ -5,7 +5,7 @@
from basketball_reference_web_scraper.data import Team, Position, POSITION_ABBREVIATIONS_TO_POSITION, \
TEAM_ABBREVIATIONS_TO_TEAM
-from basketball_reference_web_scraper.html import PlayerSeasonTotalTable
+from basketball_reference_web_scraper.content import PlayerSeasonTotalTable
from basketball_reference_web_scraper.parsers import PositionAbbreviationParser, TeamAbbreviationParser, \
PlayerSeasonTotalsParser
diff --git a/tests/integration/parsers/test_parse_schedule.py b/tests/integration/parsers/test_parse_schedule.py
index f567ee1c..a3069bda 100644
--- a/tests/integration/parsers/test_parse_schedule.py
+++ b/tests/integration/parsers/test_parse_schedule.py
@@ -6,7 +6,7 @@
from lxml import html
from basketball_reference_web_scraper.data import Team, TEAM_NAME_TO_TEAM
-from basketball_reference_web_scraper.html import SchedulePage
+from basketball_reference_web_scraper.content import SchedulePage
from basketball_reference_web_scraper.parsers import ScheduledGamesParser, TeamNameParser, ScheduledStartTimeParser
diff --git a/tests/integration/parsers/test_parse_teams.py b/tests/integration/parsers/test_parse_teams.py
index ed2eb806..2bfc5773 100644
--- a/tests/integration/parsers/test_parse_teams.py
+++ b/tests/integration/parsers/test_parse_teams.py
@@ -5,7 +5,7 @@
from basketball_reference_web_scraper.data import TEAM_ABBREVIATIONS_TO_TEAM, TeamTotal
from basketball_reference_web_scraper.data import Team, Outcome
-from basketball_reference_web_scraper.html import BoxScoresPage
+from basketball_reference_web_scraper.content import BoxScoresPage
from basketball_reference_web_scraper.parsers import TeamAbbreviationParser, \
TeamTotalsParser
diff --git a/tests/unit/html/test_basic_box_score_row.py b/tests/unit/html/test_basic_box_score_row.py
index 90633816..0fb5e6da 100644
--- a/tests/unit/html/test_basic_box_score_row.py
+++ b/tests/unit/html/test_basic_box_score_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import BasicBoxScoreRow
+from basketball_reference_web_scraper.content import BasicBoxScoreRow
class TestBasicBoxScoreRow(TestCase):
diff --git a/tests/unit/html/test_play_by_play_row.py b/tests/unit/html/test_play_by_play_row.py
index 87ece452..2fd04391 100644
--- a/tests/unit/html/test_play_by_play_row.py
+++ b/tests/unit/html/test_play_by_play_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import patch, PropertyMock, MagicMock
-from basketball_reference_web_scraper.html import PlayByPlayRow
+from basketball_reference_web_scraper.content import PlayByPlayRow
class TestPlayByPlayRow(TestCase):
diff --git a/tests/unit/html/test_player_advanced_season_totals_row.py b/tests/unit/html/test_player_advanced_season_totals_row.py
index 222745af..2f85c8ed 100644
--- a/tests/unit/html/test_player_advanced_season_totals_row.py
+++ b/tests/unit/html/test_player_advanced_season_totals_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock, patch, PropertyMock
-from basketball_reference_web_scraper.html import PlayerAdvancedSeasonTotalsRow
+from basketball_reference_web_scraper.content import PlayerAdvancedSeasonTotalsRow
class TestPlayerAdvancedSeasonTotalsRow(TestCase):
diff --git a/tests/unit/html/test_player_advanced_season_totals_table.py b/tests/unit/html/test_player_advanced_season_totals_table.py
index c9816a8b..b3bc4dfa 100644
--- a/tests/unit/html/test_player_advanced_season_totals_table.py
+++ b/tests/unit/html/test_player_advanced_season_totals_table.py
@@ -2,7 +2,7 @@
from unittest.mock import MagicMock, PropertyMock
from unittest.mock import patch
-from basketball_reference_web_scraper.html import PlayerAdvancedSeasonTotalsRow, PlayerAdvancedSeasonTotalsTable
+from basketball_reference_web_scraper.content import PlayerAdvancedSeasonTotalsRow, PlayerAdvancedSeasonTotalsTable
class TestPlayerAdvancedSeasonTotalsTable(TestCase):
diff --git a/tests/unit/html/test_player_box_score_row.py b/tests/unit/html/test_player_box_score_row.py
index 06af66b9..ccd1d1d6 100644
--- a/tests/unit/html/test_player_box_score_row.py
+++ b/tests/unit/html/test_player_box_score_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import PlayerBoxScoreRow
+from basketball_reference_web_scraper.content import PlayerBoxScoreRow
class TestPlayerBoxScoreRow(TestCase):
diff --git a/tests/unit/html/test_player_identification_row.py b/tests/unit/html/test_player_identification_row.py
index fe5e263f..2e8d72e9 100644
--- a/tests/unit/html/test_player_identification_row.py
+++ b/tests/unit/html/test_player_identification_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock, patch, PropertyMock
-from basketball_reference_web_scraper.html import PlayerIdentificationRow
+from basketball_reference_web_scraper.content import PlayerIdentificationRow
class TestPlayerIdentificationRow(TestCase):
diff --git a/tests/unit/html/test_player_page.py b/tests/unit/html/test_player_page.py
index e31e54b0..e2ea12b9 100644
--- a/tests/unit/html/test_player_page.py
+++ b/tests/unit/html/test_player_page.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import PlayerPage, PlayerPageTotalsTable
+from basketball_reference_web_scraper.content import PlayerPage, PlayerPageTotalsTable
class TestPlayerPage(TestCase):
diff --git a/tests/unit/html/test_player_page_totals_row.py b/tests/unit/html/test_player_page_totals_row.py
index 5564262f..f8215a67 100644
--- a/tests/unit/html/test_player_page_totals_row.py
+++ b/tests/unit/html/test_player_page_totals_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import PlayerPageTotalsRow
+from basketball_reference_web_scraper.content import PlayerPageTotalsRow
class TestPlayerPageTotalsRow(TestCase):
diff --git a/tests/unit/html/test_player_page_totals_table.py b/tests/unit/html/test_player_page_totals_table.py
index cccf47c7..27012c60 100644
--- a/tests/unit/html/test_player_page_totals_table.py
+++ b/tests/unit/html/test_player_page_totals_table.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import PlayerPageTotalsTable, PlayerPageTotalsRow
+from basketball_reference_web_scraper.content import PlayerPageTotalsTable, PlayerPageTotalsRow
class TestPlayerPageTotalsTable(TestCase):
diff --git a/tests/unit/html/test_player_search_result.py b/tests/unit/html/test_player_search_result.py
index d484ac0a..53600d4e 100644
--- a/tests/unit/html/test_player_search_result.py
+++ b/tests/unit/html/test_player_search_result.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import patch, PropertyMock, MagicMock
-from basketball_reference_web_scraper.html import PlayerSearchResult
+from basketball_reference_web_scraper.content import PlayerSearchResult
class TestPlayerSearchResult(TestCase):
diff --git a/tests/unit/html/test_player_season_box_scores_page.py b/tests/unit/html/test_player_season_box_scores_page.py
index 028e7d5f..536632eb 100644
--- a/tests/unit/html/test_player_season_box_scores_page.py
+++ b/tests/unit/html/test_player_season_box_scores_page.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock, PropertyMock, patch
-from basketball_reference_web_scraper.html import PlayerSeasonBoxScoresPage
+from basketball_reference_web_scraper.content import PlayerSeasonBoxScoresPage
class TestPlayerSeasonBoxScoresPage(TestCase):
diff --git a/tests/unit/html/test_player_season_box_scores_row.py b/tests/unit/html/test_player_season_box_scores_row.py
index 6e76ca64..6b408c95 100644
--- a/tests/unit/html/test_player_season_box_scores_row.py
+++ b/tests/unit/html/test_player_season_box_scores_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import PlayerSeasonBoxScoresRow
+from basketball_reference_web_scraper.content import PlayerSeasonBoxScoresRow
class TestPlayerSeasonBoxScoresRow(TestCase):
diff --git a/tests/unit/html/test_player_season_totals_row.py b/tests/unit/html/test_player_season_totals_row.py
index 9681da68..d4b04081 100644
--- a/tests/unit/html/test_player_season_totals_row.py
+++ b/tests/unit/html/test_player_season_totals_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock, patch, PropertyMock
-from basketball_reference_web_scraper.html import PlayerSeasonTotalsRow
+from basketball_reference_web_scraper.content import PlayerSeasonTotalsRow
class TestPlayerSeasonTotalsRow(TestCase):
diff --git a/tests/unit/html/test_regular_season_player_box_scores_table.py b/tests/unit/html/test_regular_season_player_box_scores_table.py
index 192df4ac..5faf0873 100644
--- a/tests/unit/html/test_regular_season_player_box_scores_table.py
+++ b/tests/unit/html/test_regular_season_player_box_scores_table.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import PlayerSeasonBoxScoresTable, PlayerSeasonBoxScoresRow
+from basketball_reference_web_scraper.content import PlayerSeasonBoxScoresTable, PlayerSeasonBoxScoresRow
class TestPlayerSeasonBoxScoresTable(TestCase):
diff --git a/tests/unit/html/test_schedule_page.py b/tests/unit/html/test_schedule_page.py
index d8aed5c3..bed9cec5 100644
--- a/tests/unit/html/test_schedule_page.py
+++ b/tests/unit/html/test_schedule_page.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock, patch, PropertyMock
-from basketball_reference_web_scraper.html import SchedulePage, ScheduleRow
+from basketball_reference_web_scraper.content import SchedulePage, ScheduleRow
class TestSchedulePage(TestCase):
diff --git a/tests/unit/html/test_schedule_row.py b/tests/unit/html/test_schedule_row.py
index 85f2bf42..3fdec1b3 100644
--- a/tests/unit/html/test_schedule_row.py
+++ b/tests/unit/html/test_schedule_row.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from basketball_reference_web_scraper.html import ScheduleRow
+from basketball_reference_web_scraper.content import ScheduleRow
class TestScheduleRow(TestCase):
diff --git a/tests/unit/html/test_search_page.py b/tests/unit/html/test_search_page.py
index 4b7e597b..31b24f49 100644
--- a/tests/unit/html/test_search_page.py
+++ b/tests/unit/html/test_search_page.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import patch, MagicMock, PropertyMock
-from basketball_reference_web_scraper.html import SearchPage, PlayerSearchResult
+from basketball_reference_web_scraper.content import SearchPage, PlayerSearchResult
class TestSearchPage(TestCase):
diff --git a/tests/unit/html/test_search_result.py b/tests/unit/html/test_search_result.py
index 89dce80d..d879de41 100644
--- a/tests/unit/html/test_search_result.py
+++ b/tests/unit/html/test_search_result.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock, PropertyMock, patch
-from basketball_reference_web_scraper.html import SearchResult
+from basketball_reference_web_scraper.content import SearchResult
class TestSearchResult(TestCase):
We're Social...for Statheads
+ +Every Sports Reference Social Media Account
+Site Last Updated: Friday, March 7, 6:44AM +
+Question, Comment, Feedback, or Correction?
+ +Subscribe to our Free Email Newsletter
+ + +Subscribe to Stathead Basketball: Get your first month FREE
+ + +Your All-Access Ticket to the Basketball Reference Database
Do you have a sports website? Or write about sports? We have tools and resources that can help you use sports data. Find out more.
+ + +