Пример #1
0
    def test_save_movie_relations_without_missing(self):
        provider = 'imdb'
        movie_id = 'tt0111161'

        with self.instance.test_request_context() as request:
            movie = MovieFactory(mid=movie_id)
            genres = ['drama', 'comedy', 'thriller']
            key = Movie.make_key(provider=provider, id=movie.imdb_id)
            related_key = '%s:related' % key
            genres_key = '%s:genres' % key
            self.db.session.commit()
            self.redis.sadd(Movie.added_key, key)

            for i in xrange(10):
                mid = 'tt%s' % int(random.random() * 1000000)
                movie_key = Movie.make_key(provider=provider, id=mid)
                m = MovieFactory(mid=mid)
                self.redis.sadd(related_key, movie_key)
            self.db.session.commit()

            for genre in genres:
                g = GenreFactory(title=genre)
                self.redis.sadd(genres_key, genre)
            self.db.session.commit()

            missing = save_relations(key=key, model=Movie)

            movie = self.db.session.query(Movie).filter(
                Movie.imdb_id == movie_id).one()

            self.assertEqual(len(missing), 0)
            self.assertFalse(self.redis.exists(related_key))
            self.assertFalse(self.redis.exists(genres_key))
            self.assertEqual(len(movie.related_movies), 10)
            self.assertEqual(len(movie.genres), 3)
Пример #2
0
    def test_save_movie_relations_with_partially_missing(self):
        provider = 'imdb'

        with self.instance.test_request_context() as request:
            movie = MovieFactory(mid='tt0111161')
            genres = ['drama', 'comedy', 'thriller']
            key = Movie.make_key(provider=provider, id=movie.imdb_id)
            related_key = '%s:related' % key
            genres_key = '%s:genres' % key
            self.db.session.commit()

            for i in xrange(10):
                movie_id = 'tt%s' % int(random.random() * 1000000)
                movie_key = Movie.make_key(provider=provider, id=movie_id)

                self.redis.sadd(related_key, movie_key)
                if i % 2:
                    MovieFactory(mid=movie_id)
            self.db.session.commit()

            for genre in genres:
                g = GenreFactory(title=genre)
                self.redis.sadd(genres_key, genre)
            self.db.session.commit()

            missing = movie.save_relations()

            self.assertEqual(len(missing), 5)
            self.assertTrue(self.redis.exists(related_key))
            self.assertEqual(len(self.redis.smembers(related_key)), 5)
            self.assertFalse(self.redis.exists(genres_key))
            self.assertEqual(len(movie.related_movies), 5)
            self.assertEqual(len(movie.genres), 3)
Пример #3
0
    def test_make_key(self):
        provider = 'imdb'
        with self.instance.test_request_context() as request:
            u = UserFactory(login='******', email='*****@*****.**')
            m = MovieFactory()
            self.db.session.commit()

            mid = getattr(m, '%s_id' % provider)
            movie_key = Movie.make_key(provider=provider, id=mid)

            key = Watchlist.make_key(user_id=u.id, movie_key=movie_key)
            self.assertEqual(key, ':'.join(('watchlist', str(u.id), movie_key)))
Пример #4
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)
Пример #5
0
    def test_add_single_key_with_existed_movie(self):
        provider = 'imdb'
        with self.instance.test_request_context() as request:
            u = UserFactory()
            m = MovieFactory()
            self.db.session.commit()

            mid = getattr(m, '%s_id' % provider)
            movie_key = Movie.make_key(provider=provider, id=mid)

            key = Watchlist.make_key(user_id=u.id, movie_key=movie_key)

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

            self.assertEqual(len(result), 1)
            self.assertTrue(isinstance(result[0], Watchlist))
            self.assertEqual(result[0].status, Watchlist.PENDING_MOVIE)
Пример #6
0
def fill_queue_from_csv(logger, **kwargs):
    user_id = str(kwargs.get('user_id'))
    provider = kwargs.get('provider')

    logger.info('Filling watchlist queue: start')
    path = os.path.join(instance.config.get('MEDIA_ROOT'), 'watchlists',
                        user_id, '%s_watchlist.csv' % provider)
    if os.path.exists(path):
        with open(path, 'rb') as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                if not str(row[1]).startswith('tt'):
                    continue
                key = Watchlist.make_key(
                    user_id, Movie.make_key(provider=provider, id=row[1]))
                redis.lpush(Watchlist.watchlist_key, key)
        logger.info('Filling watchlist queue: end')
    else:
        logger.info('Filling watchlist queue: watchlist file does not exists')
Пример #7
0
    def test_add_already_existed_key(self):
        provider = 'imdb'
        with self.instance.test_request_context() as request:
            u = UserFactory()
            m = MovieFactory()
            self.db.session.commit()

            mid = getattr(m, '%s_id' % provider)
            movie_key = Movie.make_key(provider=provider, id=mid)

            w = Watchlist(user_id=u.id, movie_id=m.id)
            self.db.session.add(w)
            self.db.session.commit()

            key = Watchlist.make_key(user_id=u.id, movie_key=movie_key)

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

            self.assertEqual(len(result), 1)
            self.assertEqual(result[0].id, w.id)
Пример #8
0
    def test_add_already_existed_key(self):
        provider = 'imdb'
        with self.instance.test_request_context() as request:
            u = UserFactory()
            m = MovieFactory()
            self.db.session.commit()

            user_id = u.id

            mid = getattr(m, '%s_id' % provider)
            movie_key = Movie.make_key(provider=provider, id=mid)

            w = Watchlist(user_id=u.id, movie_id=m.id)
            self.db.session.add(w)
            self.db.session.commit()

            key = Watchlist.make_key(user_id=u.id, movie_key=movie_key)

            add_to_watchlist(keys=(key,))

            watchlist = self.db.session.query(Watchlist).filter(Watchlist.user_id == user_id).all()
            self.assertEqual(len(watchlist), 1)
Пример #9
0
    def test_parse_key(self):
        provider = 'imdb'
        with self.instance.test_request_context() as request:
            u = UserFactory(login='******', email='*****@*****.**')
            m = MovieFactory()
            self.db.session.commit()

            mid = getattr(m, '%s_id' % provider)
            movie_key = Movie.make_key(provider=provider, id=mid)

            key = 'watchlist:1:%s' % movie_key
            result = Watchlist.parse_key(key)

            self.assertEqual(len(result), 2)
            self.assertEqual(result[0], u.id)
            self.assertEqual(result[1], movie_key)

            key = 'watchlist_1_%s' % movie_key
            result = Watchlist.parse_key(key)

            self.assertEqual(len(result), 2)
            self.assertEqual(result[0], None)
            self.assertEqual(result[1], None)
Пример #10
0
 def test_make_key(self):
     key = Movie.make_key(id='tt12345678', provider='imdb')
     self.assertEqual(key, 'movie:tt12345678:imdb')