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.
- deezer_python_gql/base_client.py +9 -4
- deezer_python_gql/generated/__init__.py +26 -0
- deezer_python_gql/generated/base_client.py +9 -4
- deezer_python_gql/generated/client.py +37 -0
- deezer_python_gql/generated/enums.py +14 -0
- deezer_python_gql/generated/input_types.py +59 -0
- deezer_python_gql/generated/push_queue_state.py +39 -0
- {deezer_python_gql-0.21.0.dist-info → deezer_python_gql-0.22.2.dist-info}/METADATA +5 -5
- {deezer_python_gql-0.21.0.dist-info → deezer_python_gql-0.22.2.dist-info}/RECORD +12 -11
- {deezer_python_gql-0.21.0.dist-info → deezer_python_gql-0.22.2.dist-info}/WHEEL +0 -0
- {deezer_python_gql-0.21.0.dist-info → deezer_python_gql-0.22.2.dist-info}/licenses/LICENSE +0 -0
- {deezer_python_gql-0.21.0.dist-info → deezer_python_gql-0.22.2.dist-info}/top_level.txt +0 -0
deezer_python_gql/base_client.py
CHANGED
|
@@ -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:
|
|
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
|
-
#
|
|
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.
|
|
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
|
-
|
|
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:
|
|
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
|
-
#
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
91
|
-
deezer_python_gql-0.
|
|
92
|
-
deezer_python_gql-0.
|
|
93
|
-
deezer_python_gql-0.
|
|
94
|
-
deezer_python_gql-0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|