Skip to content

Commit 2865a14

Browse files
authored
Merge pull request #145 from DoraFgr/feature/broadcast-search
2 parents 316cc4c + 8b139d3 commit 2865a14

File tree

7 files changed

+178
-5
lines changed

7 files changed

+178
-5
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ To be released
99

1010
* Added ``pgn_in_json`` parameter to ``client.games.export``.
1111
* Implement `broadcasts.get_top()` endpoint; typing fixes and validation.
12+
* Added ``client.broadcasts.search`` to search for broadcasts.
1213
* Added ``client.relations.block`` and ``client.relations.unblock`` for blocking/unblocking users.
1314
* Implemented ``/api/games/export/imports`` under
1415
``client.games.export_imported``.

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ Most of the API is available:
114114
client.broadcasts.get_pgns
115115
client.broadcasts.stream_round
116116
client.broadcasts.get_top
117+
client.broadcasts.search
117118
118119
client.bulk_pairings.get_upcoming
119120
client.bulk_pairings.create

berserk/clients/broadcasts.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from ..formats import PGN
77
from .base import BaseClient
88

9-
from ..types.broadcast import BroadcastPlayer, BroadcastTop
9+
from ..types.broadcast import BroadcastPlayer, BroadcastTop, PaginatedBroadcasts
1010
from ..utils import to_str
1111

1212

@@ -259,3 +259,18 @@ def get_top(
259259
path = "/api/broadcast/top"
260260
params = {"page": page, "html": html}
261261
return cast(BroadcastTop, self._r.get(path, params=params))
262+
263+
def search(
264+
self,
265+
query: str,
266+
page: int = 1,
267+
) -> PaginatedBroadcasts:
268+
"""Search for broadcasts.
269+
270+
:param query: search query text
271+
:param page: the page number to fetch (default: 1)
272+
:return: paginated list of broadcasts matching the search query
273+
"""
274+
path = "/api/broadcast/search"
275+
params = {"q": query, "page": page}
276+
return cast(PaginatedBroadcasts, self._r.get(path, params=params))

berserk/types/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
from .account import AccountInformation, Perf, Preferences, Profile, StreamerInfo
4-
from .broadcast import BroadcastPlayer
4+
from .broadcast import BroadcastPlayer, BroadcastTop, PaginatedBroadcasts
55
from .bulk_pairings import BulkPairing, BulkPairingGame
66
from .challenges import ChallengeJson
77
from .common import ClockConfig, ExternalEngine, LightUser, OnlineLightUser, VariantKey
@@ -21,6 +21,7 @@
2121
"AccountInformation",
2222
"ArenaResult",
2323
"BroadcastPlayer",
24+
"BroadcastTop",
2425
"BulkPairing",
2526
"BulkPairingGame",
2627
"ChallengeJson",
@@ -33,6 +34,7 @@
3334
"OnlineLightUser",
3435
"OpeningExplorerRating",
3536
"OpeningStatistic",
37+
"PaginatedBroadcasts",
3638
"PaginatedTeams",
3739
"Perf",
3840
"Preferences",

berserk/types/broadcast.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class BroadcastWithLastRound(TypedDict):
7878
roundToLink: NotRequired[BroadcastRoundInfo]
7979

8080

81-
class BroadcastPastPage(TypedDict):
81+
class PaginatedBroadcasts(TypedDict):
8282
currentPage: int
8383
maxPerPage: int
8484
currentPageResults: List[BroadcastWithLastRound]
@@ -89,4 +89,4 @@ class BroadcastPastPage(TypedDict):
8989
class BroadcastTop(TypedDict):
9090
active: List[BroadcastWithLastRound]
9191
upcoming: List[None] # deprecated
92-
past: BroadcastPastPage
92+
past: PaginatedBroadcasts

tests/clients/cassettes/test_broadcasts/TestBroadcasts.test_search.yaml

Lines changed: 148 additions & 0 deletions
Large diffs are not rendered by default.

tests/clients/test_broadcasts.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22

33
from berserk import Client
4-
from berserk.types.broadcast import BroadcastTop
4+
from berserk.types import BroadcastTop, PaginatedBroadcasts
55
from utils import skip_if_older_3_dot_10, validate
66

77

@@ -11,3 +11,9 @@ class TestBroadcasts:
1111
def test_get_top(self):
1212
res = Client().broadcasts.get_top(page=1, html=False)
1313
validate(BroadcastTop, res)
14+
15+
@skip_if_older_3_dot_10
16+
@pytest.mark.vcr
17+
def test_search(self):
18+
res = Client().broadcasts.search(query="chess", page=1)
19+
validate(PaginatedBroadcasts, res)

0 commit comments

Comments
 (0)