Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,12 @@ def test_build_uri():
'users/sean/watched/movies'
assert build_uri('shows/popular', page=2, limit=10) == \
'shows/popular?page=2&limit=10'
assert build_uri('shows/popular?extended={extended}', extended='full',
page=2) == 'shows/popular?extended=full&page=2'
assert build_uri('shows/popular', extended='full') == \
'shows/popular?extended=full'
assert build_uri('shows/popular', page=2, extended='full') == \
'shows/popular?page=2&extended=full'
Comment thread
glensc marked this conversation as resolved.
assert build_uri('shows/popular?sort=rank', page=2) == \
'shows/popular?sort=rank&page=2'


def test_build_uri_pagination_validation():
Expand Down
8 changes: 3 additions & 5 deletions trakt/calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from trakt.core import get
from trakt.movies import Movie
from trakt.tv import TVEpisode, TVShow
from trakt.utils import airs_date, now
from trakt.utils import airs_date, build_uri, now

__author__ = 'Jon Nappi'
__all__ = ['Calendar', 'PremiereCalendar', 'MyPremiereCalendar',
Expand Down Expand Up @@ -57,10 +57,8 @@ def __str__(self):
@property
def ext(self):
"""construct the fully formatted url for this Calendar"""
uri = '/'.join([self.url, str(self.date), str(self.days)])
if self.extended:
uri += '?extended={extended}'.format(extended=self.extended)
return uri
return build_uri('{url}/{date}/{days}', url=self.url, date=self.date,
days=self.days, extended=self.extended)

@get
def _get(self):
Expand Down
8 changes: 4 additions & 4 deletions trakt/movies.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
add_to_watchlist, checkin_media, comment,
delete_checkin, rate, remove_from_collection,
remove_from_history, remove_from_watchlist, search)
from trakt.utils import now, slugify
from trakt.utils import build_uri, now, slugify

__author__ = 'Jon Nappi'
__all__ = ['dismiss_recommendation', 'get_recommended_movies', 'genres',
Expand Down Expand Up @@ -144,17 +144,17 @@ def _build(self, data):
@property
def ext(self):
"""Base uri to retrieve basic information about this :class:`Movie`"""
return 'movies/{slug}'.format(slug=self.slug)
return build_uri('movies/{slug}', slug=self.slug)

@property
def ext_full(self):
"""Uri to retrieve all information about this :class:`Movie`"""
return self.ext + '?extended=full'
return build_uri(self.ext, extended='full')

@property
def images_ext(self):
"""Uri to retrieve additional image information"""
return self.ext + '?extended=images'
return build_uri(self.ext, extended='images')

@property
@get
Expand Down
8 changes: 4 additions & 4 deletions trakt/people.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from trakt.core import get
from trakt.mixins import IdsMixin
from trakt.sync import search
from trakt.utils import slugify
from trakt.utils import build_uri, slugify

__author__ = 'Jon Nappi'
__all__ = ['Person', 'ActingCredit', 'CrewCredit', 'Credits', 'MovieCredits',
Expand Down Expand Up @@ -40,15 +40,15 @@ def search(name, year=None):

@property
def ext(self):
return 'people/{id}'.format(id=self.slug)
return build_uri('people/{id}', id=self.slug)

@property
def ext_full(self):
return self.ext + '?extended=full'
return build_uri(self.ext, extended='full')

@property
def images_ext(self):
return self.ext + '?extended=images'
return build_uri(self.ext, extended='images')

@property
def ext_movie_credits(self):
Expand Down
21 changes: 8 additions & 13 deletions trakt/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from trakt.core import delete, get, post
from trakt.mixins import IdsMixin
from trakt.utils import slugify, timestamp
from trakt.utils import build_uri, slugify, timestamp

__author__ = 'Jon Nappi'
__all__ = ['Scrobbler', 'comment', 'rate', 'add_to_history', 'get_collection',
Expand Down Expand Up @@ -469,12 +469,10 @@ def get_watched(list_type=None, extended=None):
if list_type and list_type not in valid_type:
raise ValueError('list_type must be one of {}'.format(valid_type))

uri = 'sync/watched'
if list_type:
uri += '/{}'.format(list_type)

if list_type == 'shows' and extended:
uri += '?extended={extended}'.format(extended=extended)
uri = (build_uri('sync/watched/{list_type}', list_type=list_type)
if list_type else 'sync/watched')
if list_type == 'shows':
uri = build_uri(uri, extended=extended)

data = yield uri
results = []
Expand Down Expand Up @@ -508,12 +506,9 @@ def get_collection(list_type=None, extended=None):
if list_type and list_type not in valid_type:
raise ValueError('list_type must be one of {}'.format(valid_type))

uri = 'sync/collection'
if list_type:
uri += '/{}'.format(list_type)

if extended:
uri += '?extended={extended}'.format(extended=extended)
uri = (build_uri('sync/collection/{list_type}', list_type=list_type)
if list_type else 'sync/collection')
uri = build_uri(uri, extended=extended)

data = yield uri
results = []
Expand Down
90 changes: 32 additions & 58 deletions trakt/tv.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
add_to_watchlist, checkin_media, comment,
delete_checkin, rate, remove_from_collection,
remove_from_history, remove_from_watchlist, search)
from trakt.utils import airs_date, slugify
from trakt.utils import airs_date, build_uri, slugify

__author__ = 'Jon Nappi'
__all__ = ['dismiss_recommendation', 'get_recommended_shows', 'genres',
Expand Down Expand Up @@ -44,9 +44,7 @@ def get_recommended_shows(page=1, limit=10):
history and your friends. Results are returned with the top recommendation
first.
"""
data = yield 'recommendations/shows?page={page}&limit={limit}'.format(
page=page, limit=limit
)
data = yield build_uri('recommendations/shows', page=page, limit=limit)
yield [TVShow(**show) for show in data]


Expand All @@ -59,11 +57,7 @@ def genres():

@get
def popular_shows(page=1, limit=10, extended=None):
uri = 'shows/popular?page={page}&limit={limit}'.format(
page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/popular', page=page, limit=limit, extended=extended)

data = yield uri
yield [TVShow(**show) for show in data]
Expand All @@ -72,11 +66,7 @@ def popular_shows(page=1, limit=10, extended=None):
@get
def trending_shows(page=1, limit=10, extended=None):
"""All :class:`TVShow`'s being watched right now"""
uri = 'shows/trending?page={page}&limit={limit}'.format(
page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/trending', page=page, limit=limit, extended=extended)

data = yield uri
yield [TVShow(**show['show']) for show in data]
Expand All @@ -90,11 +80,8 @@ def updated_shows(timestamp=None, page=1, limit=10, extended=None):
"""
y_day = datetime.now() - timedelta(1)
ts = timestamp or int(y_day.strftime('%s')) * 1000
uri = 'shows/updates/{start_date}?page={page}&limit={limit}'.format(
start_date=ts, page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/updates/{start_date}', start_date=ts, page=page,
limit=limit, extended=extended)

data = yield uri
yield [TVShow(**show) for show in data]
Expand All @@ -111,11 +98,9 @@ def recommended_shows(time_period='weekly', page=1, limit=10, extended=None):
valid_time_period
))

uri = 'shows/recommended/{time_period}?page={page}&limit={limit}'.format(
time_period=time_period, page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/recommended/{time_period}',
time_period=time_period, page=page, limit=limit,
extended=extended)

data = yield uri
yield [TVShow(**show['show']) for show in data]
Expand All @@ -134,11 +119,8 @@ def played_shows(time_period='weekly', page=1, limit=10, extended=None):
valid_time_period
))

uri = 'shows/played/{time_period}?page={page}&limit={limit}'.format(
time_period=time_period, page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/played/{time_period}', time_period=time_period,
page=page, limit=limit, extended=extended)

data = yield uri
yield [TVShow(**show['show']) for show in data]
Expand All @@ -156,11 +138,8 @@ def watched_shows(time_period='weekly', page=1, limit=10, extended=None):
valid_time_period
))

uri = 'shows/watched/{time_period}?page={page}&limit={limit}'.format(
time_period=time_period, page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/watched/{time_period}', time_period=time_period,
page=page, limit=limit, extended=extended)

data = yield uri
yield [TVShow(**show['show']) for show in data]
Expand All @@ -178,11 +157,9 @@ def collected_shows(time_period='weekly', page=1, limit=10, extended=None):
valid_time_period
))

uri = 'shows/collected/{time_period}?page={page}&limit={limit}'.format(
time_period=time_period, page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/collected/{time_period}',
time_period=time_period, page=page, limit=limit,
extended=extended)

data = yield uri
yield [TVShow(**show['show']) for show in data]
Expand All @@ -194,11 +171,8 @@ def anticipated_shows(page=1, limit=10, extended=None):
Return most anticipated shows based on the number of lists
a show appears on.
"""
uri = 'shows/anticipated?page={page}&limit={limit}'.format(
page=page, limit=limit
)
if extended:
uri += '&extended={extended}'.format(extended=extended)
uri = build_uri('shows/anticipated', page=page, limit=limit,
extended=extended)
data = yield uri
yield [TVShow(**show['show']) for show in data]

Expand Down Expand Up @@ -270,16 +244,16 @@ def _build(self, data):

@property
def ext(self):
return 'shows/{slug}'.format(slug=self.trakt or self.slug)
return build_uri('shows/{slug}', slug=self.trakt or self.slug)

@property
def ext_full(self):
return self.ext + '?extended=full'
return build_uri(self.ext, extended='full')

@property
def images_ext(self):
"""Uri to retrieve additional image information."""
return self.ext + '?extended=images'
return build_uri(self.ext, extended='images')

@property
@get
Expand Down Expand Up @@ -438,7 +412,7 @@ def seasons(self):
seasons which each contain :class:`TVEpisode` elements
"""
if self._seasons is None:
data = yield self.ext + '/seasons?extended=episodes'
data = yield build_uri(self.ext + '/seasons', extended='episodes')
self._seasons = []
for season in data:
# Prepare episodes
Expand All @@ -463,7 +437,7 @@ def last_episode(self):
is found, `None` will be returned.
"""
if self._last_episode is None:
data = yield self.ext + '/last_episode?extended=full'
data = yield build_uri(self.ext + '/last_episode', extended='full')
self._last_episode = data and TVEpisode(show=self.title,
show_id=self.trakt, **data)
yield self._last_episode
Expand All @@ -475,7 +449,7 @@ def next_episode(self):
is found, `None` will be returned.
"""
if self._next_episode is None:
data = yield self.ext + '/next_episode?extended=full'
data = yield build_uri(self.ext + '/next_episode', extended='full')
self._next_episode = data and TVEpisode(show=self.title,
show_id=self.trakt, **data)
yield self._next_episode
Expand Down Expand Up @@ -579,7 +553,8 @@ def __init__(self, show, season=1, slug=None, episodes=None, show_id=None, **kwa
self.show_id = show_id
self.season = season
self.slug = slug or slugify(show)
self.ext = 'shows/{id}/seasons/{season}'.format(id=self.slug, season=season)
self.ext = build_uri('shows/{id}/seasons/{season}', id=self.slug,
season=season)
self._comments = self._ratings = None
self._episodes = self._build_episodes(episodes) if episodes else None

Expand Down Expand Up @@ -662,9 +637,9 @@ def _episode_getter(self, episode):
:param episode: An int corresponding to the number of the episode
we're trying to retrieve
"""
episode_extension = '/episodes/{}?extended=full'.format(episode)
try:
data = yield self.ext + episode_extension
data = yield build_uri(self.ext + '/episodes/{episode}',
episode=episode, extended='full')
yield TVEpisode(show=self.show, **data)
except NotFoundException:
yield None
Expand Down Expand Up @@ -777,18 +752,17 @@ def ext(self):
show_id = getattr(self, "show_id", None)
if not show_id:
show_id = slugify(self.show)
return 'shows/{id}/seasons/{season}/episodes/{episode}'.format(
id=show_id, season=self.season, episode=self.number
)
return build_uri('shows/{id}/seasons/{season}/episodes/{episode}',
id=show_id, season=self.season, episode=self.number)

@property
def ext_full(self):
return self.ext + '?extended=full'
return build_uri(self.ext, extended='full')

@property
def images_ext(self):
"""Uri to retrieve additional image information"""
return self.ext + '?extended=images'
return build_uri(self.ext, extended='images')

@staticmethod
def search(title, year=None):
Expand Down
13 changes: 7 additions & 6 deletions trakt/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -475,8 +475,9 @@ def movie_collection(self):
Protected users won't return any data unless you are friends.
"""
if self._movie_collection is None:
ext = 'users/{username}/collection/movies?extended=metadata'
data = yield ext.format(username=slugify(self.username))
data = yield build_uri('users/{username}/collection/movies',
username=slugify(self.username),
extended='metadata')
self._movie_collection = []
for movie in data:
mov = movie.pop('movie')
Expand All @@ -491,8 +492,9 @@ def show_collection(self):
Protected users won't return any data unless you are friends.
"""
if self._show_collection is None:
ext = 'users/{username}/collection/shows?extended=metadata'
data = yield ext.format(username=slugify(self.username))
data = yield build_uri('users/{username}/collection/shows',
username=slugify(self.username),
extended='metadata')
self._show_collection = []
for show_data in data:
show_item = show_data.pop('show')
Expand Down Expand Up @@ -647,8 +649,7 @@ def get_liked_lists(self, list_type=None, limit=None):
if list_type is not None:
uri += f'/{list_type}'

if limit is not None:
uri += f'?limit={limit}'
uri = build_uri(uri, limit=limit)

data = yield uri
yield data
Expand Down
Loading