deezer-python-gql 0.20.0__tar.gz → 0.21.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.
Files changed (102) hide show
  1. {deezer_python_gql-0.20.0/deezer_python_gql.egg-info → deezer_python_gql-0.21.0}/PKG-INFO +6 -5
  2. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/README.md +1 -0
  3. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/__init__.py +6 -0
  4. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/client.py +34 -0
  5. deezer_python_gql-0.21.0/deezer_python_gql/generated/move_track_in_playlist.py +21 -0
  6. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0/deezer_python_gql.egg-info}/PKG-INFO +6 -5
  7. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql.egg-info/SOURCES.txt +1 -0
  8. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql.egg-info/requires.txt +4 -4
  9. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/pyproject.toml +6 -6
  10. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/tests/test_client.py +9 -0
  11. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/LICENSE +0 -0
  12. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/MANIFEST.in +0 -0
  13. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/__init__.py +0 -0
  14. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/base_client.py +0 -0
  15. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_album_to_favorite.py +0 -0
  16. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_artist_to_favorite.py +0 -0
  17. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_audiobook_to_favorite.py +0 -0
  18. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_playlist_to_favorite.py +0 -0
  19. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_podcast_to_favorite.py +0 -0
  20. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_track_to_favorite.py +0 -0
  21. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/add_tracks_to_playlist.py +0 -0
  22. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/ban_artist_from_recommendation.py +0 -0
  23. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/ban_track_from_recommendation.py +0 -0
  24. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/base_client.py +0 -0
  25. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/base_model.py +0 -0
  26. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/bookmark_podcast_episode.py +0 -0
  27. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/create_playlist.py +0 -0
  28. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/delete_playlist.py +0 -0
  29. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/enums.py +0 -0
  30. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/fragments.py +0 -0
  31. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_album.py +0 -0
  32. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_artist.py +0 -0
  33. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_artist_mix.py +0 -0
  34. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_audiobook.py +0 -0
  35. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_audiobook_chapter.py +0 -0
  36. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_banned_artists.py +0 -0
  37. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_banned_tracks.py +0 -0
  38. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_charts.py +0 -0
  39. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_family.py +0 -0
  40. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_favorite_albums.py +0 -0
  41. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_favorite_artists.py +0 -0
  42. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_favorite_audiobooks.py +0 -0
  43. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_favorite_playlists.py +0 -0
  44. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_favorite_podcasts.py +0 -0
  45. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_favorite_tracks.py +0 -0
  46. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_flow.py +0 -0
  47. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_flow_batch.py +0 -0
  48. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_flow_config_tracks.py +0 -0
  49. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_flow_configs.py +0 -0
  50. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_flow_tuner.py +0 -0
  51. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_infinite_track_mix.py +0 -0
  52. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_latest_podcast_episodes.py +0 -0
  53. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_livestream.py +0 -0
  54. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_made_for_me.py +0 -0
  55. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_me.py +0 -0
  56. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_music_together_affinity.py +0 -0
  57. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_music_together_group.py +0 -0
  58. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_music_together_groups.py +0 -0
  59. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_personal_tracks.py +0 -0
  60. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_playlist.py +0 -0
  61. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_podcast.py +0 -0
  62. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_podcast_episode.py +0 -0
  63. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_podcast_episode_bookmarks.py +0 -0
  64. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_podcast_episodes_by_ids.py +0 -0
  65. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_recently_played.py +0 -0
  66. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_recommendations.py +0 -0
  67. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_similar_artists.py +0 -0
  68. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_similar_tracks.py +0 -0
  69. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_smart_tracklist.py +0 -0
  70. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_track.py +0 -0
  71. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_track_mix.py +0 -0
  72. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_tracks_by_ids.py +0 -0
  73. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_user_charts.py +0 -0
  74. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/get_user_playlists.py +0 -0
  75. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/input_types.py +0 -0
  76. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/mark_as_not_played_podcast_episode.py +0 -0
  77. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/mark_as_played_podcast_episode.py +0 -0
  78. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/music_together_create_group.py +0 -0
  79. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/music_together_generate_group_name.py +0 -0
  80. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/music_together_join_group.py +0 -0
  81. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/music_together_leave_group.py +0 -0
  82. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/music_together_refresh_suggested_tracklist.py +0 -0
  83. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/music_together_update_group_settings.py +0 -0
  84. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_album_from_favorite.py +0 -0
  85. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_artist_from_favorite.py +0 -0
  86. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_audiobook_from_favorite.py +0 -0
  87. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_playlist_from_favorite.py +0 -0
  88. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_podcast_from_favorite.py +0 -0
  89. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_track_from_favorite.py +0 -0
  90. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/remove_tracks_from_playlist.py +0 -0
  91. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/search.py +0 -0
  92. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/search_flows.py +0 -0
  93. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/set_flow_discovery_tuner.py +0 -0
  94. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/unban_artist_from_recommendation.py +0 -0
  95. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/unban_track_from_recommendation.py +0 -0
  96. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/unbookmark_podcast_episode.py +0 -0
  97. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/generated/update_playlist.py +0 -0
  98. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql/py.typed +0 -0
  99. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql.egg-info/dependency_links.txt +0 -0
  100. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql.egg-info/not-zip-safe +0 -0
  101. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/deezer_python_gql.egg-info/top_level.txt +0 -0
  102. {deezer_python_gql-0.20.0 → deezer_python_gql-0.21.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deezer-python-gql
3
- Version: 0.20.0
3
+ Version: 0.21.0
4
4
  Summary: Async typed Python client for Deezer's Pipe GraphQL API.
5
5
  Author-email: Julian Daberkow <jdaberkow@users.noreply.github.com>
6
6
  License: Apache-2.0
@@ -16,13 +16,13 @@ Requires-Dist: pydantic>=2.0.0
16
16
  Requires-Dist: yarl>=1.22.0
17
17
  Provides-Extra: test
18
18
  Requires-Dist: codespell==2.4.3; extra == "test"
19
- Requires-Dist: mypy==2.3.1; extra == "test"
20
- Requires-Dist: pre-commit==4.6.2; extra == "test"
19
+ Requires-Dist: mypy==2.4.0; extra == "test"
20
+ Requires-Dist: pre-commit==4.7.0; extra == "test"
21
21
  Requires-Dist: pre-commit-hooks==6.0.0; extra == "test"
22
22
  Requires-Dist: pytest==9.1.1; extra == "test"
23
- Requires-Dist: pytest-asyncio==1.4.0; extra == "test"
23
+ Requires-Dist: pytest-asyncio==1.4.1; extra == "test"
24
24
  Requires-Dist: pytest-cov==7.1.0; extra == "test"
25
- Requires-Dist: ruff==0.16.9; extra == "test"
25
+ Requires-Dist: ruff==0.17.2; extra == "test"
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: ariadne-codegen[subscriptions]; extra == "dev"
28
28
  Dynamic: license-file
@@ -191,6 +191,7 @@ Keep a track or artist out of the user's recommendations (Flow, mixes).
191
191
  | `delete_playlist(playlist_id)` | Delete a playlist |
192
192
  | `add_tracks_to_playlist(playlist_id, track_ids)` | Add tracks to a playlist |
193
193
  | `remove_tracks_from_playlist(playlist_id, ...)` | Remove tracks from a playlist |
194
+ | `move_track_in_playlist(playlist_id, ...)` | Move a track behind another one or to the top |
194
195
 
195
196
  ### Podcast Episode Management
196
197
 
@@ -162,6 +162,7 @@ Keep a track or artist out of the user's recommendations (Flow, mixes).
162
162
  | `delete_playlist(playlist_id)` | Delete a playlist |
163
163
  | `add_tracks_to_playlist(playlist_id, track_ids)` | Add tracks to a playlist |
164
164
  | `remove_tracks_from_playlist(playlist_id, ...)` | Remove tracks from a playlist |
165
+ | `move_track_in_playlist(playlist_id, ...)` | Move a track behind another one or to the top |
165
166
 
166
167
  ### Podcast Episode Management
167
168
 
@@ -561,6 +561,10 @@ from .mark_as_played_podcast_episode import (
561
561
  MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisode,
562
562
  MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisodeBookmark,
563
563
  )
564
+ from .move_track_in_playlist import (
565
+ MoveTrackInPlaylist,
566
+ MoveTrackInPlaylistMoveTrackInPlaylist,
567
+ )
564
568
  from .music_together_create_group import (
565
569
  MusicTogetherCreateGroup,
566
570
  MusicTogetherCreateGroupMusicTogetherCreateGroupMusicTogetherCreateGroupError,
@@ -1143,6 +1147,8 @@ __all__ = [
1143
1147
  "MarkAsPlayedPodcastEpisode",
1144
1148
  "MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisode",
1145
1149
  "MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisodeBookmark",
1150
+ "MoveTrackInPlaylist",
1151
+ "MoveTrackInPlaylistMoveTrackInPlaylist",
1146
1152
  "MusicTogetherCreateGroup",
1147
1153
  "MusicTogetherCreateGroupMusicTogetherCreateGroupMusicTogetherCreateGroupError",
1148
1154
  "MusicTogetherCreateGroupMusicTogetherCreateGroupMusicTogetherCreateGroupOutput",
@@ -127,6 +127,10 @@ from .mark_as_played_podcast_episode import (
127
127
  MarkAsPlayedPodcastEpisode,
128
128
  MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisode,
129
129
  )
130
+ from .move_track_in_playlist import (
131
+ MoveTrackInPlaylist,
132
+ MoveTrackInPlaylistMoveTrackInPlaylist,
133
+ )
130
134
  from .music_together_create_group import (
131
135
  MusicTogetherCreateGroup,
132
136
  MusicTogetherCreateGroupMusicTogetherCreateGroupMusicTogetherCreateGroupError,
@@ -4435,6 +4439,36 @@ class DeezerGQLClient(DeezerBaseClient):
4435
4439
  data = self.get_data(response)
4436
4440
  return RemoveTracksFromPlaylist.model_validate(data).remove_tracks_from_playlist
4437
4441
 
4442
+ async def move_track_in_playlist(
4443
+ self,
4444
+ playlist_id: str,
4445
+ track_id: str,
4446
+ after_track_id: Union[Optional[str], UnsetType] = UNSET,
4447
+ **kwargs: Any,
4448
+ ) -> MoveTrackInPlaylistMoveTrackInPlaylist:
4449
+ query = gql("""
4450
+ mutation MoveTrackInPlaylist($playlistId: String!, $trackId: String!, $afterTrackId: String) {
4451
+ moveTrackInPlaylist(
4452
+ input: {playlistId: $playlistId, trackId: $trackId, afterTrackId: $afterTrackId}
4453
+ ) {
4454
+ moveStatus
4455
+ }
4456
+ }
4457
+ """)
4458
+ variables: dict[str, object] = {
4459
+ "playlistId": playlist_id,
4460
+ "trackId": track_id,
4461
+ "afterTrackId": after_track_id,
4462
+ }
4463
+ response = await self.execute(
4464
+ query=query,
4465
+ operation_name="MoveTrackInPlaylist",
4466
+ variables=variables,
4467
+ **kwargs,
4468
+ )
4469
+ data = self.get_data(response)
4470
+ return MoveTrackInPlaylist.model_validate(data).move_track_in_playlist
4471
+
4438
4472
  async def ban_track_from_recommendation(
4439
4473
  self, track_id: str, **kwargs: Any
4440
4474
  ) -> BanTrackFromRecommendationBanTrackFromRecommendation:
@@ -0,0 +1,21 @@
1
+ # Generated by ariadne-codegen
2
+ # Source: queries
3
+
4
+ from typing import Optional
5
+
6
+ from pydantic import Field
7
+
8
+ from .base_model import BaseModel
9
+
10
+
11
+ class MoveTrackInPlaylist(BaseModel):
12
+ move_track_in_playlist: "MoveTrackInPlaylistMoveTrackInPlaylist" = Field(
13
+ alias="moveTrackInPlaylist"
14
+ )
15
+
16
+
17
+ class MoveTrackInPlaylistMoveTrackInPlaylist(BaseModel):
18
+ move_status: Optional[bool] = Field(alias="moveStatus")
19
+
20
+
21
+ MoveTrackInPlaylist.model_rebuild()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deezer-python-gql
3
- Version: 0.20.0
3
+ Version: 0.21.0
4
4
  Summary: Async typed Python client for Deezer's Pipe GraphQL API.
5
5
  Author-email: Julian Daberkow <jdaberkow@users.noreply.github.com>
6
6
  License: Apache-2.0
@@ -16,13 +16,13 @@ Requires-Dist: pydantic>=2.0.0
16
16
  Requires-Dist: yarl>=1.22.0
17
17
  Provides-Extra: test
18
18
  Requires-Dist: codespell==2.4.3; extra == "test"
19
- Requires-Dist: mypy==2.3.1; extra == "test"
20
- Requires-Dist: pre-commit==4.6.2; extra == "test"
19
+ Requires-Dist: mypy==2.4.0; extra == "test"
20
+ Requires-Dist: pre-commit==4.7.0; extra == "test"
21
21
  Requires-Dist: pre-commit-hooks==6.0.0; extra == "test"
22
22
  Requires-Dist: pytest==9.1.1; extra == "test"
23
- Requires-Dist: pytest-asyncio==1.4.0; extra == "test"
23
+ Requires-Dist: pytest-asyncio==1.4.1; extra == "test"
24
24
  Requires-Dist: pytest-cov==7.1.0; extra == "test"
25
- Requires-Dist: ruff==0.16.9; extra == "test"
25
+ Requires-Dist: ruff==0.17.2; extra == "test"
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: ariadne-codegen[subscriptions]; extra == "dev"
28
28
  Dynamic: license-file
@@ -191,6 +191,7 @@ Keep a track or artist out of the user's recommendations (Flow, mixes).
191
191
  | `delete_playlist(playlist_id)` | Delete a playlist |
192
192
  | `add_tracks_to_playlist(playlist_id, track_ids)` | Add tracks to a playlist |
193
193
  | `remove_tracks_from_playlist(playlist_id, ...)` | Remove tracks from a playlist |
194
+ | `move_track_in_playlist(playlist_id, ...)` | Move a track behind another one or to the top |
194
195
 
195
196
  ### Podcast Episode Management
196
197
 
@@ -76,6 +76,7 @@ deezer_python_gql/generated/get_user_playlists.py
76
76
  deezer_python_gql/generated/input_types.py
77
77
  deezer_python_gql/generated/mark_as_not_played_podcast_episode.py
78
78
  deezer_python_gql/generated/mark_as_played_podcast_episode.py
79
+ deezer_python_gql/generated/move_track_in_playlist.py
79
80
  deezer_python_gql/generated/music_together_create_group.py
80
81
  deezer_python_gql/generated/music_together_generate_group_name.py
81
82
  deezer_python_gql/generated/music_together_join_group.py
@@ -7,10 +7,10 @@ ariadne-codegen[subscriptions]
7
7
 
8
8
  [test]
9
9
  codespell==2.4.3
10
- mypy==2.3.1
11
- pre-commit==4.6.2
10
+ mypy==2.4.0
11
+ pre-commit==4.7.0
12
12
  pre-commit-hooks==6.0.0
13
13
  pytest==9.1.1
14
- pytest-asyncio==1.4.0
14
+ pytest-asyncio==1.4.1
15
15
  pytest-cov==7.1.0
16
- ruff==0.16.9
16
+ ruff==0.17.2
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deezer-python-gql"
3
- version = "0.20.0"
3
+ version = "0.21.0"
4
4
  description = "Async typed Python client for Deezer's Pipe GraphQL API."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -24,13 +24,13 @@ text = "Apache-2.0"
24
24
  [project.optional-dependencies]
25
25
  test = [
26
26
  "codespell==2.4.3",
27
- "mypy==2.3.1",
28
- "pre-commit==4.6.2",
27
+ "mypy==2.4.0",
28
+ "pre-commit==4.7.0",
29
29
  "pre-commit-hooks==6.0.0",
30
30
  "pytest==9.1.1",
31
- "pytest-asyncio==1.4.0",
31
+ "pytest-asyncio==1.4.1",
32
32
  "pytest-cov==7.1.0",
33
- "ruff==0.16.9",
33
+ "ruff==0.17.2",
34
34
  ]
35
35
  dev = [
36
36
  "ariadne-codegen[subscriptions]",
@@ -182,5 +182,5 @@ asyncio_mode = "auto"
182
182
 
183
183
  [tool.uv]
184
184
  override-dependencies = [
185
- "ruff==0.16.9",
185
+ "ruff==0.17.2",
186
186
  ]
@@ -105,6 +105,7 @@ from deezer_python_gql.generated.mark_as_not_played_podcast_episode import (
105
105
  from deezer_python_gql.generated.mark_as_played_podcast_episode import (
106
106
  MarkAsPlayedPodcastEpisode,
107
107
  )
108
+ from deezer_python_gql.generated.move_track_in_playlist import MoveTrackInPlaylist
108
109
  from deezer_python_gql.generated.music_together_create_group import (
109
110
  MusicTogetherCreateGroup,
110
111
  )
@@ -340,6 +341,7 @@ def test_client_has_generated_methods() -> None:
340
341
  "delete_playlist",
341
342
  "add_tracks_to_playlist",
342
343
  "remove_tracks_from_playlist",
344
+ "move_track_in_playlist",
343
345
  "get_podcast",
344
346
  "get_podcast_episode",
345
347
  "get_podcast_episodes_by_ids",
@@ -1523,6 +1525,13 @@ def test_smoke_remove_tracks_from_playlist() -> None:
1523
1525
  assert result.remove_tracks_from_playlist.removed_track_ids == ["100000001", "100000002"]
1524
1526
 
1525
1527
 
1528
+ def test_smoke_move_track_in_playlist() -> None:
1529
+ """Verify MoveTrackInPlaylist fixture parses with move status."""
1530
+ data = _load_fixture("move_track_in_playlist.json")
1531
+ result = MoveTrackInPlaylist.model_validate(data)
1532
+ assert result.move_track_in_playlist.move_status is True
1533
+
1534
+
1526
1535
  def test_smoke_get_livestream() -> None:
1527
1536
  """Verify GetLivestream fixture parses with fields and media URLs."""
1528
1537
  data = _load_fixture("get_livestream.json")