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)
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)
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)))
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)
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)
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')
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)
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)
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)
def test_make_key(self): key = Movie.make_key(id='tt12345678', provider='imdb') self.assertEqual(key, 'movie:tt12345678:imdb')