deezer-python-gql 0.2.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deezer_python_gql-0.2.0/deezer_python_gql.egg-info → deezer_python_gql-0.4.0}/PKG-INFO +1 -1
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0/deezer_python_gql.egg-info}/PKG-INFO +1 -1
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/pyproject.toml +1 -1
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/tests/test_client.py +178 -10
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/LICENSE +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/MANIFEST.in +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/README.md +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql/__init__.py +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql/base_client.py +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql/py.typed +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/SOURCES.txt +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/dependency_links.txt +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/not-zip-safe +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/requires.txt +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/top_level.txt +0 -0
- {deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/setup.cfg +0 -0
|
@@ -26,6 +26,13 @@ from deezer_python_gql.base_client import (
|
|
|
26
26
|
GraphQLClientHttpError,
|
|
27
27
|
GraphQLClientInvalidResponseError,
|
|
28
28
|
)
|
|
29
|
+
from deezer_python_gql.generated.add_album_to_favorite import AddAlbumToFavorite
|
|
30
|
+
from deezer_python_gql.generated.add_artist_to_favorite import AddArtistToFavorite
|
|
31
|
+
from deezer_python_gql.generated.add_playlist_to_favorite import AddPlaylistToFavorite
|
|
32
|
+
from deezer_python_gql.generated.add_track_to_favorite import AddTrackToFavorite
|
|
33
|
+
from deezer_python_gql.generated.add_tracks_to_playlist import AddTracksToPlaylist
|
|
34
|
+
from deezer_python_gql.generated.create_playlist import CreatePlaylist
|
|
35
|
+
from deezer_python_gql.generated.delete_playlist import DeletePlaylist
|
|
29
36
|
from deezer_python_gql.generated.get_album import GetAlbum
|
|
30
37
|
from deezer_python_gql.generated.get_artist import GetArtist
|
|
31
38
|
from deezer_python_gql.generated.get_charts import GetCharts
|
|
@@ -44,8 +51,17 @@ from deezer_python_gql.generated.get_recommendations import GetRecommendations
|
|
|
44
51
|
from deezer_python_gql.generated.get_smart_tracklist import GetSmartTracklist
|
|
45
52
|
from deezer_python_gql.generated.get_track import GetTrack
|
|
46
53
|
from deezer_python_gql.generated.get_user_charts import GetUserCharts
|
|
54
|
+
from deezer_python_gql.generated.get_user_playlists import GetUserPlaylists
|
|
55
|
+
from deezer_python_gql.generated.remove_album_from_favorite import RemoveAlbumFromFavorite
|
|
56
|
+
from deezer_python_gql.generated.remove_artist_from_favorite import RemoveArtistFromFavorite
|
|
57
|
+
from deezer_python_gql.generated.remove_playlist_from_favorite import (
|
|
58
|
+
RemovePlaylistFromFavorite,
|
|
59
|
+
)
|
|
60
|
+
from deezer_python_gql.generated.remove_track_from_favorite import RemoveTrackFromFavorite
|
|
61
|
+
from deezer_python_gql.generated.remove_tracks_from_playlist import RemoveTracksFromPlaylist
|
|
47
62
|
from deezer_python_gql.generated.search import Search
|
|
48
63
|
from deezer_python_gql.generated.search_flows import SearchFlows
|
|
64
|
+
from deezer_python_gql.generated.update_playlist import UpdatePlaylist
|
|
49
65
|
|
|
50
66
|
FIXTURES = Path(__file__).parent / "fixtures"
|
|
51
67
|
|
|
@@ -131,6 +147,20 @@ def test_client_has_generated_methods() -> None:
|
|
|
131
147
|
"get_favorite_playlists",
|
|
132
148
|
"search_flows",
|
|
133
149
|
"get_user_charts",
|
|
150
|
+
"get_user_playlists",
|
|
151
|
+
"add_artist_to_favorite",
|
|
152
|
+
"remove_artist_from_favorite",
|
|
153
|
+
"add_album_to_favorite",
|
|
154
|
+
"remove_album_from_favorite",
|
|
155
|
+
"add_track_to_favorite",
|
|
156
|
+
"remove_track_from_favorite",
|
|
157
|
+
"add_playlist_to_favorite",
|
|
158
|
+
"remove_playlist_from_favorite",
|
|
159
|
+
"create_playlist",
|
|
160
|
+
"update_playlist",
|
|
161
|
+
"delete_playlist",
|
|
162
|
+
"add_tracks_to_playlist",
|
|
163
|
+
"remove_tracks_from_playlist",
|
|
134
164
|
]
|
|
135
165
|
for method in expected_methods:
|
|
136
166
|
assert hasattr(client, method), f"Missing method: {method}"
|
|
@@ -588,6 +618,7 @@ def test_smoke_get_favorite_artists() -> None:
|
|
|
588
618
|
artist_node = artists.edges[0].node
|
|
589
619
|
assert artist_node is not None
|
|
590
620
|
assert artist_node.name == "Daft Punk"
|
|
621
|
+
assert artists.edges[0].favorited_at == "2025-06-15"
|
|
591
622
|
assert artists.page_info.has_next_page is True
|
|
592
623
|
|
|
593
624
|
|
|
@@ -602,6 +633,7 @@ def test_smoke_get_favorite_albums() -> None:
|
|
|
602
633
|
album_node = albums.edges[0].node
|
|
603
634
|
assert album_node is not None
|
|
604
635
|
assert album_node.display_title == "Discovery"
|
|
636
|
+
assert albums.edges[0].favorited_at == "2025-06-15"
|
|
605
637
|
assert albums.page_info.has_next_page is True
|
|
606
638
|
|
|
607
639
|
|
|
@@ -616,6 +648,7 @@ def test_smoke_get_favorite_tracks() -> None:
|
|
|
616
648
|
track_node = tracks.edges[0].node
|
|
617
649
|
assert track_node is not None
|
|
618
650
|
assert track_node.title == "Harder, Better, Faster, Stronger"
|
|
651
|
+
assert tracks.edges[0].favorited_at == "2025-06-15"
|
|
619
652
|
assert tracks.page_info.has_next_page is True
|
|
620
653
|
|
|
621
654
|
|
|
@@ -630,6 +663,7 @@ def test_smoke_get_favorite_playlists() -> None:
|
|
|
630
663
|
playlist_node = playlists.edges[0].node
|
|
631
664
|
assert playlist_node is not None
|
|
632
665
|
assert playlist_node.title == "Electronic Hits"
|
|
666
|
+
assert playlists.edges[0].favorited_at == "2025-06-15"
|
|
633
667
|
assert playlists.page_info.has_next_page is True
|
|
634
668
|
|
|
635
669
|
|
|
@@ -650,20 +684,154 @@ def test_smoke_search_flows() -> None:
|
|
|
650
684
|
|
|
651
685
|
|
|
652
686
|
def test_smoke_get_user_charts() -> None:
|
|
653
|
-
"""Verify GetUserCharts fixture parses personal top tracks
|
|
687
|
+
"""Verify GetUserCharts fixture parses personal top tracks, artists, and albums."""
|
|
654
688
|
data = _load_fixture("get_user_charts.json")
|
|
655
689
|
me = GetUserCharts.model_validate(data).me
|
|
656
690
|
assert me is not None
|
|
657
691
|
charts = me.charts
|
|
692
|
+
assert charts is not None
|
|
658
693
|
assert charts.tracks is not None
|
|
659
|
-
assert len(charts.tracks.edges)
|
|
660
|
-
assert charts.tracks.edges[0].node is not None
|
|
661
|
-
assert charts.tracks.edges[0].node.title == "Harder, Better, Faster, Stronger"
|
|
694
|
+
assert len(charts.tracks.edges) > 0
|
|
662
695
|
assert charts.artists is not None
|
|
663
|
-
assert len(charts.artists.edges)
|
|
664
|
-
assert charts.artists.edges[0].node is not None
|
|
665
|
-
assert charts.artists.edges[0].node.name == "Daft Punk"
|
|
696
|
+
assert len(charts.artists.edges) > 0
|
|
666
697
|
assert charts.albums is not None
|
|
667
|
-
assert len(charts.albums.edges)
|
|
668
|
-
|
|
669
|
-
|
|
698
|
+
assert len(charts.albums.edges) > 0
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
# ---------------------------------------------------------------------------
|
|
702
|
+
# 6. User playlists query smoke test
|
|
703
|
+
# ---------------------------------------------------------------------------
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
def test_smoke_get_user_playlists() -> None:
|
|
707
|
+
"""Verify GetUserPlaylists fixture parses with paginated playlist nodes."""
|
|
708
|
+
data = _load_fixture("get_user_playlists.json")
|
|
709
|
+
me = GetUserPlaylists.model_validate(data).me
|
|
710
|
+
assert me is not None
|
|
711
|
+
playlists = me.playlists
|
|
712
|
+
assert len(playlists.edges) == 1
|
|
713
|
+
node = playlists.edges[0].node
|
|
714
|
+
assert node is not None
|
|
715
|
+
assert node.id == "1000000001"
|
|
716
|
+
assert node.title == "My Playlist"
|
|
717
|
+
assert node.estimated_tracks_count == 42
|
|
718
|
+
assert node.owner is not None
|
|
719
|
+
assert node.owner.name == "TestUser"
|
|
720
|
+
assert playlists.page_info.has_next_page is False
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
# ---------------------------------------------------------------------------
|
|
724
|
+
# 7. Favorite mutation smoke tests
|
|
725
|
+
# ---------------------------------------------------------------------------
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
def test_smoke_add_artist_to_favorite() -> None:
|
|
729
|
+
"""Verify AddArtistToFavorite fixture parses with returned artist."""
|
|
730
|
+
data = _load_fixture("add_artist_to_favorite.json")
|
|
731
|
+
result = AddArtistToFavorite.model_validate(data)
|
|
732
|
+
assert result.add_artist_to_favorite.artist.id == "100000001"
|
|
733
|
+
assert result.add_artist_to_favorite.artist.name == "Test Artist"
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
def test_smoke_remove_artist_from_favorite() -> None:
|
|
737
|
+
"""Verify RemoveArtistFromFavorite fixture parses with returned artist."""
|
|
738
|
+
data = _load_fixture("remove_artist_from_favorite.json")
|
|
739
|
+
result = RemoveArtistFromFavorite.model_validate(data)
|
|
740
|
+
assert result.remove_artist_from_favorite.artist.id == "100000001"
|
|
741
|
+
assert result.remove_artist_from_favorite.artist.name == "Test Artist"
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
def test_smoke_add_album_to_favorite() -> None:
|
|
745
|
+
"""Verify AddAlbumToFavorite fixture parses with returned album."""
|
|
746
|
+
data = _load_fixture("add_album_to_favorite.json")
|
|
747
|
+
result = AddAlbumToFavorite.model_validate(data)
|
|
748
|
+
assert result.add_album_to_favorite.album.id == "100000001"
|
|
749
|
+
assert result.add_album_to_favorite.album.display_title == "Test Album"
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
def test_smoke_remove_album_from_favorite() -> None:
|
|
753
|
+
"""Verify RemoveAlbumFromFavorite fixture parses with returned album."""
|
|
754
|
+
data = _load_fixture("remove_album_from_favorite.json")
|
|
755
|
+
result = RemoveAlbumFromFavorite.model_validate(data)
|
|
756
|
+
assert result.remove_album_from_favorite.album.id == "100000001"
|
|
757
|
+
assert result.remove_album_from_favorite.album.display_title == "Test Album"
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
def test_smoke_add_track_to_favorite() -> None:
|
|
761
|
+
"""Verify AddTrackToFavorite fixture parses with returned track."""
|
|
762
|
+
data = _load_fixture("add_track_to_favorite.json")
|
|
763
|
+
result = AddTrackToFavorite.model_validate(data)
|
|
764
|
+
assert result.add_track_to_favorite.track.id == "100000001"
|
|
765
|
+
assert result.add_track_to_favorite.track.title == "Test Track"
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
def test_smoke_remove_track_from_favorite() -> None:
|
|
769
|
+
"""Verify RemoveTrackFromFavorite fixture parses with returned track."""
|
|
770
|
+
data = _load_fixture("remove_track_from_favorite.json")
|
|
771
|
+
result = RemoveTrackFromFavorite.model_validate(data)
|
|
772
|
+
assert result.remove_track_from_favorite.track.id == "100000001"
|
|
773
|
+
assert result.remove_track_from_favorite.track.title == "Test Track"
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
def test_smoke_add_playlist_to_favorite() -> None:
|
|
777
|
+
"""Verify AddPlaylistToFavorite fixture parses with returned playlist."""
|
|
778
|
+
data = _load_fixture("add_playlist_to_favorite.json")
|
|
779
|
+
result = AddPlaylistToFavorite.model_validate(data)
|
|
780
|
+
assert result.add_playlist_to_favorite.playlist.id == "1000000001"
|
|
781
|
+
assert result.add_playlist_to_favorite.playlist.title == "Test Playlist"
|
|
782
|
+
|
|
783
|
+
|
|
784
|
+
def test_smoke_remove_playlist_from_favorite() -> None:
|
|
785
|
+
"""Verify RemovePlaylistFromFavorite fixture parses with returned playlist."""
|
|
786
|
+
data = _load_fixture("remove_playlist_from_favorite.json")
|
|
787
|
+
result = RemovePlaylistFromFavorite.model_validate(data)
|
|
788
|
+
assert result.remove_playlist_from_favorite.playlist.id == "1000000001"
|
|
789
|
+
assert result.remove_playlist_from_favorite.playlist.title == "Test Playlist"
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
# ---------------------------------------------------------------------------
|
|
793
|
+
# 8. Playlist mutation smoke tests
|
|
794
|
+
# ---------------------------------------------------------------------------
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
def test_smoke_create_playlist() -> None:
|
|
798
|
+
"""Verify CreatePlaylist fixture parses with returned playlist."""
|
|
799
|
+
data = _load_fixture("create_playlist.json")
|
|
800
|
+
result = CreatePlaylist.model_validate(data)
|
|
801
|
+
playlist = result.create_playlist.playlist
|
|
802
|
+
assert playlist is not None
|
|
803
|
+
assert playlist.id == "1000000001"
|
|
804
|
+
assert playlist.title == "New Playlist"
|
|
805
|
+
|
|
806
|
+
|
|
807
|
+
def test_smoke_update_playlist() -> None:
|
|
808
|
+
"""Verify UpdatePlaylist fixture parses with returned playlist."""
|
|
809
|
+
data = _load_fixture("update_playlist.json")
|
|
810
|
+
result = UpdatePlaylist.model_validate(data)
|
|
811
|
+
playlist = result.update_playlist.playlist
|
|
812
|
+
assert playlist is not None
|
|
813
|
+
assert playlist.id == "1000000001"
|
|
814
|
+
assert playlist.title == "Updated Playlist"
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
def test_smoke_delete_playlist() -> None:
|
|
818
|
+
"""Verify DeletePlaylist fixture parses with delete status."""
|
|
819
|
+
data = _load_fixture("delete_playlist.json")
|
|
820
|
+
result = DeletePlaylist.model_validate(data)
|
|
821
|
+
assert result.delete_playlist.delete_status is True
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
def test_smoke_add_tracks_to_playlist() -> None:
|
|
825
|
+
"""Verify AddTracksToPlaylist fixture parses the union success variant."""
|
|
826
|
+
data = _load_fixture("add_tracks_to_playlist.json")
|
|
827
|
+
result = AddTracksToPlaylist.model_validate(data)
|
|
828
|
+
output = result.add_tracks_to_playlist
|
|
829
|
+
assert output.typename__ == "PlaylistAddTracksOutput"
|
|
830
|
+
assert output.added_track_ids == ["100000001", "100000002"]
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
def test_smoke_remove_tracks_from_playlist() -> None:
|
|
834
|
+
"""Verify RemoveTracksFromPlaylist fixture parses with removed track IDs."""
|
|
835
|
+
data = _load_fixture("remove_tracks_from_playlist.json")
|
|
836
|
+
result = RemoveTracksFromPlaylist.model_validate(data)
|
|
837
|
+
assert result.remove_tracks_from_playlist.removed_track_ids == ["100000001", "100000002"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deezer_python_gql-0.2.0 → deezer_python_gql-0.4.0}/deezer_python_gql.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|