Skip to content

Commit e490548

Browse files
authored
Refactor: Use build_uri in modules (#126)
2 parents 635e516 + 58ee82b commit e490548

4 files changed

Lines changed: 76 additions & 59 deletions

File tree

trakt/movies.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def dismiss_recommendation(title):
3131
"""Dismiss the movie matching the specified criteria from showing up in
3232
recommendations.
3333
"""
34-
yield 'recommendations/movies/{title}'.format(title=slugify(str(title)))
34+
uri = build_uri('recommendations/movies/{title}', title=slugify(str(title)))
35+
yield uri
3536

3637

3738
@get
@@ -73,7 +74,8 @@ def updated_movies(timestamp=None):
7374
method.
7475
"""
7576
ts = timestamp or now()
76-
data = yield 'movies/updates/{start_date}'.format(start_date=ts)
77+
uri = build_uri('movies/updates/{start_date}', start_date=ts)
78+
data = yield uri
7779
to_ret = []
7880
for movie in data:
7981
mov = movie.pop('movie')
@@ -286,7 +288,8 @@ def get_releases(self, country_code='us'):
286288
:return: a :const:`list` of :class:`Release` objects
287289
"""
288290
if self._releases is None:
289-
data = yield self.ext + '/releases/{cc}'.format(cc=country_code)
291+
uri = build_uri(self.ext + '/releases/{cc}', cc=country_code)
292+
data = yield uri
290293
self._releases = [Release(**release) for release in data]
291294
yield self._releases
292295

@@ -299,9 +302,8 @@ def get_translations(self, country_code='us'):
299302
:return: a :const:`list` of :class:`Translation` objects
300303
"""
301304
if self._translations is None:
302-
data = yield self.ext + '/translations/{cc}'.format(
303-
cc=country_code
304-
)
305+
uri = build_uri(self.ext + '/translations/{cc}', cc=country_code)
306+
data = yield uri
305307
self._translations = [Translation(**translation)
306308
for translation in data]
307309
yield self._translations

trakt/sync.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,7 @@ def get_search_results(query, search_type=None, slugify_query=False):
250250
if slugify_query:
251251
query = slugify(query)
252252

253-
uri = 'search/{type}?query={query}'.format(
254-
query=query, type=','.join(search_type))
253+
uri = build_uri('search/{type}?query={query}', query=query, type=','.join(search_type))
255254

256255
data = yield uri
257256

@@ -324,11 +323,10 @@ def search_by_id(query, id_type='imdb', media_type=None, slugify_query=False):
324323

325324
# If media_type is still none, don't add it as a parameter to the search
326325
if media_type is None:
327-
uri = 'search/{source}/{query}'.format(
328-
query=query, source=source)
326+
uri = build_uri('search/{source}/{query}', query=query, source=source)
329327
else:
330-
uri = 'search/{source}/{query}?type={media_type}'.format(
331-
query=query, source=source, media_type=media_type)
328+
uri = build_uri('search/{source}/{query}?type={media_type}',
329+
query=query, source=source, media_type=media_type)
332330
data = yield uri
333331

334332
results = []
@@ -423,12 +421,15 @@ def get_watchlist(list_type=None, sort=None):
423421
if sort and sort not in valid_sort:
424422
raise ValueError('sort must be one of {}'.format(valid_sort))
425423

426-
uri = 'sync/watchlist'
427424
if list_type:
428-
uri += '/{}'.format(list_type)
429-
430-
if list_type and sort:
431-
uri += '/{}'.format(sort)
425+
if sort:
426+
uri = build_uri('sync/watchlist/{list_type}/{sort}',
427+
list_type=list_type, sort=sort)
428+
else:
429+
uri = build_uri('sync/watchlist/{list_type}',
430+
list_type=list_type)
431+
else:
432+
uri = build_uri('sync/watchlist')
432433

433434
data = yield uri
434435
results = []

trakt/tv.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ class Translation(NamedTuple):
3131

3232

3333
@delete
34-
def dismiss_recommendation(title=None):
34+
def dismiss_recommendation(title):
3535
"""Dismiss the show matching the specified criteria from showing up in
3636
recommendations.
3737
"""
38-
yield 'recommendations/shows/{title}'.format(title=title)
38+
uri = build_uri('recommendations/shows/{title}', title=title)
39+
yield uri
3940

4041

4142
@get
@@ -493,9 +494,8 @@ def get_translations(self, country_code='us'):
493494
:return: a :const:`list` of :class:`Translation` objects
494495
"""
495496
if self._translations is None:
496-
data = yield self.ext + '/translations/{cc}'.format(
497-
cc=country_code
498-
)
497+
uri = build_uri(self.ext + '/translations/{cc}', cc=country_code)
498+
data = yield uri
499499
self._translations = [Translation(**translation)
500500
for translation in data]
501501
yield self._translations

trakt/users.py

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ class Request(NamedTuple):
2424

2525
@post
2626
def approve(self):
27-
yield 'users/requests/{id}'.format(id=self.id)
27+
uri = build_uri('users/requests/{id}', id=self.id)
28+
yield uri
2829

2930
@delete
3031
def deny(self):
31-
yield 'users/requests/{id}'.format(id=self.id)
32+
uri = build_uri('users/requests/{id}', id=self.id)
33+
yield uri
3234

3335

3436
@post
@@ -37,7 +39,8 @@ def follow(user_name):
3739
follow request will be in a pending state. If they have a public profile,
3840
they will be followed immediately.
3941
"""
40-
yield 'users/{username}/follow'.format(username=slugify(user_name))
42+
uri = build_uri('users/{username}/follow', username=slugify(user_name))
43+
yield uri
4144

4245

4346
@get
@@ -64,7 +67,8 @@ def get_user_settings():
6467
def unfollow(user_name):
6568
"""Unfollow a user you're currently following with a username of *user_name*
6669
"""
67-
yield 'users/{username}/follow'.format(username=slugify(user_name))
70+
uri = build_uri('users/{username}/follow', username=slugify(user_name))
71+
yield uri
6872

6973

7074
@dataclass(frozen=True)
@@ -226,7 +230,8 @@ def create(cls, name, creator, description=None, privacy='private',
226230
'allow_comments': allow_comments}
227231
if description is not None:
228232
args['description'] = description
229-
data = yield 'users/{user}/lists'.format(user=slugify(creator)), args
233+
uri = build_uri('users/{user}/lists', user=slugify(creator))
234+
data = yield uri, args
230235
yield cls(creator=creator, user=creator, **data)
231236

232237
@classmethod
@@ -236,8 +241,9 @@ def _get(cls, title, creator):
236241
237242
:param title: Name of the list.
238243
"""
239-
data = yield 'users/{user}/lists/{id}'.format(user=slugify(creator),
240-
id=slugify(title))
244+
uri = build_uri('users/{user}/lists/{id}', user=slugify(creator),
245+
id=slugify(title))
246+
data = yield uri
241247
ulist = cls(creator=creator, **data)
242248
ulist.get_items()
243249

@@ -250,8 +256,9 @@ def get_items(self):
250256
251257
"""
252258

253-
data = yield 'users/{user}/lists/{id}/items'.format(
254-
user=slugify(self.creator), id=self.slug)
259+
uri = build_uri('users/{user}/lists/{id}/items',
260+
user=slugify(self.creator), id=self.slug)
261+
data = yield uri
255262

256263
for item in data:
257264
# match list item type
@@ -290,23 +297,25 @@ def add_items(self, *items):
290297
people = [p.ids for p in items if isinstance(p, Person)]
291298
self._items = items
292299
args = {'movies': movies, 'shows': shows, 'people': people}
293-
uri = 'users/{user}/lists/{id}/items'.format(
294-
user=slugify(self.creator), id=self.trakt)
300+
uri = build_uri('users/{user}/lists/{id}/items',
301+
user=slugify(self.creator), id=self.trakt)
295302
yield uri, args
296303

297304
@delete
298305
def delete_list(self):
299306
"""Delete this :class:`UserList`"""
300-
yield 'users/{user}/lists/{id}'.format(user=slugify(self.creator),
301-
id=self.trakt)
307+
uri = build_uri('users/{user}/lists/{id}', user=slugify(self.creator),
308+
id=self.trakt)
309+
yield uri
302310

303311
@post
304312
def like(self):
305313
"""Like this :class:`UserList`. Likes help determine popular lists.
306314
Only one like is allowed per list per user.
307315
"""
308-
uri = 'users/{user}/lists/{id}/like'
309-
yield uri.format(user=slugify(self.creator), id=self.trakt), None
316+
uri = build_uri('users/{user}/lists/{id}/like',
317+
user=slugify(self.creator), id=self.trakt)
318+
yield uri, None
310319

311320
@post
312321
def remove_items(self, *items):
@@ -317,15 +326,16 @@ def remove_items(self, *items):
317326
people = [p.ids for p in items if isinstance(p, Person)]
318327
self._items = items
319328
args = {'movies': movies, 'shows': shows, 'people': people}
320-
uri = 'users/{user}/lists/{id}/items/remove'.format(
321-
user=slugify(self.creator), id=self.trakt)
329+
uri = build_uri('users/{user}/lists/{id}/items/remove',
330+
user=slugify(self.creator), id=self.trakt)
322331
yield uri, args
323332

324333
@delete
325334
def unlike(self):
326335
"""Remove a like on this :class:`UserList`."""
327-
uri = 'users/{username}/lists/{id}/like'
328-
yield uri.format(username=slugify(self.creator), id=self.trakt)
336+
uri = build_uri('users/{username}/lists/{id}/like',
337+
username=slugify(self.creator), id=self.trakt)
338+
yield uri
329339

330340

331341
class User:
@@ -353,7 +363,8 @@ def __init__(self, username, **kwargs):
353363
@get
354364
def _get(self):
355365
"""Get this :class:`User` from the trakt.tv API"""
356-
data = yield 'users/{username}'.format(username=slugify(self.username))
366+
uri = build_uri('users/{username}', username=slugify(self.username))
367+
data = yield uri
357368
self._build(data)
358369

359370
def _build(self, data):
@@ -370,8 +381,8 @@ def followers(self):
370381
display data either.
371382
"""
372383
if self._followers is None:
373-
data = yield 'users/{user}/followers'.format(
374-
user=slugify(self.username))
384+
uri = build_uri('users/{user}/followers', user=slugify(self.username))
385+
data = yield uri
375386
self._followers = []
376387
for user in data:
377388
user_data = user.pop('user')
@@ -388,8 +399,8 @@ def following(self):
388399
that are protected won't display data either.
389400
"""
390401
if self._following is None:
391-
data = yield 'users/{user}/following'.format(
392-
user=slugify(self.username))
402+
uri = build_uri('users/{user}/following', user=slugify(self.username))
403+
data = yield uri
393404
self._following = []
394405
for user in data:
395406
user_data = user.pop('user')
@@ -408,8 +419,8 @@ def friends(self):
408419
"""
409420
if self._friends is None:
410421
self._friends = []
411-
data = yield 'users/{user}/friends'.format(
412-
user=slugify(self.username))
422+
uri = build_uri('users/{user}/friends', user=slugify(self.username))
423+
data = yield uri
413424
for user in data:
414425
user_data = user.pop('user')
415426
date = user.pop('friends_at')
@@ -424,8 +435,8 @@ def lists(self):
424435
lists, you will need to authenticate as yourself.
425436
"""
426437
if self._lists is None:
427-
data = yield 'users/{username}/lists'.format(
428-
username=slugify(self.username))
438+
uri = build_uri('users/{username}/lists', username=slugify(self.username))
439+
data = yield uri
429440
for ul in data:
430441
if "user" in ul:
431442
# user will be replaced with the self User object
@@ -556,9 +567,8 @@ def watched_shows(self):
556567
collection.
557568
"""
558569
if self._watched_shows is None:
559-
data = yield 'users/{user}/watched/shows'.format(
560-
user=slugify(self.username)
561-
)
570+
uri = build_uri('users/{user}/watched/shows', user=slugify(self.username))
571+
data = yield uri
562572
self._watched_shows = []
563573
for show in data:
564574
show_data = show.pop('show')
@@ -574,8 +584,8 @@ def watching(self):
574584
will be returned. Protected users won't return any data unless you are
575585
friends.
576586
"""
577-
data = yield 'users/{user}/watching'.format(
578-
user=slugify(self.username))
587+
uri = build_uri('users/{user}/watching', user=slugify(self.username))
588+
data = yield uri
579589

580590
# if a user isn't watching anything, trakt returns a 204
581591
if data is None or data == '':
@@ -616,10 +626,13 @@ def get_ratings(self, media_type='movies', rating=None):
616626
'movies', 'shows', 'seasons', 'episodes'
617627
:param rating: Optional rating between 1 and 10
618628
"""
619-
uri = 'users/{user}/ratings/{type}'.format(user=slugify(self.username),
620-
type=media_type)
621629
if rating is not None:
622-
uri += '/{rating}'.format(rating=rating)
630+
uri = build_uri('users/{user}/ratings/{type}/{rating}',
631+
user=slugify(self.username), type=media_type,
632+
rating=rating)
633+
else:
634+
uri = build_uri('users/{user}/ratings/{type}',
635+
user=slugify(self.username), type=media_type)
623636
data = yield uri
624637
# TODO (moogar0880) - return as objects
625638
yield data
@@ -629,7 +642,8 @@ def get_stats(self):
629642
"""Returns stats about the movies, shows, and episodes a user has
630643
watched and collected
631644
"""
632-
data = yield 'users/{user}/stats'.format(user=slugify(self.username))
645+
uri = build_uri('users/{user}/stats', user=slugify(self.username))
646+
data = yield uri
633647
yield data
634648

635649
@get

0 commit comments

Comments
 (0)