Skip to content

Commit

Permalink
Merge pull request #90 from browniebroke/feature/playlist-methods
Browse files Browse the repository at this point in the history
  • Loading branch information
browniebroke committed Jul 1, 2020
2 parents ba28b41 + 8cffb51 commit 0e52e2a
Show file tree
Hide file tree
Showing 6 changed files with 462 additions and 2 deletions.
7 changes: 6 additions & 1 deletion conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,9 @@

@pytest.fixture()
def client():
return deezer.Client(app_id="foo", app_secret="bar") # nosec
return deezer.Client( # nosec
app_id="foo",
app_secret="bar",
# This is to get human readable response output in VCR cassettes
headers={"Accept-Encoding": "identity"},
)
32 changes: 32 additions & 0 deletions deezer/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,38 @@ class Playlist(Resource):
All the fields documented on Deezer are accessible by as class attributes.
"""

def get_tracks(self, **kwargs):
"""
Get tracks from a playlist.
:returns: list of :mod:`Track <deezer.resources.Track>` instances
"""
return self.get_relation("tracks", **kwargs)

def iter_tracks(self, **kwargs):
"""
Iterate over a playlist tracks.
:returns: iterator of :mod:`Track <deezer.resources.Track>` instances
"""
return self.iter_relation("tracks", **kwargs)

def get_fans(self, **kwargs):
"""
Get fans from a playlist.
:returns: list of :mod:`User <deezer.resources.User>` instances
"""
return self.get_relation("fans", **kwargs)

def iter_fans(self, **kwargs):
"""
Iterate over fans of a playlist.
:returns: iterator of :mod:`User <deezer.resources.User>` instances
"""
return self.iter_relation("tracks", **kwargs)


class Comment(Resource):
"""
Expand Down
1 change: 0 additions & 1 deletion requirements-test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,3 @@ pyupgrade; python_version > '3.5'
tox
twine
vcrpy
vcrpy-unittest
136 changes: 136 additions & 0 deletions tests/cassettes/TestPlaylist.test_get_fans.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
interactions:
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- identity
Connection:
- keep-alive
User-Agent:
- python-requests/2.23.0
method: GET
uri: https://api.deezer.com/playlist/6512
response:
body:
string: '{"id":6512,"title":"Christina Aguilera","description":"","duration":0,"public":true,"is_loved_track":false,"collaborative":false,"nb_tracks":0,"fans":3,"link":"https:\/\/www.deezer.com\/playlist\/6512","share":"https:\/\/www.deezer.com\/playlist\/6512?utm_source=deezer&utm_content=playlist-6512&utm_term=0_1593602308&utm_medium=web","picture":"https:\/\/api.deezer.com\/playlist\/6512\/image","picture_small":"https:\/\/e-cdns-images.dzcdn.net\/images\/cover\/\/56x56-000000-80-0-0.jpg","picture_medium":"https:\/\/e-cdns-images.dzcdn.net\/images\/cover\/\/250x250-000000-80-0-0.jpg","picture_big":"https:\/\/e-cdns-images.dzcdn.net\/images\/cover\/\/500x500-000000-80-0-0.jpg","picture_xl":"https:\/\/e-cdns-images.dzcdn.net\/images\/cover\/\/1000x1000-000000-80-0-0.jpg","checksum":"abd1c782880cc59759f4112fda0b8f98","tracklist":"https:\/\/api.deezer.com\/playlist\/6512\/tracks","creation_date":"2020-07-01
12:18:28","creator":{"id":3887,"name":"mounir.ds","tracklist":"https:\/\/api.deezer.com\/user\/3887\/flow","type":"user"},"type":"playlist","tracks":{"data":[],"checksum":"abd1c782880cc59759f4112fda0b8f98"}}'
headers:
Connection:
- keep-alive
Content-Length:
- '1118'
Content-Type:
- application/json; charset=utf-8
Date:
- Wed, 01 Jul 2020 11:18:28 GMT
P3P:
- policyref="/w3c/p3p.xml" CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"
Server:
- Apache
Set-Cookie:
- dzr_uniq_id=dzr_uniq_id_frb19f5f5d1adfb492171c43c7b59eca439757c0; expires=Mon,
28-Dec-2020 11:18:28 GMT; Max-Age=15552000; path=/; domain=.deezer.com; secure
Vary:
- Accept-Encoding
X-Content-Type-Options:
- nosniff
X-Host:
- blm-web-15
x-org:
- FR
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- identity
Connection:
- keep-alive
Cookie:
- dzr_uniq_id=dzr_uniq_id_frb19f5f5d1adfb492171c43c7b59eca439757c0
User-Agent:
- python-requests/2.23.0
method: GET
uri: https://api.deezer.com/playlist/6512/fans
response:
body:
string: '{"data":[{"id":194928025,"name":"laurentky","link":"https:\/\/www.deezer.com\/profile\/194928025","picture":"https:\/\/api.deezer.com\/user\/194928025\/image","picture_small":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/\/56x56-000000-80-0-0.jpg","picture_medium":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/\/250x250-000000-80-0-0.jpg","picture_big":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/\/500x500-000000-80-0-0.jpg","picture_xl":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/\/1000x1000-000000-80-0-0.jpg","tracklist":"https:\/\/api.deezer.com\/user\/194928025\/flow","type":"user"},{"id":338793701,"name":"F\u00e9lix
Ollomo","link":"https:\/\/www.deezer.com\/profile\/338793701","picture":"https:\/\/api.deezer.com\/user\/338793701\/image","picture_small":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/76e9f4f227814282e0929a5080099fad\/56x56-000000-80-0-0.jpg","picture_medium":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/76e9f4f227814282e0929a5080099fad\/250x250-000000-80-0-0.jpg","picture_big":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/76e9f4f227814282e0929a5080099fad\/500x500-000000-80-0-0.jpg","picture_xl":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/76e9f4f227814282e0929a5080099fad\/1000x1000-000000-80-0-0.jpg","tracklist":"https:\/\/api.deezer.com\/user\/338793701\/flow","type":"user"},{"id":365770935,"name":"mohamed
watib","link":"https:\/\/www.deezer.com\/profile\/365770935","picture":"https:\/\/api.deezer.com\/user\/365770935\/image","picture_small":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/f1e180559e97139faa24ec3a7a609701\/56x56-000000-80-0-0.jpg","picture_medium":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/f1e180559e97139faa24ec3a7a609701\/250x250-000000-80-0-0.jpg","picture_big":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/f1e180559e97139faa24ec3a7a609701\/500x500-000000-80-0-0.jpg","picture_xl":"https:\/\/e-cdns-images.dzcdn.net\/images\/user\/f1e180559e97139faa24ec3a7a609701\/1000x1000-000000-80-0-0.jpg","tracklist":"https:\/\/api.deezer.com\/user\/365770935\/flow","type":"user"}],"total":3}'
headers:
Connection:
- keep-alive
Content-Length:
- '2097'
Content-Type:
- application/json; charset=utf-8
Date:
- Wed, 01 Jul 2020 11:18:28 GMT
P3P:
- policyref="/w3c/p3p.xml" CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"
Server:
- Apache
Set-Cookie:
- dzr_uniq_id=dzr_uniq_id_frb19f5f5d1adfb492171c43c7b59eca439757c0; expires=Mon,
28-Dec-2020 11:18:28 GMT; Max-Age=15552000; path=/; domain=.deezer.com; secure
Vary:
- Accept-Encoding
X-Content-Type-Options:
- nosniff
X-Host:
- blm-web-143
x-org:
- FR
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- '*/*'
Accept-Encoding:
- identity
Connection:
- keep-alive
Cookie:
- dzr_uniq_id=dzr_uniq_id_frb19f5f5d1adfb492171c43c7b59eca439757c0
User-Agent:
- python-requests/2.23.0
method: GET
uri: https://api.deezer.com/playlist/6512/tracks?index=0
response:
body:
string: '{"data":[],"checksum":"abd1c782880cc59759f4112fda0b8f98","total":0}'
headers:
Connection:
- keep-alive
Content-Length:
- '67'
Content-Type:
- application/json; charset=utf-8
Date:
- Wed, 01 Jul 2020 11:18:28 GMT
P3P:
- policyref="/w3c/p3p.xml" CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"
Server:
- Apache
Set-Cookie:
- dzr_uniq_id=dzr_uniq_id_frb19f5f5d1adfb492171c43c7b59eca439757c0; expires=Mon,
28-Dec-2020 11:18:28 GMT; Max-Age=15552000; path=/; domain=.deezer.com; secure
X-Content-Type-Options:
- nosniff
X-Host:
- blm-web-132
x-org:
- FR
status:
code: 200
message: OK
version: 1
Loading

0 comments on commit 0e52e2a

Please sign in to comment.