Skip to content

Commit f9466a8

Browse files
authored
Merge pull request #67 from agrvz/feat/support-sport-state-endpoint
Support get sport state endpoint
2 parents 83cb09e + a4da61c commit f9466a8

8 files changed

Lines changed: 57 additions & 11 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,6 @@ venv.bak/
102102

103103
# mypy
104104
.mypy_cache/
105+
106+
# Poetry
107+
poetry.lock

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@
1313

1414
## Version 1.0.7
1515
- Fixed KeyError in the get_team_score() method.
16+
17+
## Version 1.2.0
18+
- Added `get_sport_state` function to `league` module.

docs/league.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# League
2+
3+
## League
24
`sleeper_wrapper.League(league_id)`
35

46
Instantiating a `League` object will allow interaction with Sleeper's [Leagues endpoint](https://docs.sleeper.com/#leagues) by pulling data for the league specified by the `league_id`. Examples for how the data is structured for methods hitting the API directly may be found in their documentation for the endpoint.
57

68

7-
## Attributes
9+
### Attributes
810
`league_id` _(Union[int, str])_: The Sleeper ID for the league. May be provided as a string or int.
911

10-
## Methods
12+
### Methods
1113
`get_league()`: Returns the league's data.
1214

1315
`get_rosters()`: Retrieves the league's rosters.
@@ -62,6 +64,11 @@ no longer officially documented by Sleeper.
6264
`get_league_name()`: Returns name of league.
6365

6466

67+
## Functions
68+
69+
`get_sport_state()`: Returns current state for the given sport.
70+
71+
6572
## Examples
6673
```
6774
from sleeper_wrapper import League
@@ -79,4 +86,7 @@ standings = league.get_standings(rosters=rosters, users=users)
7986
8087
# retrieves the scoreboard for the given week and returns it with user information
8188
scoreboards = league.get_scoreboards(rosters=rosters, matchups=matchups, users=users, score_type="pts_std", season=2023, week=1)
89+
90+
# gets current NFL state, e.g. current week
91+
state = get_sport_state(sport="nfl")
8292
```

pyproject.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[tool.poetry]
44
name = "sleeper-api-wrapper"
55
packages = [ { include = "sleeper_wrapper" } ]
6-
version = "1.1.0"
6+
version = "1.2.0"
77
description = "A Python API wrapper for Sleeper Fantasy sports, as well as tools to simplify received data."
88
authors = ["Dan Song, Ford Higgins <py-sleeper-api-wrapper-maintainers@googlegroups.com>"]
99
readme = "README.md"
@@ -25,3 +25,7 @@ requests = "^2.22.0"
2525
[build-system]
2626
requires = ["poetry-core"]
2727
build-backend = "poetry.core.masonry.api"
28+
29+
[tool.poetry.group.dev.dependencies]
30+
pytest = "*"
31+
pytest-mock = "*"

sleeper_wrapper/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .league import League
1+
from .league import get_sport_state, League
22
from .base_api import BaseApi
33
from .user import User
44
from .drafts import Drafts

sleeper_wrapper/league.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,15 @@ def get_negative_scores(self, week: Union[str, int]) -> None:
308308

309309
def get_rosters_players(self) -> None:
310310
pass
311+
312+
313+
def get_sport_state(sport: str = "nfl") -> dict:
314+
"""
315+
Returns info about the current state of the specified sport.
316+
317+
https://docs.sleeper.com/#get-nfl-state
318+
319+
Parameters:
320+
- sport: str: Options are "nfl", "nba", "lcs". Default "nfl".
321+
"""
322+
return BaseApi()._call("https://api.sleeper.app/v1/state/{}".format(sport))

tests/test_league.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from sleeper_wrapper import League
1+
from sleeper_wrapper import get_sport_state, League
22

33
def test_get_league() -> None:
44
""" Tests the get_league method"""
@@ -125,7 +125,7 @@ def test_get_scoreboards() -> None:
125125
matchups = league.get_matchups(1)
126126
users = league.get_users()
127127
rosters = league.get_rosters()
128-
scoreboards = league.get_scoreboards(rosters, matchups, users, "pts_half_ppr", 1)
128+
scoreboards = league.get_scoreboards(rosters, matchups, users, "pts_half_ppr", 2019, 1)
129129
print(scoreboards)
130130
assert isinstance(scoreboards, dict)
131131

@@ -138,7 +138,7 @@ def test_get_close_games() -> None:
138138
matchups = league.get_matchups(1)
139139
users = league.get_users()
140140
rosters = league.get_rosters()
141-
scoreboards = league.get_scoreboards(rosters, matchups, users, "pts_half_ppr", 1)
141+
scoreboards = league.get_scoreboards(rosters, matchups, users, "pts_half_ppr", 2019, 1)
142142
close_games = league.get_close_games(scoreboards, 10)
143143
assert isinstance(close_games, dict)
144144

@@ -157,11 +157,25 @@ def test_empty_roster_spots() -> None:
157157
for user in users:
158158
user_id = user["user_id"]
159159
for roster in rosters:
160-
if user_id == roster["user_id"]:
160+
if user_id == roster["owner_id"]:
161161
assert league.empty_roster_spots(user_id) is not None
162162

163163
# Assertion 2
164164
assert league.empty_roster_spots(-10000) is None
165165

166166
def test_get_negative_scores() -> None:
167-
pass
167+
pass
168+
169+
def test_get_sport_state(mocker) -> None:
170+
mock_data = {
171+
"week": 1,
172+
"season_type": "regular"
173+
}
174+
mock_base_api_call = mocker.patch(
175+
"sleeper_wrapper.league.BaseApi._call", return_value=mock_data
176+
)
177+
response = get_sport_state("nfl")
178+
assert response == mock_data
179+
mock_base_api_call.assert_called_once_with(
180+
"https://api.sleeper.app/v1/state/nfl"
181+
)

tests/test_stats.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_get_player_week_score() -> None:
2828

2929

3030
assert isinstance(score, dict)
31-
assert score["pts_ppr"] == None
31+
assert score["pts_ppr"] == 2.0
3232

3333
score = stats.get_player_week_score(week_stats, "1262")
3434
assert isinstance(score, dict)
@@ -41,7 +41,7 @@ def test_get_player_week_score() -> None:
4141

4242

4343
score = stats.get_player_week_score(week_stats, "30000000000")
44-
assert score is None
44+
assert score == {}
4545

4646
def test_get_player_week_stats() -> None:
4747
stats = Stats()

0 commit comments

Comments
 (0)