Пример #1
0
    def add(cls, **kwargs):
        keys = kwargs.get('keys', [])
        result = []

        groups = cls.group_keys_by_person(keys=keys)
        for group in groups:
            movie_keys = group['movie_keys']
            movies = Movie.add(keys=movie_keys)
            movie_ids = set([m.id for m in movies])

            existed = db.session.query(Watchlist, Watchlist.movie_id).filter(
                Watchlist.user_id == group['user_id'],
                Watchlist.movie_id.in_(movie_ids)).all()

            result.extend([w for w, mid in existed])

            movie_ids = movie_ids.difference(set([mid for w, mid in existed]))

            for movie_id in movie_ids:
                item = Watchlist(user_id=group['user_id'], movie_id=movie_id)
                try:
                    db.session.add(item)
                    db.session.commit()
                except IntegrityError:
                    db.session.rollback()
                else:
                    result.append(item)
        return result
Пример #2
0
    def test_add_single_movie_with_wrong_keys(self):
        key = 'movie:tt0167260_imdb'

        with self.instance.test_request_context() as request:
            result = Movie.add(key=key)

            self.assertEqual(result, [])
            self.assertFalse(self.redis.exists(Movie.added_key))
            self.assertFalse(self.redis.exists(key))
Пример #3
0
    def test_add_already_existed_movie(self):
        provider = 'imdb'

        with self.instance.test_request_context() as request:
            movie = MovieFactory(mid='tt0111161')
            key = Movie.make_key(provider=provider, id=movie.imdb_id)
            self.db.session.commit()
            self.redis.sadd(Movie.added_key, key)

            result = Movie.add(keys=(key, ))

            self.assertEqual(len(result), 1)
            self.assertEqual(result[0], movie)
Пример #4
0
def add_to_watchlist(**kwargs):
    logger = kwargs.get('logger', None)
    keys = kwargs.get('keys', [])
    provider = 'imdb'  # TODO: fix this later
    save_relations = kwargs.get('save_relations', False)

    if logger:
        logger.info('Adding movies to watchlist: start')
    result = Watchlist.add(keys=keys)

    if save_relations:
        if logger:
            logger.info('Adding movies to watchlist: save movies relations')
        movie_ids = [w.movie_id for w in result]

        movies = db.session.query(Movie).filter(Movie.id.in_(movie_ids)).all()
        for movie in movies:
            movie.save_poster(provider=provider, load_original=True)

            missing_movies = movie.save_relations()
            Movie.add(keys=missing_movies)
    if logger:
        logger.info('Adding movies to watchlist: end')
Пример #5
0
    def test_add_single_movie(self):
        key = 'movie:tt0167260:imdb'
        related_key = '%s:related' % key
        genres_key = '%s:genres' % key

        with self.instance.test_request_context() as request:
            result = Movie.add(key=key)

            self.assertEqual(len(result), 1)
            self.assertTrue(isinstance(result[0], Movie))
            self.assertTrue(self.redis.exists(Movie.added_key))
            self.assertTrue(self.redis.sismember(Movie.added_key, key))
            self.assertFalse(self.redis.exists(key))
            self.assertTrue(self.redis.exists(related_key))
            self.assertTrue(self.redis.exists(genres_key))
Пример #6
0
    def test_add_multiple_movies_with_some_wrong_keys(self):
        normal_key = 'movie:tt1229238:imdb'
        keys = ['movie:tt0167260_imdb', 'movie:tt1229238:imdb',
                'imdb:tt1272878:imdb']

        with self.instance.test_request_context() as request:
            result = Movie.add(keys=keys)

            self.assertEqual(len(result), 1)
            self.assertTrue(self.redis.exists(Movie.added_key))
            self.assertTrue(self.redis.sismember(Movie.added_key, normal_key))
            related_key = '%s:related' % normal_key
            genres_key = '%s:genres' % normal_key
            self.assertFalse(self.redis.exists(normal_key))
            self.assertTrue(self.redis.exists(related_key))
            self.assertTrue(self.redis.exists(genres_key))
Пример #7
0
    def test_add_multiple_movies(self):
        keys = ['movie:tt0167260:imdb', 'movie:tt1229238:imdb',
                'movie:tt1272878:imdb']

        with self.instance.test_request_context() as request:
            result = Movie.add(keys=keys)

            self.assertEqual(len(result), len(keys))
            self.assertTrue(self.redis.exists(Movie.added_key))
            for key in keys:
                related_key = '%s:related' % key
                genres_key = '%s:genres' % key
                self.assertTrue(self.redis.sismember(Movie.added_key, key))
                self.assertFalse(self.redis.exists(key))
                self.assertTrue(self.redis.exists(related_key))
                self.assertTrue(self.redis.exists(genres_key))