Source code for src.recommender.engines.generic

from .engine import QueryBasedEngine
from sqlalchemy.sql.expression import func
from src.data_interface import model
from config import MAX_RECOMMENDATIONS


[docs]class UserHistory(QueryBasedEngine): def __init__(self): super(UserHistory, self).__init__()
[docs] def compute_query(self, context): if context.history: recommendations = model.Movie.query\ .filter(model.Movie.id.in_(context.history)) \ .limit(MAX_RECOMMENDATIONS) \ .all() else: recommendations = [] return recommendations
[docs]class TopRated(QueryBasedEngine): def __init__(self): super(TopRated, self).__init__()
[docs] def compute_query(self, context): recommendations = model.Movie.query if context.user and context.user.favorite_genres: query_filter = model.Movie.genres\ .contains(context.user.favorite_genres) recommendations = recommendations.filter(query_filter) recommendations = recommendations \ .order_by(model.Movie.rating.desc().nullslast()) \ .limit(MAX_RECOMMENDATIONS)\ .all() return recommendations
[docs]class MostRecent(QueryBasedEngine): def __init__(self): super(MostRecent, self).__init__()
[docs] def compute_query(self, context): recommendations = model.Movie.query if context.user and context.user.favorite_genres: query_filter = model.Movie.genres\ .contains(context.user.favorite_genres) recommendations = recommendations.filter(query_filter) recommendations = recommendations\ .order_by(model.Movie.year.desc().nullslast())\ .limit(MAX_RECOMMENDATIONS)\ .all() return recommendations
[docs]class Random(QueryBasedEngine): def __init__(self): super(Random, self).__init__()
[docs] def compute_query(self, context): recommendations = model.Movie.query recommendations = recommendations\ .order_by(func.random())\ .limit(MAX_RECOMMENDATIONS)\ .all() return recommendations