1717# along with this program. If not, see <http://www.gnu.org/licenses/>.
1818
1919from __future__ import unicode_literals
20+ from collections import namedtuple
21+ from enum import Enum
2022
2123import datetime
2224import json
2325import logging
2426import requests
25- from collections import namedtuple
2627from .models import Artist , Album , Track , Video , Playlist , SearchResult , Category , Role
2728try :
2829 from urlparse import urljoin
3233
3334log = logging .getLogger (__name__ )
3435
35- Api = namedtuple ('API' , ['location' , 'token' ])
36-
3736
38- class Quality (object ):
37+ class Quality (Enum ):
3938 lossless = 'LOSSLESS'
4039 high = 'HIGH'
4140 low = 'LOW'
4241
43- class videoQuality ( object ):
42+ class VideoQuality ( Enum ):
4443 high = 'HIGH'
4544 medium = 'MEDIUM'
4645 low = 'LOW'
4746
4847class Config (object ):
49- def __init__ (self , quality = Quality .high , videoQuality = videoQuality .high ):
48+ def __init__ (self , quality = Quality .high , video_quality = VideoQuality .high ):
5049 self .quality = quality
51- self .videoQuality = videoQuality
50+ self .video_quality = video_quality
5251 self .api_location = 'https://api.tidalhifi.com/v1/'
5352 self .api_token = 'kgsOOmYk3zShYrNP'
5453
@@ -77,13 +76,13 @@ def login(self, username, password):
7776 'username' : username ,
7877 'password' : password ,
7978 }
80- r = requests .post (url , data = payload , params = params )
79+ request = requests .post (url , data = payload , params = params )
8180
82- if not ( r .ok ) :
83- print (r .text )
84- r .raise_for_status ()
81+ if not request .ok :
82+ print (request .text )
83+ request .raise_for_status ()
8584
86- body = r .json ()
85+ body = request .json ()
8786 self .session_id = body ['sessionId' ]
8887 self .country_code = body ['countryCode' ]
8988 self .user = User (self , id = body ['userId' ])
@@ -105,12 +104,12 @@ def request(self, method, path, params=None, data=None):
105104 if params :
106105 request_params .update (params )
107106 url = urljoin (self ._config .api_location , path )
108- r = requests .request (method , url , params = request_params , data = data )
109- log .debug ("request: %s" % r .request .url )
110- r .raise_for_status ()
111- if r .content :
112- log .debug ("response: %s" % json .dumps (r .json (), indent = 4 ))
113- return r
107+ request = requests .request (method , url , params = request_params , data = data )
108+ log .debug ("request: %s" , request .request .url )
109+ request .raise_for_status ()
110+ if request .content :
111+ log .debug ("response: %s" , json .dumps (request .json (), indent = 4 ))
112+ return request
114113
115114 def get_user (self , user_id ):
116115 return self ._map_request ('users/%s' % user_id , ret = 'user' )
@@ -198,7 +197,7 @@ def get_track(self, track_id):
198197 return self ._map_request ('tracks/%s' % track_id , ret = 'track' )
199198
200199 def get_video (self , video_id ):
201- return self ._map_request ('videos/%s' % video_id , ret = 'video' )
200+ return self ._map_request ('videos/%s' % video_id , ret = 'video' )
202201
203202 def _map_request (self , url , params = None , ret = None ):
204203 json_obj = self .request ('GET' , url , params ).json ()
@@ -221,16 +220,18 @@ def _map_request(self, url, params=None, ret=None):
221220 items = json_obj .get ('items' )
222221 if items is None :
223222 return parse (json_obj )
224- elif len (items ) > 0 and 'item' in items [0 ]:
223+ if len (items ) > 0 and 'item' in items [0 ]:
225224 return list (map (parse , [item ['item' ] for item in items ]))
226- else :
227- return list (map (parse , items ))
225+ return list (map (parse , items ))
228226
229- def _get_items (self , url , ret = None ):
227+ def _get_items (self , url , ret = None , offset = 0 ):
228+ params = {
229+ 'offset' : offset ,
230+ 'limit' : 100
231+ }
230232 remaining = 100
231- offset = 0
232- while remaining is 100 :
233- items = self ._map_request (url , params = {'offset' : offset , 'limit' : 100 }, ret = ret )
233+ while remaining == 100 :
234+ items = self ._map_request (url , params = params , ret = ret )
234235 remaining = len (items )
235236 return items
236237
@@ -245,11 +246,11 @@ def get_track_url(self, track_id):
245246 def get_video_url (self , video_id ):
246247 params = {
247248 'urlusagemode' : 'STREAM' ,
248- 'videoquality' : self ._config .videoQuality ,
249+ 'videoquality' : self ._config .video_quality ,
249250 'assetpresentation' : 'FULL'
250251 }
251- r = self .request ('GET' , 'videos/%s/urlpostpaywall' % video_id , params )
252- return r .json ()['urls' ][0 ]
252+ request = self .request ('GET' , 'videos/%s/urlpostpaywall' % video_id , params )
253+ return request .json ()['urls' ][0 ]
253254
254255 def search (self , field , value ):
255256 params = {
@@ -268,7 +269,7 @@ def search(self, field, value):
268269def _parse_artist (json_obj ):
269270 roles = []
270271 for role in json_obj .get ('artistTypes' , [json_obj .get ('type' )]):
271- roles .append (Role (role ))
272+ roles .append (Role (role ))
272273
273274 return Artist (id = json_obj ['id' ], name = json_obj ['name' ], roles = roles , role = roles [0 ])
274275
@@ -324,7 +325,7 @@ def _parse_media(json_obj):
324325 artist = _parse_artist (json_obj ['artist' ])
325326 artists = _parse_artists (json_obj ['artists' ])
326327 album = None
327- if ( json_obj ['album' ]) :
328+ if json_obj ['album' ]:
328329 album = _parse_album (json_obj ['album' ], artist , artists )
329330
330331 kwargs = {
@@ -343,8 +344,7 @@ def _parse_media(json_obj):
343344
344345 if kwargs ['type' ] == 'Music Video' :
345346 return Video (** kwargs )
346- else :
347- return Track (** kwargs )
347+ return Track (** kwargs )
348348
349349def _parse_genres (json_obj ):
350350 image = "http://resources.wimpmusic.com/images/%s/460x306.jpg" \
@@ -392,8 +392,8 @@ def playlists(self):
392392 return self ._session ._map_request (self ._base_url + '/playlists' , ret = 'playlists' )
393393
394394 def tracks (self ):
395- r = self ._session .request ('GET' , self ._base_url + '/tracks' )
396- return [_parse_media (item ['item' ]) for item in r .json ()['items' ]]
395+ request = self ._session .request ('GET' , self ._base_url + '/tracks' )
396+ return [_parse_media (item ['item' ]) for item in request .json ()['items' ]]
397397
398398
399399class User (object ):
0 commit comments