deezer-python-gql 0.17.2__tar.gz → 0.18.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 (89) hide show
  1. {deezer_python_gql-0.17.2/deezer_python_gql.egg-info → deezer_python_gql-0.18.0}/PKG-INFO +2 -2
  2. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_audiobook_to_favorite.py +1 -3
  3. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_podcast_to_favorite.py +1 -3
  4. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/bookmark_podcast_episode.py +2 -2
  5. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/client.py +1 -0
  6. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/fragments.py +4 -4
  7. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_audiobook_chapter.py +2 -2
  8. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_favorite_albums.py +2 -2
  9. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_favorite_artists.py +2 -2
  10. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_favorite_audiobooks.py +2 -2
  11. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_favorite_playlists.py +2 -2
  12. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_favorite_podcasts.py +2 -2
  13. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_favorite_tracks.py +2 -2
  14. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_music_together_group.py +4 -4
  15. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_music_together_groups.py +4 -4
  16. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_playlist.py +1 -0
  17. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_podcast_episode_bookmarks.py +2 -2
  18. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_track.py +3 -3
  19. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/mark_as_played_podcast_episode.py +2 -2
  20. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/music_together_create_group.py +2 -2
  21. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/search.py +2 -2
  22. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0/deezer_python_gql.egg-info}/PKG-INFO +2 -2
  23. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql.egg-info/requires.txt +1 -1
  24. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/pyproject.toml +5 -2
  25. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/tests/test_client.py +11 -1
  26. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/LICENSE +0 -0
  27. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/MANIFEST.in +0 -0
  28. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/README.md +0 -0
  29. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/__init__.py +0 -0
  30. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/base_client.py +0 -0
  31. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/__init__.py +0 -0
  32. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_album_to_favorite.py +0 -0
  33. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_artist_to_favorite.py +0 -0
  34. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_playlist_to_favorite.py +0 -0
  35. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_track_to_favorite.py +0 -0
  36. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/add_tracks_to_playlist.py +0 -0
  37. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/base_client.py +0 -0
  38. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/base_model.py +0 -0
  39. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/create_playlist.py +0 -0
  40. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/delete_playlist.py +0 -0
  41. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/enums.py +0 -0
  42. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_album.py +0 -0
  43. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_artist.py +0 -0
  44. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_artist_mix.py +0 -0
  45. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_audiobook.py +0 -0
  46. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_charts.py +0 -0
  47. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_flow.py +0 -0
  48. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_flow_batch.py +0 -0
  49. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_flow_config_tracks.py +0 -0
  50. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_flow_configs.py +0 -0
  51. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_livestream.py +0 -0
  52. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_made_for_me.py +0 -0
  53. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_me.py +0 -0
  54. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_music_together_affinity.py +0 -0
  55. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_personal_tracks.py +0 -0
  56. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_podcast.py +0 -0
  57. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_podcast_episode.py +0 -0
  58. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_podcast_episodes_by_ids.py +0 -0
  59. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_recently_played.py +0 -0
  60. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_recommendations.py +0 -0
  61. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_similar_artists.py +0 -0
  62. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_similar_tracks.py +0 -0
  63. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_smart_tracklist.py +0 -0
  64. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_track_mix.py +0 -0
  65. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_user_charts.py +0 -0
  66. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/get_user_playlists.py +0 -0
  67. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/input_types.py +0 -0
  68. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/mark_as_not_played_podcast_episode.py +0 -0
  69. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/music_together_generate_group_name.py +0 -0
  70. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/music_together_join_group.py +0 -0
  71. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/music_together_leave_group.py +0 -0
  72. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/music_together_refresh_suggested_tracklist.py +0 -0
  73. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/music_together_update_group_settings.py +0 -0
  74. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_album_from_favorite.py +0 -0
  75. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_artist_from_favorite.py +0 -0
  76. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_audiobook_from_favorite.py +0 -0
  77. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_playlist_from_favorite.py +0 -0
  78. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_podcast_from_favorite.py +0 -0
  79. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_track_from_favorite.py +0 -0
  80. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/remove_tracks_from_playlist.py +0 -0
  81. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/search_flows.py +0 -0
  82. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/unbookmark_podcast_episode.py +0 -0
  83. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/generated/update_playlist.py +0 -0
  84. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql/py.typed +0 -0
  85. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql.egg-info/SOURCES.txt +0 -0
  86. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql.egg-info/dependency_links.txt +0 -0
  87. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql.egg-info/not-zip-safe +0 -0
  88. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/deezer_python_gql.egg-info/top_level.txt +0 -0
  89. {deezer_python_gql-0.17.2 → deezer_python_gql-0.18.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deezer-python-gql
3
- Version: 0.17.2
3
+ Version: 0.18.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
@@ -22,7 +22,7 @@ Requires-Dist: pre-commit-hooks==6.0.0; extra == "test"
22
22
  Requires-Dist: pytest==9.1.1; extra == "test"
23
23
  Requires-Dist: pytest-asyncio==1.4.0; extra == "test"
24
24
  Requires-Dist: pytest-cov==7.1.0; extra == "test"
25
- Requires-Dist: ruff==0.16.5; extra == "test"
25
+ Requires-Dist: ruff==0.16.8; extra == "test"
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: ariadne-codegen[subscriptions]; extra == "dev"
28
28
  Dynamic: license-file
@@ -1,8 +1,6 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any
5
-
6
4
  from pydantic import Field
7
5
 
8
6
  from .base_model import BaseModel
@@ -16,7 +14,7 @@ class AddAudiobookToFavorite(BaseModel):
16
14
 
17
15
  class AddAudiobookToFavoriteAddAudiobookToFavorite(BaseModel):
18
16
  id: str
19
- favorited_at: Any = Field(alias="favoritedAt")
17
+ favorited_at: str = Field(alias="favoritedAt")
20
18
 
21
19
 
22
20
  AddAudiobookToFavorite.model_rebuild()
@@ -1,8 +1,6 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any
5
-
6
4
  from pydantic import Field
7
5
 
8
6
  from .base_model import BaseModel
@@ -16,7 +14,7 @@ class AddPodcastToFavorite(BaseModel):
16
14
 
17
15
  class AddPodcastToFavoriteAddPodcastToFavorite(BaseModel):
18
16
  podcast: "AddPodcastToFavoriteAddPodcastToFavoritePodcast"
19
- favorited_at: Any = Field(alias="favoritedAt")
17
+ favorited_at: str = Field(alias="favoritedAt")
20
18
 
21
19
 
22
20
  class AddPodcastToFavoriteAddPodcastToFavoritePodcast(BaseModel):
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -22,7 +22,7 @@ class BookmarkPodcastEpisodeBookmarkPodcastEpisode(BaseModel):
22
22
  class BookmarkPodcastEpisodeBookmarkPodcastEpisodeBookmark(BaseModel):
23
23
  position: int
24
24
  is_played: bool = Field(alias="isPlayed")
25
- bookmarked_at: Any = Field(alias="bookmarkedAt")
25
+ bookmarked_at: str = Field(alias="bookmarkedAt")
26
26
 
27
27
 
28
28
  BookmarkPodcastEpisode.model_rebuild()
@@ -2414,6 +2414,7 @@ class DeezerGQLClient(DeezerBaseClient):
2414
2414
  tracks(first: $tracksFirst, after: $tracksAfter) {
2415
2415
  edges {
2416
2416
  cursor
2417
+ addedAt
2417
2418
  node {
2418
2419
  ...TrackFields
2419
2420
  }
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Literal, Optional, Union
4
+ from typing import Literal, Optional, Union
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -20,7 +20,7 @@ class AlbumFields(BaseModel):
20
20
  type_: AlbumType = Field(alias="type")
21
21
  cover: Optional["AlbumFieldsCover"]
22
22
  contributors: "AlbumFieldsContributors"
23
- release_date: Optional[Any] = Field(alias="releaseDate")
23
+ release_date: Optional[str] = Field(alias="releaseDate")
24
24
  is_explicit: Optional[bool] = Field(alias="isExplicit")
25
25
  is_favorite: Optional[bool] = Field(alias="isFavorite")
26
26
  fans_count: int = Field(alias="fansCount")
@@ -88,7 +88,7 @@ class AudiobookFields(BaseModel):
88
88
  cover: Optional["AudiobookFieldsCover"]
89
89
  description: Optional[str]
90
90
  duration: int
91
- release_date: Optional[Any] = Field(alias="releaseDate")
91
+ release_date: Optional[str] = Field(alias="releaseDate")
92
92
  fans_count: int = Field(alias="fansCount")
93
93
  is_explicit: bool = Field(alias="isExplicit")
94
94
  is_favorite: Optional[bool] = Field(alias="isFavorite")
@@ -179,7 +179,7 @@ class PodcastEpisodeFields(BaseModel):
179
179
  description: Optional[str]
180
180
  duration: int
181
181
  cover: Optional["PodcastEpisodeFieldsCover"]
182
- publication_date: Optional[Any] = Field(alias="publicationDate")
182
+ publication_date: Optional[str] = Field(alias="publicationDate")
183
183
  media: "PodcastEpisodeFieldsMedia"
184
184
 
185
185
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -37,7 +37,7 @@ class GetAudiobookChapterAudiobookChapterMedia(BaseModel):
37
37
 
38
38
  class GetAudiobookChapterAudiobookChapterMediaToken(BaseModel):
39
39
  payload: str
40
- expires_at: Any = Field(alias="expiresAt")
40
+ expires_at: str = Field(alias="expiresAt")
41
41
 
42
42
 
43
43
  class GetAudiobookChapterAudiobookChapterMediaEstimatedSizes(BaseModel):
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -30,7 +30,7 @@ class GetFavoriteAlbumsMeUserFavoritesAlbums(BaseModel):
30
30
 
31
31
  class GetFavoriteAlbumsMeUserFavoritesAlbumsEdges(BaseModel):
32
32
  cursor: str
33
- favorited_at: Any = Field(alias="favoritedAt")
33
+ favorited_at: str = Field(alias="favoritedAt")
34
34
  node: Optional["GetFavoriteAlbumsMeUserFavoritesAlbumsEdgesNode"]
35
35
 
36
36
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -30,7 +30,7 @@ class GetFavoriteArtistsMeUserFavoritesArtists(BaseModel):
30
30
 
31
31
  class GetFavoriteArtistsMeUserFavoritesArtistsEdges(BaseModel):
32
32
  cursor: str
33
- favorited_at: Any = Field(alias="favoritedAt")
33
+ favorited_at: str = Field(alias="favoritedAt")
34
34
  node: Optional["GetFavoriteArtistsMeUserFavoritesArtistsEdgesNode"]
35
35
 
36
36
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -24,7 +24,7 @@ class GetFavoriteAudiobooksMeFavorites(BaseModel):
24
24
 
25
25
  class GetFavoriteAudiobooksMeFavoritesRawAudiobooks(BaseModel):
26
26
  id: str
27
- favorited_at: Any = Field(alias="favoritedAt")
27
+ favorited_at: str = Field(alias="favoritedAt")
28
28
 
29
29
 
30
30
  GetFavoriteAudiobooks.model_rebuild()
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -30,7 +30,7 @@ class GetFavoritePlaylistsMeUserFavoritesPlaylists(BaseModel):
30
30
 
31
31
  class GetFavoritePlaylistsMeUserFavoritesPlaylistsEdges(BaseModel):
32
32
  cursor: str
33
- favorited_at: Any = Field(alias="favoritedAt")
33
+ favorited_at: str = Field(alias="favoritedAt")
34
34
  node: Optional["GetFavoritePlaylistsMeUserFavoritesPlaylistsEdgesNode"]
35
35
 
36
36
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -30,7 +30,7 @@ class GetFavoritePodcastsMeUserFavoritesPodcasts(BaseModel):
30
30
 
31
31
  class GetFavoritePodcastsMeUserFavoritesPodcastsEdges(BaseModel):
32
32
  cursor: str
33
- favorited_at: Any = Field(alias="favoritedAt")
33
+ favorited_at: str = Field(alias="favoritedAt")
34
34
  node: Optional["GetFavoritePodcastsMeUserFavoritesPodcastsEdgesNode"]
35
35
 
36
36
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -30,7 +30,7 @@ class GetFavoriteTracksMeUserFavoritesTracks(BaseModel):
30
30
 
31
31
  class GetFavoriteTracksMeUserFavoritesTracksEdges(BaseModel):
32
32
  cursor: str
33
- favorited_at: Any = Field(alias="favoritedAt")
33
+ favorited_at: str = Field(alias="favoritedAt")
34
34
  node: Optional["GetFavoriteTracksMeUserFavoritesTracksEdgesNode"]
35
35
 
36
36
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -21,8 +21,8 @@ class GetMusicTogetherGroupMusicTogetherGroup(BaseModel):
21
21
  is_ready: bool = Field(alias="isReady")
22
22
  is_family: bool = Field(alias="isFamily")
23
23
  estimated_members_count: int = Field(alias="estimatedMembersCount")
24
- created_at: Any = Field(alias="createdAt")
25
- updated_at: Any = Field(alias="updatedAt")
24
+ created_at: str = Field(alias="createdAt")
25
+ updated_at: str = Field(alias="updatedAt")
26
26
  members: "GetMusicTogetherGroupMusicTogetherGroupMembers"
27
27
  suggested_tracklist: Optional[
28
28
  "GetMusicTogetherGroupMusicTogetherGroupSuggestedTracklist"
@@ -41,7 +41,7 @@ class GetMusicTogetherGroupMusicTogetherGroupMembers(BaseModel):
41
41
 
42
42
  class GetMusicTogetherGroupMusicTogetherGroupMembersEdges(BaseModel):
43
43
  cursor: str
44
- joined_at: Any = Field(alias="joinedAt")
44
+ joined_at: str = Field(alias="joinedAt")
45
45
  node: Optional["GetMusicTogetherGroupMusicTogetherGroupMembersEdgesNode"]
46
46
  affinity: Optional["GetMusicTogetherGroupMusicTogetherGroupMembersEdgesAffinity"]
47
47
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -38,8 +38,8 @@ class GetMusicTogetherGroupsMeMusicTogetherGroupsEdgesNode(BaseModel):
38
38
  is_ready: bool = Field(alias="isReady")
39
39
  is_family: bool = Field(alias="isFamily")
40
40
  estimated_members_count: int = Field(alias="estimatedMembersCount")
41
- created_at: Any = Field(alias="createdAt")
42
- updated_at: Any = Field(alias="updatedAt")
41
+ created_at: str = Field(alias="createdAt")
42
+ updated_at: str = Field(alias="updatedAt")
43
43
  members: "GetMusicTogetherGroupsMeMusicTogetherGroupsEdgesNodeMembers"
44
44
 
45
45
 
@@ -52,7 +52,7 @@ class GetMusicTogetherGroupsMeMusicTogetherGroupsEdgesNodeMembers(BaseModel):
52
52
 
53
53
  class GetMusicTogetherGroupsMeMusicTogetherGroupsEdgesNodeMembersEdges(BaseModel):
54
54
  cursor: str
55
- joined_at: Any = Field(alias="joinedAt")
55
+ joined_at: str = Field(alias="joinedAt")
56
56
  node: Optional[
57
57
  "GetMusicTogetherGroupsMeMusicTogetherGroupsEdgesNodeMembersEdgesNode"
58
58
  ]
@@ -27,6 +27,7 @@ class GetPlaylistPlaylistTracks(BaseModel):
27
27
 
28
28
  class GetPlaylistPlaylistTracksEdges(BaseModel):
29
29
  cursor: str
30
+ added_at: str = Field(alias="addedAt")
30
31
  node: Optional["GetPlaylistPlaylistTracksEdgesNode"]
31
32
 
32
33
 
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -35,7 +35,7 @@ class GetPodcastEpisodeBookmarksMePodcastEpisodeBookmarksEdgesNode(BaseModel):
35
35
  episode: "GetPodcastEpisodeBookmarksMePodcastEpisodeBookmarksEdgesNodeEpisode"
36
36
  position: int
37
37
  is_played: bool = Field(alias="isPlayed")
38
- bookmarked_at: Any = Field(alias="bookmarkedAt")
38
+ bookmarked_at: str = Field(alias="bookmarkedAt")
39
39
 
40
40
 
41
41
  class GetPodcastEpisodeBookmarksMePodcastEpisodeBookmarksEdgesNodeEpisode(
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Literal, Optional, Union
4
+ from typing import Literal, Optional, Union
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -25,7 +25,7 @@ class GetTrackTrack(BaseModel):
25
25
  album: Optional["GetTrackTrackAlbum"]
26
26
  contributors: "GetTrackTrackContributors"
27
27
  is_atmos: bool = Field(alias="isAtmos")
28
- release_date: Optional[Any] = Field(alias="releaseDate")
28
+ release_date: Optional[str] = Field(alias="releaseDate")
29
29
  media: Optional["GetTrackTrackMedia"]
30
30
  lyrics: Optional["GetTrackTrackLyrics"]
31
31
 
@@ -73,7 +73,7 @@ class GetTrackTrackMedia(BaseModel):
73
73
 
74
74
  class GetTrackTrackMediaToken(BaseModel):
75
75
  payload: str
76
- expires_at: Any = Field(alias="expiresAt")
76
+ expires_at: str = Field(alias="expiresAt")
77
77
 
78
78
 
79
79
  class GetTrackTrackMediaEstimatedSizes(BaseModel):
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -22,7 +22,7 @@ class MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisode(BaseModel):
22
22
  class MarkAsPlayedPodcastEpisodeMarkAsPlayedPodcastEpisodeBookmark(BaseModel):
23
23
  position: int
24
24
  is_played: bool = Field(alias="isPlayed")
25
- bookmarked_at: Any = Field(alias="bookmarkedAt")
25
+ bookmarked_at: str = Field(alias="bookmarkedAt")
26
26
 
27
27
 
28
28
  MarkAsPlayedPodcastEpisode.model_rebuild()
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Literal, Optional, Union
4
+ from typing import Literal, Optional, Union
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -30,7 +30,7 @@ class MusicTogetherCreateGroupMusicTogetherCreateGroupMusicTogetherCreateGroupOu
30
30
  is_ready: bool = Field(alias="isReady")
31
31
  is_family: bool = Field(alias="isFamily")
32
32
  estimated_members_count: int = Field(alias="estimatedMembersCount")
33
- created_at: Any = Field(alias="createdAt")
33
+ created_at: str = Field(alias="createdAt")
34
34
 
35
35
 
36
36
  class MusicTogetherCreateGroupMusicTogetherCreateGroupMusicTogetherCreateGroupError(
@@ -1,7 +1,7 @@
1
1
  # Generated by ariadne-codegen
2
2
  # Source: queries
3
3
 
4
- from typing import Any, Literal, Optional, Union
4
+ from typing import Literal, Optional, Union
5
5
 
6
6
  from pydantic import Field
7
7
 
@@ -108,7 +108,7 @@ class SearchSearchResultsAlbumsEdgesNode(BaseModel):
108
108
  type_: AlbumType = Field(alias="type")
109
109
  cover: Optional["SearchSearchResultsAlbumsEdgesNodeCover"]
110
110
  contributors: "SearchSearchResultsAlbumsEdgesNodeContributors"
111
- release_date: Optional[Any] = Field(alias="releaseDate")
111
+ release_date: Optional[str] = Field(alias="releaseDate")
112
112
  is_explicit: Optional[bool] = Field(alias="isExplicit")
113
113
  is_favorite: Optional[bool] = Field(alias="isFavorite")
114
114
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deezer-python-gql
3
- Version: 0.17.2
3
+ Version: 0.18.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
@@ -22,7 +22,7 @@ Requires-Dist: pre-commit-hooks==6.0.0; extra == "test"
22
22
  Requires-Dist: pytest==9.1.1; extra == "test"
23
23
  Requires-Dist: pytest-asyncio==1.4.0; extra == "test"
24
24
  Requires-Dist: pytest-cov==7.1.0; extra == "test"
25
- Requires-Dist: ruff==0.16.5; extra == "test"
25
+ Requires-Dist: ruff==0.16.8; extra == "test"
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: ariadne-codegen[subscriptions]; extra == "dev"
28
28
  Dynamic: license-file
@@ -13,4 +13,4 @@ pre-commit-hooks==6.0.0
13
13
  pytest==9.1.1
14
14
  pytest-asyncio==1.4.0
15
15
  pytest-cov==7.1.0
16
- ruff==0.16.5
16
+ ruff==0.16.8
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "deezer-python-gql"
3
- version = "0.17.2"
3
+ version = "0.18.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"
@@ -30,7 +30,7 @@ test = [
30
30
  "pytest==9.1.1",
31
31
  "pytest-asyncio==1.4.0",
32
32
  "pytest-cov==7.1.0",
33
- "ruff==0.16.5",
33
+ "ruff==0.16.8",
34
34
  ]
35
35
  dev = [
36
36
  "ariadne-codegen[subscriptions]",
@@ -68,6 +68,9 @@ plugins = [
68
68
  "ariadne_codegen.contrib.shorter_results.ShorterResultsPlugin",
69
69
  ]
70
70
 
71
+ [tool.ariadne-codegen.scalars.Date]
72
+ type = "str"
73
+
71
74
  [tool.codespell]
72
75
  skip = "*.json,schema.graphql"
73
76
 
@@ -20,6 +20,7 @@ from unittest.mock import AsyncMock, MagicMock, patch
20
20
 
21
21
  import pytest
22
22
  from aiohttp import ClientSession, CookieJar
23
+ from pydantic import ValidationError
23
24
  from yarl import URL
24
25
 
25
26
  from deezer_python_gql import DeezerGQLClient
@@ -960,7 +961,7 @@ def test_smoke_get_artist() -> None:
960
961
 
961
962
 
962
963
  def test_smoke_get_playlist() -> None:
963
- """Verify GetPlaylist fixture parses with owner and paginated tracks."""
964
+ """Verify GetPlaylist fixture parses with owner, paginated tracks and add dates."""
964
965
  data = _load_fixture("get_playlist.json")
965
966
  playlist = GetPlaylist.model_validate(data).playlist
966
967
  assert playlist is not None
@@ -968,6 +969,7 @@ def test_smoke_get_playlist() -> None:
968
969
  assert playlist.title
969
970
  assert playlist.owner is not None
970
971
  assert len(playlist.tracks.edges) > 0
972
+ assert playlist.tracks.edges[0].added_at == "2026-09-18T07:30:12.000Z"
971
973
 
972
974
 
973
975
  def test_smoke_search() -> None:
@@ -1192,6 +1194,14 @@ def test_smoke_get_favorite_tracks() -> None:
1192
1194
  assert tracks.page_info.has_next_page is True
1193
1195
 
1194
1196
 
1197
+ def test_date_scalar_rejects_non_strings() -> None:
1198
+ """Date scalar fields are typed as ISO 8601 strings, so other values fail validation."""
1199
+ data = _load_fixture("get_favorite_tracks.json")
1200
+ data["me"]["userFavorites"]["tracks"]["edges"][0]["favoritedAt"] = 1749945600
1201
+ with pytest.raises(ValidationError, match="favoritedAt"):
1202
+ GetFavoriteTracks.model_validate(data)
1203
+
1204
+
1195
1205
  def test_smoke_get_favorite_playlists() -> None:
1196
1206
  """Verify GetFavoritePlaylists fixture parses with pagination."""
1197
1207
  data = _load_fixture("get_favorite_playlists.json")