deezer-python-gql 0.21.0__py3-none-any.whl → 0.22.2__py3-none-any.whl

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.
@@ -11,6 +11,7 @@ from dataclasses import dataclass
11
11
  from typing import TYPE_CHECKING, Any, ClassVar, Self, cast
12
12
 
13
13
  from aiohttp import ClientSession, ClientTimeout
14
+ from pydantic_core import to_jsonable_python
14
15
  from yarl import URL
15
16
 
16
17
  if TYPE_CHECKING:
@@ -227,8 +228,11 @@ class DeezerBaseClient:
227
228
  # Inline import avoids depending on generated code at module level.
228
229
  from deezer_python_gql.generated.base_model import UnsetType # noqa: PLC0415
229
230
 
231
+ # input types are pydantic models, sent under their GraphQL field names
230
232
  payload["variables"] = {
231
- k: v for k, v in variables.items() if not isinstance(v, UnsetType)
233
+ k: to_jsonable_python(v, by_alias=True)
234
+ for k, v in variables.items()
235
+ if not isinstance(v, UnsetType)
232
236
  }
233
237
 
234
238
  session = self._get_session()
@@ -284,11 +288,11 @@ class DeezerBaseClient:
284
288
  variables = response.variables
285
289
  if data:
286
290
  # Partial success — some items failed (e.g. deleted albums in favorites).
287
- # Log the errors but return the valid data.
291
+ # That is expected, so log at debug level and return the valid data.
288
292
  error_details = [
289
293
  f"{e.get('message', 'Unknown error')} (path={e.get('path')})" for e in errors
290
294
  ]
291
- logger.warning(
295
+ logger.debug(
292
296
  "GraphQL response for %s (variables=%s) contained %d error(s): %s",
293
297
  op,
294
298
  variables,
@@ -373,7 +377,8 @@ class DeezerBaseClient:
373
377
  text = await resp.text()
374
378
 
375
379
  if not is_success:
376
- if 400 <= status < 500:
380
+ # 429 is rate limiting, not a rejected ARL
381
+ if 400 <= status < 500 and status != 429:
377
382
  msg = f"ARL authentication rejected by auth.deezer.com (HTTP {status})"
378
383
  raise GraphQLClientAuthError(msg)
379
384
  raise GraphQLClientHttpError(
@@ -63,10 +63,12 @@ from .enums import (
63
63
  AudiobookContributorRoles,
64
64
  DiscoveryTuner,
65
65
  DiscoveryTunerInput,
66
+ MediaTypeInput,
66
67
  MusicTogetherRefreshSuggestedTracklistMoodInput,
67
68
  MusicTogetherSuggestedTracklistMoodInput,
68
69
  PodcastEpisodeOrder,
69
70
  PodcastType,
71
+ RepeatModeInput,
70
72
  TrackContributorRoles,
71
73
  )
72
74
  from .fragments import (
@@ -551,6 +553,12 @@ from .get_user_playlists import (
551
553
  GetUserPlaylistsMePlaylistsEdgesNode,
552
554
  GetUserPlaylistsMePlaylistsPageInfo,
553
555
  )
556
+ from .input_types import (
557
+ PushQueueContextInput,
558
+ PushQueueMediaInput,
559
+ PushQueueStateClientDetailsInput,
560
+ PushQueueStateInput,
561
+ )
554
562
  from .mark_as_not_played_podcast_episode import (
555
563
  MarkAsNotPlayedPodcastEpisode,
556
564
  MarkAsNotPlayedPodcastEpisodeMarkAsNotPlayedPodcastEpisode,
@@ -599,6 +607,13 @@ from .music_together_update_group_settings import (
599
607
  MusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsOutput,
600
608
  MusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsOutputGroup,
601
609
  )
610
+ from .push_queue_state import (
611
+ PushQueueState,
612
+ PushQueueStatePushQueueStatePushQueueStateError,
613
+ PushQueueStatePushQueueStatePushQueueStateErrorConflict,
614
+ PushQueueStatePushQueueStatePushQueueStateErrorConflictCurrent,
615
+ PushQueueStatePushQueueStatePushQueueStateOutput,
616
+ )
602
617
  from .remove_album_from_favorite import (
603
618
  RemoveAlbumFromFavorite,
604
619
  RemoveAlbumFromFavoriteRemoveAlbumFromFavorite,
@@ -1147,6 +1162,7 @@ __all__ = [
1147
1162
  "MarkAsPlayedPodcastEpisode",
1148
1163
  "MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisode",
1149
1164
  "MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisodeBookmark",
1165
+ "MediaTypeInput",
1150
1166
  "MoveTrackInPlaylist",
1151
1167
  "MoveTrackInPlaylistMoveTrackInPlaylist",
1152
1168
  "MusicTogetherCreateGroup",
@@ -1185,6 +1201,15 @@ __all__ = [
1185
1201
  "PodcastFields",
1186
1202
  "PodcastFieldsCover",
1187
1203
  "PodcastType",
1204
+ "PushQueueContextInput",
1205
+ "PushQueueMediaInput",
1206
+ "PushQueueState",
1207
+ "PushQueueStateClientDetailsInput",
1208
+ "PushQueueStateInput",
1209
+ "PushQueueStatePushQueueStatePushQueueStateError",
1210
+ "PushQueueStatePushQueueStatePushQueueStateErrorConflict",
1211
+ "PushQueueStatePushQueueStatePushQueueStateErrorConflictCurrent",
1212
+ "PushQueueStatePushQueueStatePushQueueStateOutput",
1188
1213
  "RemoveAlbumFromFavorite",
1189
1214
  "RemoveAlbumFromFavoriteRemoveAlbumFromFavorite",
1190
1215
  "RemoveAlbumFromFavoriteRemoveAlbumFromFavoriteAlbum",
@@ -1204,6 +1229,7 @@ __all__ = [
1204
1229
  "RemoveTrackFromFavoriteRemoveTrackFromFavoriteTrack",
1205
1230
  "RemoveTracksFromPlaylist",
1206
1231
  "RemoveTracksFromPlaylistRemoveTracksFromPlaylist",
1232
+ "RepeatModeInput",
1207
1233
  "Search",
1208
1234
  "SearchFlows",
1209
1235
  "SearchFlowsSearch",
@@ -13,6 +13,7 @@ from dataclasses import dataclass
13
13
  from typing import TYPE_CHECKING, Any, ClassVar, Self, cast
14
14
 
15
15
  from aiohttp import ClientSession, ClientTimeout
16
+ from pydantic_core import to_jsonable_python
16
17
  from yarl import URL
17
18
 
18
19
  if TYPE_CHECKING:
@@ -229,8 +230,11 @@ class DeezerBaseClient:
229
230
  # Inline import avoids depending on generated code at module level.
230
231
  from deezer_python_gql.generated.base_model import UnsetType # noqa: PLC0415
231
232
 
233
+ # input types are pydantic models, sent under their GraphQL field names
232
234
  payload["variables"] = {
233
- k: v for k, v in variables.items() if not isinstance(v, UnsetType)
235
+ k: to_jsonable_python(v, by_alias=True)
236
+ for k, v in variables.items()
237
+ if not isinstance(v, UnsetType)
234
238
  }
235
239
 
236
240
  session = self._get_session()
@@ -286,11 +290,11 @@ class DeezerBaseClient:
286
290
  variables = response.variables
287
291
  if data:
288
292
  # Partial success — some items failed (e.g. deleted albums in favorites).
289
- # Log the errors but return the valid data.
293
+ # That is expected, so log at debug level and return the valid data.
290
294
  error_details = [
291
295
  f"{e.get('message', 'Unknown error')} (path={e.get('path')})" for e in errors
292
296
  ]
293
- logger.warning(
297
+ logger.debug(
294
298
  "GraphQL response for %s (variables=%s) contained %d error(s): %s",
295
299
  op,
296
300
  variables,
@@ -375,7 +379,8 @@ class DeezerBaseClient:
375
379
  text = await resp.text()
376
380
 
377
381
  if not is_success:
378
- if 400 <= status < 500:
382
+ # 429 is rate limiting, not a rejected ARL
383
+ if 400 <= status < 500 and status != 429:
379
384
  msg = f"ARL authentication rejected by auth.deezer.com (HTTP {status})"
380
385
  raise GraphQLClientAuthError(msg)
381
386
  raise GraphQLClientHttpError(
@@ -119,6 +119,7 @@ from .get_track_mix import GetTrackMix, GetTrackMixTrackMix
119
119
  from .get_tracks_by_ids import GetTracksByIds, GetTracksByIdsTracksByIds
120
120
  from .get_user_charts import GetUserCharts, GetUserChartsMe
121
121
  from .get_user_playlists import GetUserPlaylists, GetUserPlaylistsMe
122
+ from .input_types import PushQueueStateInput
122
123
  from .mark_as_not_played_podcast_episode import (
123
124
  MarkAsNotPlayedPodcastEpisode,
124
125
  MarkAsNotPlayedPodcastEpisodeMarkAsNotPlayedPodcastEpisode,
@@ -160,6 +161,11 @@ from .music_together_update_group_settings import (
160
161
  MusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsError,
161
162
  MusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsMusicTogetherUpdateGroupSettingsOutput,
162
163
  )
164
+ from .push_queue_state import (
165
+ PushQueueState,
166
+ PushQueueStatePushQueueStatePushQueueStateError,
167
+ PushQueueStatePushQueueStatePushQueueStateOutput,
168
+ )
163
169
  from .remove_album_from_favorite import (
164
170
  RemoveAlbumFromFavorite,
165
171
  RemoveAlbumFromFavoriteRemoveAlbumFromFavorite,
@@ -4469,6 +4475,37 @@ class DeezerGQLClient(DeezerBaseClient):
4469
4475
  data = self.get_data(response)
4470
4476
  return MoveTrackInPlaylist.model_validate(data).move_track_in_playlist
4471
4477
 
4478
+ async def push_queue_state(
4479
+ self, input: PushQueueStateInput, **kwargs: Any
4480
+ ) -> Union[
4481
+ PushQueueStatePushQueueStatePushQueueStateOutput,
4482
+ PushQueueStatePushQueueStatePushQueueStateError,
4483
+ ]:
4484
+ query = gql("""
4485
+ mutation PushQueueState($input: PushQueueStateInput!) {
4486
+ pushQueueState(input: $input) {
4487
+ __typename
4488
+ ... on PushQueueStateOutput {
4489
+ version
4490
+ }
4491
+ ... on PushQueueStateError {
4492
+ isBadRequest
4493
+ conflict {
4494
+ current {
4495
+ version
4496
+ }
4497
+ }
4498
+ }
4499
+ }
4500
+ }
4501
+ """)
4502
+ variables: dict[str, object] = {"input": input}
4503
+ response = await self.execute(
4504
+ query=query, operation_name="PushQueueState", variables=variables, **kwargs
4505
+ )
4506
+ data = self.get_data(response)
4507
+ return PushQueueState.model_validate(data).push_queue_state
4508
+
4472
4509
  async def ban_track_from_recommendation(
4473
4510
  self, track_id: str, **kwargs: Any
4474
4511
  ) -> BanTrackFromRecommendationBanTrackFromRecommendation:
@@ -46,6 +46,20 @@ class PodcastEpisodeOrder(str, Enum):
46
46
  LATEST = "LATEST"
47
47
 
48
48
 
49
+ class MediaTypeInput(str, Enum):
50
+ TRACK = "TRACK"
51
+ EPISODE = "EPISODE"
52
+ CHAPTER = "CHAPTER"
53
+ LIVE = "LIVE"
54
+ RAW_URL = "RAW_URL"
55
+
56
+
57
+ class RepeatModeInput(str, Enum):
58
+ NONE = "NONE"
59
+ ONE = "ONE"
60
+ ALL = "ALL"
61
+
62
+
49
63
  class DiscoveryTuner(str, Enum):
50
64
  DEFAULT = "DEFAULT"
51
65
  DISCOVERY = "DISCOVERY"
@@ -1,3 +1,62 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: schema.graphql
3
3
 
4
+ from typing import Optional
5
+
6
+ from pydantic import Field
7
+
8
+ from .base_model import BaseModel
9
+ from .enums import MediaTypeInput, RepeatModeInput
10
+
11
+
12
+ class PushQueueStateInput(BaseModel):
13
+ client_details: "PushQueueStateClientDetailsInput" = Field(alias="clientDetails")
14
+ "Details about the client pushing the queue state"
15
+ media_list: list["PushQueueMediaInput"] = Field(alias="mediaList")
16
+ "List of all media in the queue in playing order"
17
+ position: int
18
+ "Zero based index of the current playback position in the queue"
19
+ progress_ms: Optional[int] = Field(alias="progressMS", default=None)
20
+ "Progress in the current media in ms"
21
+ previous_version: Optional[str] = Field(alias="previousVersion", default=None)
22
+ "Previous known queue state version\nNote: Except when there is no queue state available, this version MUST be provided otherwise you'll get a conflict error"
23
+ queue_configuration: str = Field(alias="queueConfiguration")
24
+ "Queue's configuration"
25
+ repeat_mode: RepeatModeInput = Field(alias="repeatMode")
26
+ "Queue repeat mode"
27
+ contexts: Optional[list["PushQueueContextInput"]] = None
28
+ "The list of unique contexts referenced by mediaList.contextId"
29
+
30
+
31
+ class PushQueueMediaInput(BaseModel):
32
+ """Details of media that belongs to the pushed queue"""
33
+
34
+ id: str
35
+ "The media id"
36
+ type_: MediaTypeInput = Field(alias="type")
37
+ "The media type"
38
+ context_id: Optional[str] = Field(alias="contextId", default=None)
39
+ 'The context identifier, it should correspond to an entry in "PushQueueStateInput.contexts"\nEach media can have its own context or share multiple time the same context by using the same contextId'
40
+ local_queue_item_id: Optional[str] = Field(alias="localQueueItemId", default=None)
41
+ "Item identifier used on client side"
42
+ unshuffled_position: int = Field(alias="unshuffledPosition")
43
+ "The position within the unshuffled version of the queue"
44
+
45
+
46
+ class PushQueueContextInput(BaseModel):
47
+ id: str
48
+ "Context identifier"
49
+ content: str
50
+ "The context content itself"
51
+
52
+
53
+ class PushQueueStateClientDetailsInput(BaseModel):
54
+ """Details about the client that wants to push the queue state"""
55
+
56
+ local_queue_id: str = Field(alias="localQueueID")
57
+ "Identifier of the client's local queue, doesn't necessarily match a real queue id"
58
+ locally_updated_at: str = Field(alias="locallyUpdatedAt")
59
+ "Date in ISO-8601 format including milliseconds when update was made on client"
60
+
61
+
62
+ PushQueueStateInput.model_rebuild()
@@ -0,0 +1,39 @@
1
+ # Generated by ariadne-codegen
2
+ # Source: queries
3
+
4
+ from typing import Literal, Optional, Union
5
+
6
+ from pydantic import Field
7
+
8
+ from .base_model import BaseModel
9
+
10
+
11
+ class PushQueueState(BaseModel):
12
+ push_queue_state: Union[
13
+ "PushQueueStatePushQueueStatePushQueueStateOutput",
14
+ "PushQueueStatePushQueueStatePushQueueStateError",
15
+ ] = Field(alias="pushQueueState", discriminator="typename__")
16
+
17
+
18
+ class PushQueueStatePushQueueStatePushQueueStateOutput(BaseModel):
19
+ typename__: Literal["PushQueueStateOutput"] = Field(alias="__typename")
20
+ version: str
21
+
22
+
23
+ class PushQueueStatePushQueueStatePushQueueStateError(BaseModel):
24
+ typename__: Literal["PushQueueStateError"] = Field(alias="__typename")
25
+ is_bad_request: bool = Field(alias="isBadRequest")
26
+ conflict: Optional["PushQueueStatePushQueueStatePushQueueStateErrorConflict"]
27
+
28
+
29
+ class PushQueueStatePushQueueStatePushQueueStateErrorConflict(BaseModel):
30
+ current: Optional["PushQueueStatePushQueueStatePushQueueStateErrorConflictCurrent"]
31
+
32
+
33
+ class PushQueueStatePushQueueStatePushQueueStateErrorConflictCurrent(BaseModel):
34
+ version: str
35
+
36
+
37
+ PushQueueState.model_rebuild()
38
+ PushQueueStatePushQueueStatePushQueueStateError.model_rebuild()
39
+ PushQueueStatePushQueueStatePushQueueStateErrorConflict.model_rebuild()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deezer-python-gql
3
- Version: 0.21.0
3
+ Version: 0.22.2
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.4.0; extra == "test"
19
+ Requires-Dist: mypy==2.4.1; extra == "test"
20
20
  Requires-Dist: pre-commit==4.7.0; extra == "test"
21
21
  Requires-Dist: pre-commit-hooks==6.0.0; extra == "test"
22
- Requires-Dist: pytest==9.1.1; extra == "test"
23
- Requires-Dist: pytest-asyncio==1.4.1; extra == "test"
22
+ Requires-Dist: pytest==9.2.0; extra == "test"
23
+ Requires-Dist: pytest-asyncio==1.4.1.post1; extra == "test"
24
24
  Requires-Dist: pytest-cov==7.1.0; extra == "test"
25
- Requires-Dist: ruff==0.17.2; extra == "test"
25
+ Requires-Dist: ruff==0.17.3; extra == "test"
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: ariadne-codegen[subscriptions]; extra == "dev"
28
28
  Dynamic: license-file
@@ -1,7 +1,7 @@
1
1
  deezer_python_gql/__init__.py,sha256=kwp838G6q8HnV_R0B0zWRBagYXt0rqfXY1IsyX8XDIo,641
2
- deezer_python_gql/base_client.py,sha256=OA2RX34k9pjPqMRL1OPA4NQY-XJi9EppaeJ3_JDu3g0,17973
2
+ deezer_python_gql/base_client.py,sha256=JYzqynf0Ck9qsZ-d6pcEF9b3xuWfiY9OBPbxkV2fOKQ,18269
3
3
  deezer_python_gql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- deezer_python_gql/generated/__init__.py,sha256=qBS64EhmmhnDVonnorDjKNO2E5dUQepkd3BP4EoHROo,52699
4
+ deezer_python_gql/generated/__init__.py,sha256=mrP8dCdKxvnlU_8liYIhovqikNQIPBhutIdquZ7SN-0,53608
5
5
  deezer_python_gql/generated/add_album_to_favorite.py,sha256=hprfZkN_jIEl3N_zw962GAL_7XhW6odh_rBldgZ0brM,596
6
6
  deezer_python_gql/generated/add_artist_to_favorite.py,sha256=NU2EKBf3uwBjg5qRvvZWF1GmaHlFzuoDRB1iDFUquI4,574
7
7
  deezer_python_gql/generated/add_audiobook_to_favorite.py,sha256=dKuMxxqmPu9drwV4Ey3bl9O4eBRet_8JniLZG4wK1C8,456
@@ -11,13 +11,13 @@ deezer_python_gql/generated/add_track_to_favorite.py,sha256=EUB2jNV5XzbsqntfS6UZ
11
11
  deezer_python_gql/generated/add_tracks_to_playlist.py,sha256=S_AGBUnOV_YP7zdyYpCxWIeJpBuae-r5VOH8HjDcqeM,933
12
12
  deezer_python_gql/generated/ban_artist_from_recommendation.py,sha256=nn7FVdUCVcyfXN528SxGx13UgXx8EToOos-6NNODrU0,703
13
13
  deezer_python_gql/generated/ban_track_from_recommendation.py,sha256=PTjl-0-bqG-49PqAZVqFpe1kk8z5WvyLMG8Gcp4XOi0,687
14
- deezer_python_gql/generated/base_client.py,sha256=VzSudDGtyBB1tUu21nDQqsCyVXtrwWRMmVwkFCqF_Pc,18005
14
+ deezer_python_gql/generated/base_client.py,sha256=UMbBCThMhrIbngTiTW9yQPunL4UbUGnLq9LmJn54rqU,18301
15
15
  deezer_python_gql/generated/base_model.py,sha256=S-phq2fzKu2Kuct1dUnbyvMPT5k7TsfqOkCf_3yZ19I,640
16
16
  deezer_python_gql/generated/bookmark_podcast_episode.py,sha256=4j2J2lltmMLEv7aOKF8ZHSMkBTzoVNmbcrp6lLkrvo4,768
17
- deezer_python_gql/generated/client.py,sha256=QLL8efq8nyEARzgNcswXrZAhZHSVicifwBe2r-nUreY,149353
17
+ deezer_python_gql/generated/client.py,sha256=GeLYL07D1fIZFk5jZDgSqFuGDvCL_TMMAkygDcTAjcw,150613
18
18
  deezer_python_gql/generated/create_playlist.py,sha256=Q8pZWQ2eFIuFnl1US9trXHfFoqX_W2asJKAZqZN_Mig,534
19
19
  deezer_python_gql/generated/delete_playlist.py,sha256=1lxExq1_46RLWCdhceRHCx-0NzWPCmM7prehZahOWmo,406
20
- deezer_python_gql/generated/enums.py,sha256=5rdrcheqYe2L2tlkGuhNo7JYdBANWkQnaiabLVudQHU,1205
20
+ deezer_python_gql/generated/enums.py,sha256=PAQj0K796W2O4lim0bVw5uCv3G8EW14oDGmNmJU6zrk,1436
21
21
  deezer_python_gql/generated/fragments.py,sha256=J9QVnFEVXprV5xkrOBm4Slo5Qc2YVJpH0SUPxTZ8AKE,8177
22
22
  deezer_python_gql/generated/get_album.py,sha256=EKQIFdKOmlEDhtybeWgl6lbVExbnCNA-37r2CXPVevs,1574
23
23
  deezer_python_gql/generated/get_artist.py,sha256=KKrUXF4WJDrjb9uDfHzEbGXna5fTHbfPQMwP2HJfrdo,2287
@@ -63,7 +63,7 @@ deezer_python_gql/generated/get_track_mix.py,sha256=cru5ZeyAspxCu_Nyq916EJVwEqiA
63
63
  deezer_python_gql/generated/get_tracks_by_ids.py,sha256=EuTkAz02Uren0v_mFAwDwIWM7EjHpD1YBE_5f9uoR7k,407
64
64
  deezer_python_gql/generated/get_user_charts.py,sha256=diUwIngRgqZ4_RPTks_9OcBTohYiJ8DPMlNUddIZ1lA,2287
65
65
  deezer_python_gql/generated/get_user_playlists.py,sha256=ikM8VR_58328Nz_QVA26Got_UWXfpBd43dahRdGB6ts,966
66
- deezer_python_gql/generated/input_types.py,sha256=6Obe-vvDm4TDgH3oRZUzbEvkbquaQOHYRK_62B1_0FA,57
66
+ deezer_python_gql/generated/input_types.py,sha256=OBYFqMGspY-wKizOeZo1Af5GwyhoJ6kDgrBSxm-9Eew,2569
67
67
  deezer_python_gql/generated/mark_as_not_played_podcast_episode.py,sha256=B881GZK4G1T1zzkYEOxJtRSAr2GCHeJcwY8-IKpfqC0,737
68
68
  deezer_python_gql/generated/mark_as_played_podcast_episode.py,sha256=lXRXK3wXK8C0mqYIqCm9PoqKa_4wqb0nZ4ZFR-3W-NI,826
69
69
  deezer_python_gql/generated/move_track_in_playlist.py,sha256=E4VIRdBCpqSNTOmmDQNq1RT_MrPp4cQ3F4yyYjEQGhY,458
@@ -73,6 +73,7 @@ deezer_python_gql/generated/music_together_join_group.py,sha256=leKtZVi-9CVIsDRK
73
73
  deezer_python_gql/generated/music_together_leave_group.py,sha256=A59vIIi_4mr1zdOxYsLWlGBrSpDxURo36GpsBAj0odI,1315
74
74
  deezer_python_gql/generated/music_together_refresh_suggested_tracklist.py,sha256=KH_9PbRBdaQWGsbrLGZPBaF0_UwV2vsWuIxPsySjxfw,1739
75
75
  deezer_python_gql/generated/music_together_update_group_settings.py,sha256=G84MxNCMOuO6BWlc-l_cCK0VBRG5guY_uUxjGjuA2IQ,1641
76
+ deezer_python_gql/generated/push_queue_state.py,sha256=B0_gX1yAfIRwMMMQELRTztBMTVdKu3hgjxzBpSGpZkw,1281
76
77
  deezer_python_gql/generated/remove_album_from_favorite.py,sha256=EXdHF5a_6PsyWg-0G3Sc8oMD1rtr_wzTLakMZMx2eBc,668
77
78
  deezer_python_gql/generated/remove_artist_from_favorite.py,sha256=STkj-wspjZCiRJEDzkmpBDwtDd4H2VGFKerkN-B1hkY,646
78
79
  deezer_python_gql/generated/remove_audiobook_from_favorite.py,sha256=9g_HD5RqanIdPPjBT2IzA7j4ydps8GNg8ui1iprfGWs,445
@@ -87,8 +88,8 @@ deezer_python_gql/generated/unban_artist_from_recommendation.py,sha256=mUM5zp_MI
87
88
  deezer_python_gql/generated/unban_track_from_recommendation.py,sha256=idpo4keNegu5l-7I8OorOdWa8fDE7igMzW1zJRxCg9M,715
88
89
  deezer_python_gql/generated/unbookmark_podcast_episode.py,sha256=-GjprmbpIjzyTsx9ELneKG_TAas5fsMJgFUywuGo-VM,666
89
90
  deezer_python_gql/generated/update_playlist.py,sha256=L9w-b_8CLdsW4qwN0ZgcGuutyUhGQPRf9va1XlSwZhQ,534
90
- deezer_python_gql-0.21.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
91
- deezer_python_gql-0.21.0.dist-info/METADATA,sha256=xXBTtOOOYNLyu1Xxey9X6kBghTbVmaCrHY9zpyd6AXQ,16954
92
- deezer_python_gql-0.21.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
93
- deezer_python_gql-0.21.0.dist-info/top_level.txt,sha256=Yf7lMr1RCsfdcASo4pLoZIzA5aTa-cqzUePMX-A0QOM,18
94
- deezer_python_gql-0.21.0.dist-info/RECORD,,
91
+ deezer_python_gql-0.22.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
92
+ deezer_python_gql-0.22.2.dist-info/METADATA,sha256=7mHTnP-Iq3ZUmoTVpUlpP4JKyoj1XMynFW-o3xGR1Ic,16960
93
+ deezer_python_gql-0.22.2.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
94
+ deezer_python_gql-0.22.2.dist-info/top_level.txt,sha256=Yf7lMr1RCsfdcASo4pLoZIzA5aTa-cqzUePMX-A0QOM,18
95
+ deezer_python_gql-0.22.2.dist-info/RECORD,,