예제 #1
0
파일: movie.py 프로젝트: manlan2/filmaster
def film_similar_ratings(request, film=None):
    user = request.user
    film = film or get_object_or_404(Film, id=request.GET.get('film_id'))
    ratings = ()
    if user.is_authenticated():
        key = cache.Key("film_similar_ratings", film, user)
        ratings = cache.get(key)
        if ratings is None:
            N_SIMILAR = 100
            N = 5
            query = User.objs.similar(user)[:N_SIMILAR]
            similar_users = cache_query(query, "similar_users", user)
            if similar_users:
                d = dict((u.id, u) for u in similar_users)
                ratings = Rating.objects.select_related()
                ratings = list(ratings.film(film).filter(user__in=d.keys()))
                ratings = sorted(ratings, key=lambda r: d[r.user_id].score)[:N]
                logger.debug("%d of %d similar friends rated this film",
                             len(ratings), N_SIMILAR)
                if len(ratings) < N:
                    logger.debug("not enough results, executing full query")
                    ratings = Rating.objects.select_related()
                    ratings = ratings.film(film).similar_ratings(user)[0:N]
                    logger.debug("similar ratings fetched")
            cache.set(key, ratings)
    link = film.get_absolute_url()
    link = str(link) + '?u=similar'
    return {
        'film': film,
        'title': _("Similar users ratings"),
        'link': link,
        'ratings': ratings,
        'friends': False
    }
예제 #2
0
파일: movie.py 프로젝트: manlan2/filmaster
def film_actors(context, film, n=5):
    actors = cache_query(film.get_actors(), 'film_actors', film)
    return {
        'film': film,
        'perms': context.get('perms'),
        'actors': actors,
    }
예제 #3
0
파일: movie.py 프로젝트: thuvh/filmmaster
def film_actors(context, film, n=5):
    actors = cache_query(film.get_actors(), 'film_actors', film)
    return {
        'film':film,
        'perms':context.get('perms'),
        'actors':actors,
    }
예제 #4
0
파일: movie.py 프로젝트: thuvh/filmmaster
def film_featured_posts(context, film):
    activities = UserActivity.objects.public().filter(film=film.id, activity_type=UserActivity.TYPE_POST, featured=True)[0:2]
    activities = cache_query(activities, "film_featured_posts", film)
    return {
        'film':film,
        'activities':activities,
    }
예제 #5
0
파일: movie.py 프로젝트: thuvh/filmmaster
def film_similar_ratings(request, film=None):
    user = request.user
    film = film or get_object_or_404(Film, id=request.GET.get('film_id'))
    ratings = ()
    if user.is_authenticated():
        key = cache.Key("film_similar_ratings", film, user)
        ratings = cache.get(key)
        if ratings is None:
            N_SIMILAR = 100
            N = 5
            query = User.objs.similar(user)[:N_SIMILAR]
            similar_users = cache_query(query, "similar_users", user)
            if similar_users:
                d = dict((u.id, u) for u in similar_users)
                ratings = Rating.objects.select_related()
                ratings = list(ratings.film(film).filter(user__in=d.keys()))
                ratings = sorted(ratings, key=lambda r:d[r.user_id].score)[:N]
                logger.debug("%d of %d similar friends rated this film", len(ratings), N_SIMILAR)
                if len(ratings)<N:
                    logger.debug("not enough results, executing full query")
                    ratings = Rating.objects.select_related()
                    ratings = ratings.film(film).similar_ratings(user)[0:N]
                    logger.debug("similar ratings fetched")
            cache.set(key, ratings)
    return {
        'film':film,
        'title':_("Similar users ratings"),
        'ratings':ratings,
        'friends': False
    }
예제 #6
0
파일: movie.py 프로젝트: manlan2/filmaster
def film_featured_posts(context, film):
    activities = UserActivity.objects.public().filter(
        film=film.id, activity_type=UserActivity.TYPE_POST, featured=True)[0:2]
    activities = cache_query(activities, "film_featured_posts", film)
    return {
        'film': film,
        'activities': activities,
    }
예제 #7
0
파일: movie.py 프로젝트: manlan2/filmaster
def film_related(context, film):
    NUMBER_RELATED = getattr(settings, 'NUMBER_OF_FILMS_RELATED', 6)
    related = cache_query(film.get_related_films()[:NUMBER_RELATED],
                          "film_related_films", film)
    return {
        'film': film,
        'perms': context.get('perms'),
        'related': related,
    }
예제 #8
0
파일: movie.py 프로젝트: thuvh/filmmaster
def film_related(context, film):
    NUMBER_RELATED = getattr(settings, 'NUMBER_OF_FILMS_RELATED', 6)
    related = cache_query(film.get_related_films()[:NUMBER_RELATED],
            "film_related_films", film)
    return {
        'film':film,
        'perms':context.get('perms'),
        'related':related,
    }
예제 #9
0
파일: movie.py 프로젝트: thuvh/filmmaster
def film_friends_ratings(request, film=None):
    user = request.user
    film = film or get_object_or_404(Film, id=request.GET.get('film_id'))
    if user.is_authenticated():
        ratings = cache_query(film.get_friends_ratings(user), "film_friends_ratings", film, user)
    else:
        ratings = ()
    return {
        'film':film,
        'title':_("Friends ratings"),
        'ratings':ratings,
        'friends': True
    }
예제 #10
0
def film_friends_ratings(request, film=None):
    user = request.user
    film = film or get_object_or_404(Film, id=request.GET.get('film_id'))
    if user.is_authenticated():
        ratings = cache_query(film.get_friends_ratings(user), "film_friends_ratings", film, user)
    else:
        ratings = ()
    link = film.get_absolute_url()
    link = str(link) + '?u=friends'
    return {
        'film':film,
        'title':_("Friends ratings"),
        'link':link,
        'ratings':ratings,
        'friends': True,
        'user_rated': film.is_rated_by_user( user )
    }
예제 #11
0
파일: movie.py 프로젝트: manlan2/filmaster
def film_friends_ratings(request, film=None):
    user = request.user
    film = film or get_object_or_404(Film, id=request.GET.get('film_id'))
    if user.is_authenticated():
        ratings = cache_query(film.get_friends_ratings(user),
                              "film_friends_ratings", film, user)
    else:
        ratings = ()
    link = film.get_absolute_url()
    link = str(link) + '?u=friends'
    return {
        'film': film,
        'title': _("Friends ratings"),
        'link': link,
        'ratings': ratings,
        'friends': True,
        'user_rated': film.is_rated_by_user(user)
    }