Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into introduce-exception-c…
Browse files Browse the repository at this point in the history
…lasses
  • Loading branch information
sigma67 committed Jul 13, 2024
2 parents bc167e3 + 14ae785 commit 95da073
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 69 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
ref: ${{ github.event.workflow_run.head_sha }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.x
python-version: 3.9
- name: Setup PDM
uses: pdm-project/setup-pdm@v4
- name: create-json
Expand Down
10 changes: 9 additions & 1 deletion tests/mixins/test_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ def test_get_library_songs(self, config, yt_oauth, yt_empty):
songs = yt_empty.get_library_songs()
assert len(songs) == 0

def test_get_library_albums_invalid_order(self, yt):
with pytest.raises(Exception):
yt.get_library_albums(100, order="invalid")

def test_get_library_albums(self, yt_oauth, yt_brand, yt_empty):
albums = yt_oauth.get_library_albums(100)
assert len(albums) > 50
Expand Down Expand Up @@ -102,8 +106,12 @@ def test_manipulate_history_items(self, yt_auth, sample_video):
def test_rate_song(self, yt_auth, sample_video):
response = yt_auth.rate_song(sample_video, "LIKE")
assert "actions" in response
response = yt_auth.rate_song(sample_video, "INDIFFERENT")
response = yt_auth.rate_song(sample_video, "DISLIKE")
assert "actions" in response
response = yt_auth.rate_song(sample_video, "INDIFFERENT")
assert response
response = yt_auth.rate_song(sample_video, "notexist")
assert not response

def test_edit_song_library_status(self, yt_brand, sample_album):
album = yt_brand.get_album(sample_album)
Expand Down
2 changes: 1 addition & 1 deletion tests/mixins/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def test_search_filters(self, yt_auth):
assert len(results) > 10
assert all(item["resultType"] == "podcast" for item in results)
results = yt_auth.search(query, filter="episodes")
assert len(results) > 5
assert len(results) >= 5
assert all(item["resultType"] == "episode" for item in results)

def test_search_top_result(self, yt):
Expand Down
66 changes: 0 additions & 66 deletions ytmusicapi/mixins/playlists.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,72 +106,6 @@ def get_playlist(
body = {"browseId": browseId}
endpoint = "browse"
response = self._send_request(endpoint, body)
results = nav(response, SINGLE_COLUMN_TAB + SECTION_LIST_ITEM + ["musicPlaylistShelfRenderer"], True)
if not results:
return self._parse_new_playlist_format(
response, endpoint, body, suggestions_limit, related, limit
)

playlist = {"id": results["playlistId"]}
playlist.update(parse_playlist_header(response))
if playlist["trackCount"] is None:
playlist["trackCount"] = len(results["contents"])

request_func = lambda additionalParams: self._send_request(endpoint, body, additionalParams)

# suggestions and related are missing e.g. on liked songs
section_list = nav(response, [*SINGLE_COLUMN_TAB, "sectionListRenderer"])
playlist["related"] = []
if "continuations" in section_list:
additionalParams = get_continuation_params(section_list)
if playlist["owned"] and (suggestions_limit > 0 or related):
parse_func = lambda results: parse_playlist_items(results)
suggested = request_func(additionalParams)
continuation = nav(suggested, SECTION_LIST_CONTINUATION)
additionalParams = get_continuation_params(continuation)
suggestions_shelf = nav(continuation, CONTENT + MUSIC_SHELF)
playlist["suggestions"] = get_continuation_contents(suggestions_shelf, parse_func)

parse_func = lambda results: parse_playlist_items(results)
playlist["suggestions"].extend(
get_continuations(
suggestions_shelf,
"musicShelfContinuation",
suggestions_limit - len(playlist["suggestions"]),
request_func,
parse_func,
reloadable=True,
)
)

if related:
response = request_func(additionalParams)
continuation = nav(response, SECTION_LIST_CONTINUATION, True)
if continuation:
parse_func = lambda results: parse_content_list(results, parse_playlist)
playlist["related"] = get_continuation_contents(
nav(continuation, CONTENT + CAROUSEL), parse_func
)

playlist["tracks"] = []
if "contents" in results:
playlist["tracks"] = parse_playlist_items(results["contents"])

parse_func = lambda contents: parse_playlist_items(contents)
if "continuations" in results:
playlist["tracks"].extend(
get_continuations(
results, "musicPlaylistShelfContinuation", limit, request_func, parse_func
)
)

playlist["duration_seconds"] = sum_total_duration(playlist)
return playlist

def _parse_new_playlist_format(
self, response: dict, endpoint, body, suggestions_limit, related, limit
) -> dict: # pragma: no cover
"""temporary function to avoid too many ifs in get_playlist during a/b test"""

header_data = nav(response, [*TWO_COLUMN_RENDERER, *TAB_CONTENT, *SECTION_LIST_ITEM])
section_list = nav(response, [*TWO_COLUMN_RENDERER, "secondaryContents", *SECTION])
Expand Down

0 comments on commit 95da073

Please sign in to comment.