def user_recommendations(user, films, with_rated=False, order_by=None): film_ids = [f.id for f in films] if user and user.is_authenticated(): profile = user.get_profile() basket = BasketItem.user_basket(user) rated_ids = Film._rated_film_ids(user) if profile.recommendations_status in (profile.NORMAL_RECOMMENDATIONS, profile.FAST_RECOMMENDATIONS): recommendations = _user_film_recommendations(user, film_ids) else: recommendations = {} for f in films: r = recommendations.get(f.id) b = basket.get(f.id) f._rated = f.id in rated_ids f._guess_rating = r or 0 f._on_wishlist = b and b[0] and (b[0] != BasketItem.NOT_INTERESTED) or False f._on_shitlist = b and (b[0] == BasketItem.NOT_INTERESTED) or False else: for f in films: f._rated = False f._guess_rating = 0 f._on_wishlist = False f._on_shitlist = False test_with_rated = lambda f: with_rated or not f._rated films = list(f for f in films if not f._on_shitlist and test_with_rated(f)) comparator = create_film_comparator(order_by) return sorted(films, cmp=comparator)
def _get_recommendations(self): self.films = set() film_ids = [] for film_set in self.film_sets: for f in film_set.values(): if not f in self.films and f.has_screenings( self.channel_ids, self.since): self.films.add(f) if f.film_id: film_ids.append(f.film_id) if self.user and self.user.is_authenticated(): profile = self.user.get_profile() basket = BasketItem.user_basket(self.user) rated_ids = Film._rated_film_ids(self.user) if profile.recommendations_status in ( profile.NORMAL_RECOMMENDATIONS, profile.FAST_RECOMMENDATIONS): recommendations = recommendations_engine.compute_guess_score_for_films( self.user, film_ids) else: recommendations = {} for f in self.films: if not f.film_id: continue r = recommendations.get(f.film_id) b = basket.get(f.film_id) f._rated = f.film_id in rated_ids f._guess_rating = r or 0 f._on_wishlist = b and b[0] and ( b[0] != BasketItem.NOT_INTERESTED) or False f._on_shitlist = b and (b[0] == BasketItem.NOT_INTERESTED) or False test_with_rated = lambda f: self.with_rated or not f._rated test_unmatched = lambda f: not self.without_unmatched or f.film_id films = list( f for f in self.films if not f._on_shitlist and test_with_rated(f) and test_unmatched(f)) comparator = create_film_comparator(self.order_by) return sorted(films, cmp=comparator)
def _get_recommendations(self): self.films = set() film_ids = [] for film_set in self.film_sets: for f in film_set.values(): if not f in self.films and f.has_screenings(self.channel_ids, self.since): self.films.add(f) if f.film_id: film_ids.append(f.film_id) if self.user and self.user.is_authenticated(): profile = self.user.get_profile() basket = BasketItem.user_basket(self.user) rated_ids = Film._rated_film_ids(self.user) if profile.recommendations_status in (profile.NORMAL_RECOMMENDATIONS, profile.FAST_RECOMMENDATIONS): recommendations = recommendations_engine.compute_guess_score_for_films(self.user, film_ids) else: recommendations = {} for f in self.films: if not f.film_id: continue r = recommendations.get(f.film_id) b = basket.get(f.film_id) f._rated = f.film_id in rated_ids f._guess_rating = r or 0 f._on_wishlist = b and b[0] and (b[0] != BasketItem.NOT_INTERESTED) or False f._on_shitlist = b and (b[0] == BasketItem.NOT_INTERESTED) or False test_with_rated = lambda f: self.with_rated or not f._rated test_unmatched = lambda f: not self.without_unmatched or f.film_id films = list(f for f in self.films if not f._on_shitlist and test_with_rated(f) and test_unmatched(f)) comparator = create_film_comparator(self.order_by) return sorted(films, cmp=comparator)