def recent_reviews(self): recent_reviews = cache.get_cache(CACHE_ACTIVITIES, KEY_RECENT) if not recent_reviews: recent_reviews = Post.objects.select_related('parent', 'user').filter(featured_note=False, is_published=True, status=Post.PUBLIC_STATUS)\ .exclude(featured_note=True).order_by("-publish")[:settings.NUMBER_OF_REVIEWS_FRONT_PAGE] cache.set_cache(CACHE_ACTIVITIES, KEY_RECENT, recent_reviews) return recent_reviews
def featured_review(self): featured_review = cache.get_cache(CACHE_ACTIVITIES, KEY_FEATURED) if not featured_review: featured_reviews = Post.objects.select_related('parent', 'user').filter(featured_note=True, is_published=False, status=Post.PUBLIC_STATUS)\ .exclude(is_published=True).order_by("-publish")[:1] if len(featured_reviews)!=0: featured_review = featured_reviews[0] cache.set_cache(CACHE_ACTIVITIES, KEY_FEATURED, featured_review) return featured_review
def featured_review(self): featured_review = cache.get_cache(CACHE_ACTIVITIES, KEY_FEATURED) if not featured_review: featured_reviews = Post.objects.select_related('parent', 'user').filter(featured_note=True, is_published=False, status=Post.PUBLIC_STATUS)\ .exclude(is_published=True).order_by("-publish")[:1] if len(featured_reviews) != 0: featured_review = featured_reviews[0] cache.set_cache(CACHE_ACTIVITIES, KEY_FEATURED, featured_review) return featured_review
def get_recent_reviews(self): recent_reviews = Post.objects.recent_reviews() films = cache.get_cache(CACHE_ACTIVITIES, recent_reviews) if not films: films = [] for review in recent_reviews: film = review.get_main_related_film() films.append(film) cache.set_cache(CACHE_ACTIVITIES, recent_reviews, films) return recent_reviews, films
def get_featured_review(self): featured_review = Post.objects.featured_review() film = cache.get_cache(CACHE_ACTIVITIES, featured_review) if not film: try: film = featured_review.get_main_related_film() cache.set_cache(CACHE_ACTIVITIES, featured_review, film) except: film = [] return featured_review, film
def get_votes_for_character_in_game(self, the_game, the_character): """ Retrieves a list of votes for the given character in the given game. Gets it from cache if present (cache is cleared when voting) """ result = get_cache(CACHE_VOTES_FOR_CHARACTER_IN_GAME, "%s_%s" % (the_game.id, the_character.id)) if result != None: return result game_votes = GameVote.objects.filter(game=the_game, character=the_character) set_cache(CACHE_VOTES_FOR_CHARACTER_IN_GAME, "%s_%s" % (the_game.id, the_character.id), game_votes) return game_votes
def get_votes_for_character_in_game(self, the_game, the_character): """ Retrieves a list of votes for the given character in the given game. Gets it from cache if present (cache is cleared when voting) """ result = get_cache(CACHE_VOTES_FOR_CHARACTER_IN_GAME, "%s_%s" % (the_game.id, the_character.id)) if result != None: return result game_votes = GameVote.objects.filter( game=the_game, character=the_character, ) set_cache(CACHE_VOTES_FOR_CHARACTER_IN_GAME, "%s_%s" % (the_game.id, the_character.id), game_votes) return game_votes
def get_item_for_film(self, the_film): """ Returns the shop item for given film or None if not set """ the_item = get_cache(CACHE_SHOP_ITEM_FOR_FILM, the_film.id) if the_item is not None: logger.debug("got shop item from cache!") return the_item try: the_item = Item.objects.get(film=the_film) except Item.DoesNotExist: # everything is fine the_item = None # cache only if set if the_item is not None: set_cache(CACHE_SHOP_ITEM_FOR_FILM, the_item.film.id, the_item) return the_item
def get_item_for_film(self, the_film): """ Returns the shop item for given film or None if not set """ the_item = get_cache(CACHE_SHOP_ITEM_FOR_FILM, the_film.id) if the_item is not None: logger.debug("got shop item from cache!") return the_item try: the_item = Item.objects.get( film=the_film ) except Item.DoesNotExist: # everything is fine the_item = None # cache only if set if the_item is not None: set_cache(CACHE_SHOP_ITEM_FOR_FILM, the_item.film.id, the_item) return the_item
def show_movies_slider_widget(limit=settings.NUMBER_OF_MOVIES_FOR_WIDGET): CACHE_RANDOM_FILMS = 'random_films_for_tag' CACHE_FILMS_FOR_TAG = 'films_for_tag' CACHE_LINKS_FOR_GENRE = 'links_for_genre' tags = Film.get_top_tags() key = 'tag' key += "_".join(str(tag.id) for tag in tags) films_for_tags = cache.get_cache(CACHE_FILMS_FOR_TAG, key) films_list = cache.get_cache(CACHE_RANDOM_FILMS, films_for_tags) if not films_list: films_list = [] if not films_for_tags: films_for_tags = [] for tag in tags: rh = RecomHelper() films = rh.get_films_for_tag(str(tag), order_by="-popularity") films = films.filter(image__isnull=False) films_for_tags.append(films[:100]) cache.set_cache(CACHE_FILMS_FOR_TAG, key, films_for_tags) for films in films_for_tags: films = list(films) random.shuffle(films) films = films[:limit] films_list += films cache.set_cache(CACHE_RANDOM_FILMS, films_for_tags, films_list, CACHE_HOUR) links_list = cache.get_cache(CACHE_LINKS_FOR_GENRE, key) if not links_list: links_list = [] for tag in tags: links = reverse('movies_menu', args=(tag.name, )) links_list.append(links) cache.set_cache(CACHE_LINKS_FOR_GENRE, key, links_list) return {'films': films_list, 'tags': tags, 'links': links_list}
def show_movies_slider_widget(limit=settings.NUMBER_OF_MOVIES_FOR_WIDGET): CACHE_RANDOM_FILMS = 'random_films_for_tag' CACHE_FILMS_FOR_TAG = 'films_for_tag' CACHE_LINKS_FOR_GENRE = 'links_for_genre' tags = Film.get_top_tags() key = 'tag' key += "_".join(str(tag.id) for tag in tags) films_for_tags = cache.get_cache(CACHE_FILMS_FOR_TAG, key) films_list = cache.get_cache(CACHE_RANDOM_FILMS, films_for_tags) if not films_list: films_list = [] if not films_for_tags: films_for_tags = [] for tag in tags: rh = RecomHelper() films = rh.get_films_for_tag(str(tag), order_by="-popularity") films = films.filter(image__isnull = False) films_for_tags.append(films[:100]) cache.set_cache(CACHE_FILMS_FOR_TAG, key, films_for_tags) for films in films_for_tags: films = list(films) random.shuffle(films) films = films[:limit] films_list += films cache.set_cache(CACHE_RANDOM_FILMS, films_for_tags, films_list, CACHE_HOUR) links_list = cache.get_cache(CACHE_LINKS_FOR_GENRE, key) if not links_list: links_list = [] for tag in tags: links = reverse('movies_menu', args=(tag.name,)) links_list.append(links) cache.set_cache(CACHE_LINKS_FOR_GENRE, key, links_list) return {'films':films_list, 'tags': tags, 'links': links_list}
def short_reviews(context, limit=10, param=None, argument=None): """ Configurable widget displaying short reviews Takes te following arguments: - list of films (can be none), param is "films" and argument is a list of film objects - film genre (can be none), param is genre and argument is a string with film genre - if both are none it displays recent last month hand-selected reviews """ request = context['request'] key = "short_reviews" key_params = "short_reviews_params" key_films = "films_for_tag" if param == "films": if argument: key += "_".join(film.permalink for film in argument if film and film.pk) films = cache.get_cache(CACHE_ACTIVITIES, key_films) if param == 'genre': if not films: rh = RecomHelper() films = rh.get_films_for_tag(argument, limit=500, order_by="-popularity") key_films += "_".join(film.permalink for film in films if film and film.pk) cache.set_cache(CACHE_ACTIVITIES, key_films, films) # -- check if path contains tags -- request_tags = request.GET.get("tags", "") request_path = request.META.get("PATH_INFO", "") if urls['TAG'] in request_path.lower(): request_path = request_path.strip(urls['TAG']) else: request_path = "" if param == "genre": if request_tags: argument = request_tags if request_path: argument = request_path key += "_%s" % argument query = cache.get_cache(CACHE_ACTIVITIES, key) params = cache.get_cache(CACHE_ACTIVITIES, query) if not query: params = True if param == "films": query = UserActivity.objects.select_related( 'user', 'film', 'short_review').filter( activity_type=UserActivity.TYPE_SHORT_REVIEW, film__in=argument, #featured = True, ).order_by("-created_at")[:limit] if param == "genre": query = UserActivity.objects.select_related( 'user', 'film', 'short_review').filter( activity_type=UserActivity.TYPE_SHORT_REVIEW, film__in=films, #featured = True, ).order_by("-created_at")[:limit] if not query: params = False query = UserActivity.objects.select_related( 'user', 'film', 'short_review').filter( activity_type=UserActivity.TYPE_SHORT_REVIEW, #featured = True, ).order_by("-created_at")[:limit] query = list(query) random.shuffle(query) cache.set_cache(CACHE_ACTIVITIES, key, query, CACHE_HOUR * 3) cache.set_cache(CACHE_ACTIVITIES, query, params, CACHE_HOUR * 3) return {'activities': query, 'params': params}
def short_reviews(context, limit=10, param=None, argument=None): """ Configurable widget displaying short reviews Takes te following arguments: - list of films (can be none), param is "films" and argument is a list of film objects - film genre (can be none), param is genre and argument is a string with film genre - if both are none it displays recent last month hand-selected reviews """ request = context['request'] key = "short_reviews" key_params = "short_reviews_params" key_films = "films_for_tag" if param == "films": if argument: key += "_".join(film.permalink for film in argument if film and film.pk) films = cache.get_cache(CACHE_ACTIVITIES, key_films) if param == 'genre': if not films: rh = RecomHelper() films = rh.get_films_for_tag(argument, limit=500, order_by="-popularity") key_films += "_".join(film.permalink for film in films if film and film.pk) cache.set_cache(CACHE_ACTIVITIES, key_films, films) # -- check if path contains tags -- request_tags = request.GET.get("tags", "") request_path = request.META.get("PATH_INFO", "") if urls['TAG'] in request_path.lower(): request_path = request_path.strip(urls['TAG']) else: request_path = "" if param == "genre": if request_tags: argument = request_tags if request_path: argument = request_path key += "_%s" % argument query = cache.get_cache(CACHE_ACTIVITIES, key) params = cache.get_cache(CACHE_ACTIVITIES, query) if not query: params = True if param == "films": query = UserActivity.objects.select_related('user', 'film', 'short_review').filter( activity_type = UserActivity.TYPE_SHORT_REVIEW, film__in = argument, #featured = True, ).order_by("-created_at")[:limit] if param == "genre": query = UserActivity.objects.select_related('user', 'film', 'short_review').filter( activity_type = UserActivity.TYPE_SHORT_REVIEW, film__in = films, #featured = True, ).order_by("-created_at")[:limit] if not query: params = False query = UserActivity.objects.select_related('user', 'film', 'short_review').filter( activity_type = UserActivity.TYPE_SHORT_REVIEW, #featured = True, ).order_by("-created_at")[:limit] query = list(query) random.shuffle(query) cache.set_cache(CACHE_ACTIVITIES, key, query, CACHE_HOUR * 3) cache.set_cache(CACHE_ACTIVITIES, query, params, CACHE_HOUR * 3) return {'activities': query, 'params': params}