Ejemplo n.º 1
0
 def test_no_year(self):
     # Make sure parser doesn't crash for movies with no year
     parser = ImdbParser()
     parser.parse('tt3303790')
     assert parser.name == 'Master of None'
     # There is no year
     assert not parser.year
Ejemplo n.º 2
0
    def parse_what(self, what):
        """Given an imdb id or movie title, looks up from imdb and returns a dict with imdb_id and title keys"""
        imdb_id = extract_id(what)
        title = what

        if imdb_id:
            # Given an imdb id, find title
            parser = ImdbParser()
            try:
                parser.parse('http://www.imdb.com/title/%s' % imdb_id)
            except Exception:
                raise QueueError('Error parsing info from imdb for %s' %
                                 imdb_id)
            if parser.name:
                title = parser.name
        else:
            # Given a title, try to do imdb search for id
            console('Searching imdb for %s' % what)
            search = ImdbSearch()
            result = search.smart_match(what)
            if not result:
                raise QueueError(
                    'ERROR: Unable to find any such movie from imdb, use imdb url instead.'
                )
            imdb_id = extract_id(result['url'])
            title = result['name']

        self.options['imdb_id'] = imdb_id
        self.options['title'] = title
        return {'title': title, 'imdb_id': imdb_id}
Ejemplo n.º 3
0
 def test_no_plot(self):
     # Make sure parser doesn't crash for movies with no plot
     parser = ImdbParser()
     parser.parse('tt1300562')
     assert parser.name == 'Goodbye Mothers'
     # There is no plot
     assert not parser.plot_outline
Ejemplo n.º 4
0
 def test_no_plot(self):
     # Make sure parser doesn't crash for movies with no plot
     parser = ImdbParser()
     parser.parse('tt0245062')
     assert parser.name == 'The Magnet'
     # There is no plot
     assert not parser.plot_outline
Ejemplo n.º 5
0
 def test_plot_with_links(self):
     """Make sure plot doesn't terminate at the first link. GitHub #756"""
     parser = ImdbParser()
     parser.parse('tt2503944')
     assert parser.plot_outline == ("Chef Adam Jones (Bradley Cooper) had it all - and lost it. A two-star Michelin "
                                    "rockstar with the bad habits to match, the former enfant terrible of the Paris "
                                    "restaurant scene did everything different every time out, and only ever cared "
                                    "about the thrill of creating explosions of taste. To land his own kitchen and "
                                    "that third elusive Michelin star though, he'll need the best of the best on "
                                    "his side, including the beautiful Helene (Sienna Miller).")
Ejemplo n.º 6
0
def upgrade(ver, session):
    if ver == 0:
        # Translate old qualities into new quality requirements
        movie_table = table_schema('movie_queue', session)
        for row in session.execute(
                select([movie_table.c.id, movie_table.c.quality])):
            # Webdl quality no longer has dash
            new_qual = row['quality'].replace('web-dl', 'webdl')
            if new_qual.lower() != 'any':
                # Old behavior was to get specified quality or greater, approximate that with new system
                new_qual = ' '.join(qual + '+' for qual in new_qual.split(' '))
            session.execute(
                update(movie_table, movie_table.c.id == row['id'],
                       {'quality': new_qual}))
        ver = 1
    if ver == 1:
        # Bad upgrade left some qualities as 'ANY+'
        movie_table = table_schema('movie_queue', session)
        for row in session.execute(
                select([movie_table.c.id, movie_table.c.quality])):
            if row['quality'].lower() == 'any+':
                session.execute(
                    update(movie_table, movie_table.c.id == row['id'],
                           {'quality': 'ANY'}))
        ver = 2
    if ver == 2:
        from flexget.utils.imdb import ImdbParser
        # Corrupted movie titles may be in the queue due to imdb layout changes. GitHub #729
        movie_table = table_schema('movie_queue', session)
        queue_base_table = table_schema('queue', session)
        query = select([
            movie_table.c.id, movie_table.c.imdb_id, queue_base_table.c.title
        ])
        query = query.where(movie_table.c.id == queue_base_table.c.id)
        for row in session.execute(query):
            if row['imdb_id'] and (not row['title'] or row['title'] == 'None'
                                   or '\n' in row['title']):
                log.info('Fixing movie_queue title for %s' % row['imdb_id'])
                parser = ImdbParser()
                parser.parse(row['imdb_id'])
                if parser.name:
                    session.execute(
                        update(queue_base_table,
                               queue_base_table.c.id == row['id'],
                               {'title': parser.name}))
        ver = 3
    if ver == 3:
        # adding queue_name column to movie_queue table and setting initial value to default)
        table_add_column('movie_queue',
                         'queue_name',
                         Unicode,
                         session,
                         default='default')
        ver = 4
    return ver
Ejemplo n.º 7
0
    def _parse_new_movie(self, imdb_url, session):
        """
        Get Movie object by parsing imdb page and save movie into the database.

        :param imdb_url: IMDB url
        :param session: Session to be used
        :return: Newly added Movie
        """
        parser = ImdbParser()
        parser.parse(imdb_url)
        # store to database
        movie = Movie()
        movie.photo = parser.photo
        movie.title = parser.name
        movie.original_title = parser.original_name
        movie.score = parser.score
        movie.votes = parser.votes
        movie.meta_score = parser.meta_score
        movie.year = parser.year
        movie.mpaa_rating = parser.mpaa_rating
        movie.plot_outline = parser.plot_outline
        movie.url = imdb_url
        for name in parser.genres:
            genre = session.query(Genre).filter(Genre.name == name).first()
            if not genre:
                genre = Genre(name)
            movie.genres.append(genre)  # pylint:disable=E1101
        for index, name in enumerate(parser.languages):
            language = session.query(Language).filter(
                Language.name == name).first()
            if not language:
                language = Language(name)
            movie.languages.append(MovieLanguage(language, prominence=index))
        for imdb_id, name in parser.actors.items():
            actor = session.query(Actor).filter(
                Actor.imdb_id == imdb_id).first()
            if not actor:
                actor = Actor(imdb_id, name)
            movie.actors.append(actor)  # pylint:disable=E1101
        for imdb_id, name in parser.directors.items():
            director = session.query(Director).filter(
                Director.imdb_id == imdb_id).first()
            if not director:
                director = Director(imdb_id, name)
            movie.directors.append(director)  # pylint:disable=E1101
        for imdb_id, name in parser.writers.items():
            writer = session.query(Writer).filter(
                Writer.imdb_id == imdb_id).first()
            if not writer:
                writer = Writer(imdb_id, name)
            movie.writers.append(writer)  # pylint:disable=E1101
            # so that we can track how long since we've updated the info later
        movie.updated = datetime.now()
        session.add(movie)
        return movie
Ejemplo n.º 8
0
 def test_parsed_data(self):
     parser = ImdbParser()
     parser.parse('tt0114814')
     assert parser.actors == {
         'nm0000592': 'Pete Postlethwaite',
         'nm0261452': 'Christine Estabrook',
         'nm0000751': 'Suzy Amis',
         'nm0000286': 'Stephen Baldwin',
         'nm0000445': 'Dan Hedaya',
         'nm0800339': 'Phillipe Simon',
         'nm0002064': 'Giancarlo Esposito',
         'nm0001590': 'Chazz Palminteri',
         'nm0000321': 'Gabriel Byrne',
         'nm0790436': 'Jack Shearer',
         'nm0000228': 'Kevin Spacey',
         'nm0001629': 'Kevin Pollak',
         'nm0107808': 'Carl Bressler',
         'nm0001125': 'Benicio Del Toro',
         'nm0000860': 'Paul Bartel'
     }, 'Actors not parsed correctly'
     assert parser.directors == {
         'nm0001741': 'Bryan Singer'
     }, 'Directors not parsed correctly'
     assert len(set(parser.genres).intersection([u'crime', u'drama', u'mystery', u'thriller'])) == \
            len([u'crime', u'drama', u'mystery', u'thriller']), 'Genres not parsed correctly'
     assert parser.imdb_id == 'tt0114814', 'ID not parsed correctly'
     assert len(
         set(parser.languages).intersection(
             ['english', 'hungarian', 'spanish',
              'french'])) == 4, 'Languages not parsed correctly'
     assert parser.mpaa_rating == 'R', 'Rating not parsed correctly'
     assert parser.name == 'The Usual Suspects', 'Name not parsed correctly'
     assert (
         parser.photo ==
         'http://ia.media-imdb.com/images/M/MV5BMzI1MjI5MDQyOV5BMl5BanBnXkFtZTcwNzE4Mjg3NA@@._V1_UX182_CR0,0,182,268_AL_.jpg'
     ), 'Photo not parsed correctly'
     assert parser.plot_outline == (
         'Following a truck hijack in New York, five conmen are arrested and brought together for questioning. '
         'As none of them are guilty, they plan a revenge operation against the police. The operation goes well, '
         'but then the influence of a legendary mastermind criminal called Keyser S\xf6ze is felt. It becomes '
         'clear that each one of them has wronged S\xf6ze at some point and must pay back now. The payback job '
         'leaves 27 men dead in a boat explosion, but the real question arises now: Who actually is Keyser S\xf6ze?'
     ), 'Plot outline not parsed correctly'
     assert 8.0 < parser.score < 9.0, 'Score not parsed correctly'
     assert parser.url == 'http://www.imdb.com/title/tt0114814/', 'URL not parsed correctly'
     assert 400000 < parser.votes < 1000000, 'Votes not parsed correctly'
     assert parser.year == 1995, 'Year not parsed correctly'