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 = set(Rating.get_user_ratings(user).keys()) if profile.recommendations_status in (profile.NORMAL_RECOMMENDATIONS, profile.FAST_RECOMMENDATIONS): recommendations = recommendations_engine.compute_guess_score_for_films( 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 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 = set(Rating.get_user_ratings(user).keys()) if profile.recommendations_status in (profile.NORMAL_RECOMMENDATIONS, profile.FAST_RECOMMENDATIONS): recommendations = recommendations_engine.compute_guess_score_for_films(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 recompute_recommendations(user): engine.compute_user_features(user, save=True) key = cache_key("top_film_ids", MAX_RECOMMENDATIONS_NUMBER) film_ids = cache.get(key) if film_ids is None: film_ids = Film.objects.filter(popularity__gte=MIN_POPULARITY) film_ids = film_ids.with_poster().with_description().values_list( 'id', flat=True) film_ids = film_ids.exclude( production_country_list__icontains='Poland').exclude( production_country_list__icontains='Polska') film_ids = film_ids.order_by( '-popularity')[:MAX_RECOMMENDATIONS_NUMBER] film_ids = list(film_ids) cache.set(key, film_ids) recommendations = [ s for s in engine.compute_guess_score_for_films(user, film_ids).items() if s[1] ] recommendations = sorted(recommendations, key=lambda s: -s[1]) return recommendations
def recompute_recommendations(user): engine.compute_user_features(user, save=True) key = cache_key("top_film_ids", MAX_RECOMMENDATIONS_NUMBER) film_ids = cache.get(key) if film_ids is None: film_ids = Film.objects.filter(popularity__gte=MIN_POPULARITY) film_ids = film_ids.with_poster().with_description().values_list('id', flat=True) film_ids = film_ids.exclude(production_country_list__icontains='Poland').exclude(production_country_list__icontains='Polska') film_ids = film_ids.order_by('-popularity')[:MAX_RECOMMENDATIONS_NUMBER] film_ids = list(film_ids) cache.set(key, film_ids) recommendations = [s for s in engine.compute_guess_score_for_films(user, film_ids).items() if s[1]] recommendations = sorted(recommendations, key=lambda s:-s[1]) return recommendations
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)