Ejemplo n.º 1
0
class Crew(Person):
    job = Datapoint('job')
    department = Datapoint('department')

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}','{0.job}'>"\
               .format(self).encode('utf-8')
Ejemplo n.º 2
0
class Image(Element):
    filename = Datapoint('file_path',
                         initarg=1,
                         handler=lambda x: x.lstrip('/'))
    aspectratio = Datapoint('aspect_ratio')
    height = Datapoint('height')
    width = Datapoint('width')
    language = Datapoint('iso_639_1')

    def sizes(self):
        return ['original']

    def geturl(self, size='original'):
        if size not in self.sizes():
            raise TMDBImageSizeError
        url = Configuration.images['base_url'].rstrip('/')
        return url + '/{0}/{1}'.format(size, self.filename)

    # sort preferring locale's language, but keep remaining ordering consistent
    def __lt__(self, other):
        return (self.language == self._locale.language) \
                and (self.language != other.language)

    def __gt__(self, other):
        return (self.language != other.language) \
                and (other.language == self._locale.language)

    def __eq__(self, other):
        return self.language == other.language

    def __repr__(self):
        # BASE62 encoded filename, no need to worry about unicode
        return u"<{0.__class__.__name__} '{0.filename}'>".format(self)
Ejemplo n.º 3
0
class Release( Element ):
    certification   = Datapoint('certification')
    country         = Datapoint('iso_3166_1')
    releasedate     = Datapoint('release_date', handler=process_date)
    def __repr__(self):
        return u"<{0.__class__.__name__} {0.country}, {0.releasedate}>"\
                            .format(self).encode('utf-8')
Ejemplo n.º 4
0
class Cast(Person):
    character = Datapoint('character')
    order = Datapoint('order')

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}' as '{0.character}'>"\
               .format(self).encode('utf-8')
Ejemplo n.º 5
0
class Collection(NameRepr, Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
    backdrop = Datapoint('backdrop_path', handler=Backdrop, \
                         raw=False, default=None)
    poster = Datapoint('poster_path', handler=Poster, raw=False, default=None)
    members = Datalist('parts', handler=Movie)
    overview = Datapoint('overview')

    def _populate(self):
        return Request('collection/{0}'.format(self.id), language='fr')

    def _populate_images(self):
        kwargs = {}
        if not self._locale.fallthrough:
            kwargs['language'] = 'fr'
        return Request('collection/{0}/images'.format(self.id), **kwargs)

    backdrops = Datalist('backdrops',
                         handler=Backdrop,
                         poller=_populate_images,
                         sort=True)
    posters = Datalist('posters',
                       handler=Poster,
                       poller=_populate_images,
                       sort=True)
Ejemplo n.º 6
0
class Genre(NameRepr, Element):
    id = Datapoint('id')
    name = Datapoint('name')

    def _populate_movies(self):
        return Request('genre/{0}/movies'.format(self.id),
                       language=self._locale.language)

    @property
    def movies(self):
        if 'movies' not in self._data:
            search = MovieSearchResult(self._populate_movies(),
                                       locale=self._locale)
            search._name = u"{0.name} Movies".format(self)
            self._data['movies'] = search
        return self._data['movies']

    @classmethod
    def getAll(cls, locale=None):
        class GenreList(Element):
            genres = Datalist('genres', handler=Genre)

            def _populate(self):
                return Request('genre/list', language=self._locale.language)
        return GenreList(locale=locale).genres
Ejemplo n.º 7
0
class ReverseCrew(Movie):
    department = Datapoint('department')
    job = Datapoint('job')

    def __repr__(self):
        return (u"<{0.__class__.__name__} '{0.job}' for {1}>"
                .format(self, self._printable_name()).encode('utf-8'))
Ejemplo n.º 8
0
class Keyword(Element):
    id   = Datapoint('id')
    name = Datapoint('name')

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}'>"\
               .format(self).encode('utf-8')
Ejemplo n.º 9
0
class Translation(Element):
    name = Datapoint('name')
    language = Datapoint('iso_639_1')
    englishname = Datapoint('english_name')

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}' ({0.language})>"\
               .format(self).encode('utf-8')
Ejemplo n.º 10
0
class Release(Element):
    certification = Datapoint('certification')
    country = Datapoint('iso_3166_1')
    releasedate     = Datapoint('release_date', handler=lambda x: \
                                         datetime.datetime.strptime(x, '%Y-%m-%d'))

    def __repr__(self):
        return u"<Release {0.country}, {0.releasedate}>".format(self)
Ejemplo n.º 11
0
class Collection(Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
    backdrop = Datapoint('backdrop_path', handler=Backdrop, raw=False)
    poster = Datapoint('poster_path', handler=Poster, raw=False)
    members = Datalist('parts', handler=Movie)

    def _populate(self):
        return Request('collection/{0}'.format(self.id)).readJSON()
Ejemplo n.º 12
0
class Crew(Element):
    id = Datapoint('id')
    name = Datapoint('name')
    job = Datapoint('job')
    department = Datapoint('department')
    profile = Datapoint('profile_path', handler=Profile, raw=False)

    def __repr__(self):
        return u"<{0.__class__.__name__} '{1.name}','{1.job}'>".format(self)
Ejemplo n.º 13
0
class Cast(Element):
    id = Datapoint('id')
    character = Datapoint('character')
    name = Datapoint('name')
    profile = Datapoint('profile_path', handler=Profile, raw=False)
    order = Datapoint('order')

    def __repr__(self):
        return u"<{0} '{1.name}' as '{1.character}' at {2}>".\
                        format(self.__class__.__name__, self, hex(id(self)))
Ejemplo n.º 14
0
class Collection(NameRepr, Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
    backdrop = Datapoint('backdrop_path', handler=Backdrop, raw=False)
    poster = Datapoint('poster_path', handler=Poster, raw=False)
    members = Datalist('parts', handler=Movie, sort='releasedate')

    def _populate(self):
        return Request('collection/{0}'.format(self.id), \
                            language=self._locale.language)
Ejemplo n.º 15
0
class Person(Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
    biography = Datapoint('biography')
    dayofbirth = Datapoint('birthday', default=None, handler=process_date)
    dayofdeath = Datapoint('deathday', default=None, handler=process_date)
    homepage = Datapoint('homepage')
    birthplace = Datapoint('place_of_birth')
    profile = Datapoint('profile_path',
                        handler=Profile,
                        raw=False,
                        default=None)
    adult = Datapoint('adult')
    aliases = Datalist('also_known_as')

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}'>"\
                            .format(self).encode('utf-8')

    def _populate(self):
        return Request('person/{0}'.format(self.id))

    def _populate_credits(self):
        return Request('person/{0}/credits'.format(self.id), language='fr')

    def _populate_images(self):
        return Request('person/{0}/images'.format(self.id))

    roles = Datalist('cast',
                     handler=lambda x: ReverseCast(raw=x),
                     poller=_populate_credits)
    crew = Datalist('crew',
                    handler=lambda x: ReverseCrew(raw=x),
                    poller=_populate_credits)
    profiles = Datalist('profiles', handler=Profile, poller=_populate_images)
Ejemplo n.º 16
0
class AlternateTitle( Element ):
    country     = Datapoint('iso_3166_1')
    title       = Datapoint('title')

    # sort preferring locale's country, but keep remaining ordering consistent
    def __lt__(self, other):
        return (self.country == self._locale.country) \
                and (self.country != other.country)
    def __gt__(self, other):
        return (self.country != other.country) \
                and (other.country == self._locale.country)
    def __eq__(self, other):
        return self.country == other.country

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.title}' ({0.country})>"\
                        .format(self).encode('utf-8')
Ejemplo n.º 17
0
class List(NameRepr, Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
    author = Datapoint('created_by')
    description = Datapoint('description')
    favorites = Datapoint('favorite_count')
    language = Datapoint('iso_639_1')
    count = Datapoint('item_count')
    poster = Datapoint('poster_path', handler=Poster, raw=False, default=None)
    members = Datalist('items', handler=Movie)

    def _populate(self):
        return Request('list/{0}'.format(self.id))
Ejemplo n.º 18
0
class Image(Element):
    filename = Datapoint('file_path',
                         initarg=1,
                         handler=lambda x: x.lstrip('/'))
    aspectratio = Datapoint('aspect_ratio')
    height = Datapoint('height')
    width = Datapoint('width')
    language = Datapoint('iso_639_1')

    def sizes(self):
        return ['original']

    def geturl(self, size='original'):
        if size not in self.sizes():
            raise TMDBImageSizeError
        url = Configuration.images['base_url'].rstrip('/')
        return url + '/{0}/{1}'.format(size, self.filename)

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.filename}'>".format(self)
Ejemplo n.º 19
0
class Studio(NameRepr, Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
    description = Datapoint('description')
    headquarters = Datapoint('headquarters')
    logo = Datapoint('logo_path', handler=Logo, raw=False, default=None)
    # FIXME: manage not-yet-defined handlers in a way that will propogate
    #        locale information properly
    parent = Datapoint('parent_company', handler=lambda x: Studio(raw=x))

    def _populate(self):
        return Request('company/{0}'.format(self.id))

    def _populate_movies(self):
        return Request('company/{0}/movies'.format(self.id),
                       language=self._locale.language)

    # FIXME: add a cleaner way of adding types with no additional processing
    @property
    def movies(self):
        if 'movies' not in self._data:
            search = MovieSearchResult(self._populate_movies(),
                                       locale=self._locale)
            search._name = u"{0.name} Movies".format(self)
            self._data['movies'] = search
        return self._data['movies']
Ejemplo n.º 20
0
class AppleTrailer( Element ):
    name    = Datapoint('name')
    sources = Datadict('sources', handler=Trailer, attr='size')

    def sizes(self):
        return self.sources.keys()

    def geturl(self, size=None):
        if size is None:
            # sort assuming ###p format for now, take largest resolution
            size = str(sorted([int(size[:-1]) for size in self.sources])[-1])+'p'
        return self.sources[size].source

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}'>".format(self)
Ejemplo n.º 21
0
class Video(Element):
    id = Datapoint('id')
    name = Datapoint('name')
    country = Datapoint('iso_3166_1')
    language = Datapoint('iso_639_1')
    size = Datapoint('size')
    key = Datapoint('key')
    site = Datapoint('site')
    type = Datapoint('type')

    def geturl(self):
        if self.site == 'YouTube':
            self.key = self.key.encode('ascii', errors='ignore')
            return "http://www.youtube.com/watch?v={0}".format(self.key)

    def __repr__(self):
        return u"<{0.__class__.__name__} '{0.name}'>".format(self)
Ejemplo n.º 22
0
class Image(Element):
    filename = Datapoint('file_path',
                         initarg=1,
                         handler=lambda x: x.lstrip('/'))
    aspectratio = Datapoint('aspect_ratio')
    height = Datapoint('height')
    width = Datapoint('width')
    language = Datapoint('iso_639_1')
    userrating = Datapoint('vote_average')
    votes = Datapoint('vote_count')

    def sizes(self):
        return ['original']

    def geturl(self, size='original'):
        if size not in self.sizes():
            raise TMDBImageSizeError
        url = Configuration.images['secure_base_url'].rstrip('/')
        return url + '/{0}/{1}'.format(size, self.filename)

    # sort preferring locale's language, but keep remaining ordering consistent
    def __lt__(self, other):
        if not isinstance(other, Image):
            return False
        return (self.language == 'fr') \
                and (self.language != other.language)

    def __gt__(self, other):
        if not isinstance(other, Image):
            return True
        return (self.language != other.language) \
                and (other.language == 'fr')

    # direct match for comparison
    def __eq__(self, other):
        if not isinstance(other, Image):
            return False
        return self.filename == other.filename

    # special handling for boolean to see if exists
    def __nonzero__(self):
        if len(self.filename) == 0:
            return False
        return True

    def __repr__(self):
        # BASE62 encoded filename, no need to worry about unicode
        return u"<{0.__class__.__name__} '{0.filename}'>".format(self)
Ejemplo n.º 23
0
class Account(NameRepr, Element):
    def _populate(self):
        return Request('account', session_id=self._session.sessionid)

    id = Datapoint('id')
    adult = Datapoint('include_adult')
    country = Datapoint('iso_3166_1')
    language = Datapoint('iso_639_1')
    name = Datapoint('name')
    username = Datapoint('username')

    @property
    def locale(self):
        return get_locale(self.language, self.country)
Ejemplo n.º 24
0
class Series(Element):
    id = Datapoint('id', initarg=1)
    backdrop = Datapoint('backdrop_path', handler=Backdrop, raw=False, default=None)
    studios = Datalist('created_by', handler=Person)
    runtime = Datalist('episode_run_time')
    genres = Datalist('genres', handler=Genre)
    homepage = Datapoint('homepage')
    in_production = Datapoint('in_production')
    languages = Datalist('languages')
    countries = Datalist('origin_country')
    title = Datapoint('name')
    originaltitle = Datapoint('original_name')
    number_of_episodes = Datapoint('number_of_episodes')
    number_of_seasons = Datapoint('number_of_seasons')
    overview = Datapoint('overview')
    popularity = Datapoint('popularity')
    status = Datapoint('status')
    userrating = Datapoint('vote_average')
    votes = Datapoint('vote_count')
    poster = Datapoint('poster_path', handler=Poster, raw=False, default=None)
    seasons = Datadict('seasons', attr='season_number', handler=Season, passthrough={'id': 'series_id'})

    def _populate_cast(self):
        return Request('tv/{0}/credits'.format(self.id))

    cast = Datalist('cast', handler=Cast, poller=_populate_cast, sort='order')
    crew = Datalist('crew', handler=Crew, poller=_populate_cast)
Ejemplo n.º 25
0
class Season(NameRepr, Element):
    season_number = Datapoint('season_number', initarg=2)
    series_id = Datapoint('series_id', initarg=1)
    id = Datapoint('id')
    air_date = Datapoint('air_date', handler=process_date)
    poster = Datapoint('poster_path', handler=Poster, raw=False, default=None)
    overview = Datapoint('overview')
    name = Datapoint('name')
    episodes = Datadict('episodes', attr='episode_number', handler=Episode,
                        passthrough={'series_id': 'series_id', 'season_number': 'season_number'})

    def _populate(self):
        return Request('tv/{0}/season/{1}'.format(self.series_id, self.season_number),
                       language=self._locale.language)

    def _populate_images(self):
        kwargs = {}
        if not self._locale.fallthrough:
            kwargs['language'] = self._locale.language
        return Request('tv/{0}/season/{1}/images'.format(self.series_id, self.season_number), **kwargs)

    def _populate_external_ids(self):
        return Request('tv/{0}/season/{1}/external_ids'.format(self.series_id, self.season_number))

    posters = Datalist('posters', handler=Poster,
                       poller=_populate_images, sort=True)

    freebase_id = Datapoint('freebase_id', poller=_populate_external_ids)
    freebase_mid = Datapoint('freebase_mid', poller=_populate_external_ids)
    tvdb_id = Datapoint('tvdb_id', poller=_populate_external_ids)
    tvrage_id = Datapoint('tvrage_id', poller=_populate_external_ids)
Ejemplo n.º 26
0
class Episode(NameRepr, Element):
    episode_number = Datapoint('episode_number', initarg=3)
    season_number = Datapoint('season_number', initarg=2)
    series_id = Datapoint('series_id', initarg=1)
    air_date = Datapoint('air_date', handler=process_date)
    overview = Datapoint('overview')
    name = Datapoint('name')
    userrating = Datapoint('vote_average')
    votes = Datapoint('vote_count')
    id = Datapoint('id')
    production_code = Datapoint('production_code')
    still = Datapoint('still_path', handler=Backdrop, raw=False, default=None)

    def _populate(self):
        return Request('tv/{0}/season/{1}/episode/{2}'.format(self.series_id, self.season_number, self.episode_number),
                       language=self._locale.language)

    def _populate_cast(self):
        return Request('tv/{0}/season/{1}/episode/{2}/credits'.format(
            self.series_id, self.season_number, self.episode_number),
                       language=self._locale.language)

    def _populate_external_ids(self):
        return Request('tv/{0}/season/{1}/episode/{2}/external_ids'.format(
            self.series_id, self.season_number, self.episode_number))

    def _populate_images(self):
        kwargs = {}
        if not self._locale.fallthrough:
            kwargs['language'] = self._locale.language
        return Request('tv/{0}/season/{1}/episode/{2}/images'.format(
            self.series_id, self.season_number, self.episode_number), **kwargs)

    cast = Datalist('cast', handler=Cast,
                    poller=_populate_cast, sort='order')
    guest_stars = Datalist('guest_stars', handler=Cast,
                    poller=_populate_cast, sort='order')
    crew = Datalist('crew', handler=Crew, poller=_populate_cast)
    imdb_id = Datapoint('imdb_id', poller=_populate_external_ids)
    freebase_id = Datapoint('freebase_id', poller=_populate_external_ids)
    freebase_mid = Datapoint('freebase_mid', poller=_populate_external_ids)
    tvdb_id = Datapoint('tvdb_id', poller=_populate_external_ids)
    tvrage_id = Datapoint('tvrage_id', poller=_populate_external_ids)
    stills = Datalist('stills', handler=Backdrop, poller=_populate_images, sort=True)
Ejemplo n.º 27
0
class Network(NameRepr, Element):
    id = Datapoint('id', initarg=1)
    name = Datapoint('name')
Ejemplo n.º 28
0
class ReverseCast(Movie):
    character = Datapoint('character')

    def __repr__(self):
        return (u"<{0.__class__.__name__} '{0.character}' on {1}>"
                .format(self, self._printable_name()).encode('utf-8'))
Ejemplo n.º 29
0
class Movie(Element):
    @classmethod
    def latest(cls):
        req = Request('latest/movie')
        req.lifetime = 600
        return cls(raw=req.readJSON())

    @classmethod
    def discover(cls, locale=None, **kwargs):
        res = MovieSearchResult(Request('discover/movie', **kwargs), locale=locale)
        res._name = 'Discover'
        return res

    @classmethod
    def nowplaying(cls, locale=None):
        res = MovieSearchResult(Request('movie/now_playing'), locale=locale)
        res._name = 'Now Playing'
        return res

    @classmethod
    def mostpopular(cls, locale=None):
        res = MovieSearchResult(Request('movie/popular'), locale=locale)
        res._name = 'Popular'
        return res

    @classmethod
    def toprated(cls, locale=None):
        res = MovieSearchResult(Request('movie/top_rated'), locale=locale)
        res._name = 'Top Rated'
        return res

    @classmethod
    def upcoming(cls, locale=None):
        res = MovieSearchResult(Request('movie/upcoming'), locale=locale)
        res._name = 'Upcoming'
        return res

    @classmethod
    def favorites(cls, session=None):
        if session is None:
            session = get_session()
        account = Account(session=session)
        res = MovieSearchResult(
                    Request('account/{0}/favorite_movies'.format(account.id),
                            session_id=session.sessionid))
        res._name = "Favorites"
        return res

    @classmethod
    def ratedmovies(cls, session=None):
        if session is None:
            session = get_session()
        account = Account(session=session)
        res = MovieSearchResult(
                    Request('account/{0}/rated_movies'.format(account.id),
                            session_id=session.sessionid))
        res._name = "Movies You Rated"
        return res

    @classmethod
    def watchlist(cls, session=None):
        if session is None:
            session = get_session()
        account = Account(session=session)
        res = MovieSearchResult(
                    Request('account/{0}/movie_watchlist'.format(account.id),
                            session_id=session.sessionid))
        res._name = "Movies You're Watching"
        return res

    @classmethod
    def fromIMDB(cls, imdbid, locale=None):
        try:
            # assume string
            if not imdbid.startswith('tt'):
                imdbid = "tt{0:0>7}".format(imdbid)
        except AttributeError:
            # assume integer
            imdbid = "tt{0:0>7}".format(imdbid)
        if locale is None:
            locale = get_locale()
        movie = cls(imdbid, locale=locale)
        movie._populate()
        return movie

    id = Datapoint('id', initarg=1)
    title = Datapoint('title')
    originaltitle = Datapoint('original_title')
    tagline = Datapoint('tagline')
    overview = Datapoint('overview')
    runtime = Datapoint('runtime')
    budget = Datapoint('budget')
    revenue = Datapoint('revenue')
    releasedate = Datapoint('release_date', handler=process_date)
    homepage = Datapoint('homepage')
    imdb = Datapoint('imdb_id')
    originallanguage = Datapoint('original_language')
    status = Datapoint('status')

    backdrop = Datapoint('backdrop_path', handler=Backdrop,
                         raw=False, default=None)
    poster = Datapoint('poster_path', handler=Poster,
                       raw=False, default=None)

    popularity = Datapoint('popularity')
    userrating = Datapoint('vote_average')
    votes = Datapoint('vote_count')

    adult = Datapoint('adult')
    video = Datapoint('video')
    collection = Datapoint('belongs_to_collection', handler=lambda x:
                                                        Collection(raw=x))
    genres = Datalist('genres', handler=Genre)
    studios = Datalist('production_companies', handler=Studio)
    countries = Datalist('production_countries', handler=Country)
    languages = Datalist('spoken_languages', handler=Language)

    def _populate(self):
        return Request('movie/{0}'.format(self.id),
                       language=self._locale.language)

    def _populate_titles(self):
        kwargs = {}
        if not self._locale.fallthrough:
            kwargs['country'] = self._locale.country
        return Request('movie/{0}/alternative_titles'.format(self.id),
                       **kwargs)

    # TODO: implement changes
    # def _populate_changes(self):
    #     return Request('movie/{movie_id}/changes').format(movie_id=self.id)

    def _populate_credits(self):
        return Request('movie/{0}/credits'.format(self.id))

    def _populate_images(self):
        kwargs = {}
        if not self._locale.fallthrough:
            kwargs['language'] = self._locale.language
        return Request('movie/{0}/images'.format(self.id), **kwargs)

    def _populate_keywords(self):
        return Request('movie/{0}/keywords'.format(self.id))

    def _populate_releases(self):
        return Request('movie/{0}/releases'.format(self.id))

    def _populate_trailers(self):
        return Request('movie/{0}/trailers'.format(self.id),
                       language=self._locale.language)

    def _populate_videos(self):
        return Request('movie/{0}/videos'.format(self.id),
                       language=self._locale.language)

    def _populate_translations(self):
        return Request('movie/{0}/translations'.format(self.id))

    alternate_titles = Datalist('titles', handler=AlternateTitle,
                                poller=_populate_titles, sort=True)

    cast = Datalist('cast', handler=Cast,
                    poller=_populate_credits, sort='order')
    crew = Datalist('crew', handler=Crew, poller=_populate_credits)

    backdrops = Datalist('backdrops', handler=Backdrop,
                         poller=_populate_images, sort=True)
    posters = Datalist('posters', handler=Poster,
                       poller=_populate_images, sort=True)
    keywords = Datalist('keywords', handler=Keyword,
                        poller=_populate_keywords)
    releases = Datadict('countries', handler=Release,
                        poller=_populate_releases, attr='country')
    youtube_trailers = Datalist('youtube', handler=YoutubeTrailer,
                                poller=_populate_trailers)
    apple_trailers = Datalist('quicktime', handler=AppleTrailer,
                              poller=_populate_trailers)
    videos = Datalist('results', handler=Video, poller=_populate_videos)
    translations = Datalist('translations', handler=Translation,
                            poller=_populate_translations)

    def setFavorite(self, value):
        req = Request('account/{0}/favorite'.format(
                        Account(session=self._session).id),
                      session_id=self._session.sessionid)
        req.add_data({'movie_id': self.id,
                      'favorite': str(bool(value)).lower()})
        req.lifetime = 0
        req.readJSON()

    def setRating(self, value):
        if not (0 <= value <= 10):
            raise TMDBError("Ratings must be between '0' and '10'.")
        req = Request('movie/{0}/rating'.format(self.id),
                      session_id=self._session.sessionid)
        req.lifetime = 0
        req.add_data({'value': value})
        req.readJSON()

    def setWatchlist(self, value):
        req = Request('account/{0}/movie_watchlist'.format(
                        Account(session=self._session).id),
                      session_id=self._session.sessionid)
        req.lifetime = 0
        req.add_data({'movie_id': self.id,
                      'movie_watchlist': str(bool(value)).lower()})
        req.readJSON()

    def getSimilar(self):
        return self.similar

    @property
    def similar(self):
        res = MovieSearchResult(Request(
            'movie/{0}/similar'.format(self.id)), locale=self._locale)
        res._name = 'Similar to {0}'.format(self._printable_name())
        return res

    @property
    def recommendations(self):
        res = MovieSearchResult(Request(
            'movie/{0}/recommendations'.format(self.id)), locale=self._locale)
        res._name = 'Recommendations for {0}'.format(self._printable_name())
        return res

    @property
    def lists(self):
        res = ListSearchResult(Request('movie/{0}/lists'.format(self.id)))
        res._name = "Lists containing {0}".format(self._printable_name())
        return res

    def _printable_name(self):
        if self.title is not None:
            s = u"'{0}'".format(self.title)
        elif self.originaltitle is not None:
            s = u"'{0}'".format(self.originaltitle)
        else:
            s = u"'No Title'"
        if self.releasedate:
            s = u"{0} ({1})".format(s, self.releasedate.year)
        return s

    def __repr__(self):
        return u"<{0} {1}>".format(self.__class__.__name__,
                                   self._printable_name()).encode('utf-8')
Ejemplo n.º 30
0
class Language(NameRepr, Element):
    code = Datapoint('iso_639_1')
    name = Datapoint('name')