def get_media(request, *args, **kwargs): """ :param request: :return: list of media (movies and/or series) """ category_id = request.GET.get('category_id') if request.GET.get('category_id') else None start_movies = request.GET.get('start_movies') if request.GET.get('start_movies') else '' start_series = request.GET.get('start_series') if request.GET.get('start_series') else '' length = int(request.GET.get('length')) if request.GET.get('length') else None category = Category.objects.get(pk=category_id) if not length: length = category.previews_length response = [] if category_id and length and (start_movies != '' or start_series != ''): start_movies = int(start_movies) start_series = int(start_series) cache_key = '%s-%d-%d-%d' % (category_id, start_movies, start_series, length) media = cache.get(cache_key) if not media: movies_length, series_length = get_movies_series_share(length) limit_movies = start_movies + movies_length limit_series = start_series + series_length media = list(Movie.objects.raw_query({'categories': {'$elemMatch': {'id': ObjectId(category.id)}}, 'visible': True}).order_by('-id')[start_movies:limit_movies]) series = list(Series.objects.raw_query({'categories': {'$elemMatch': {'id': ObjectId(category.id)}}, 'visible': True}).order_by('-id')[start_series:limit_series]) media.extend(series) cache.set(cache_key, media, 8 * 3600) if request.GET.get('shuffle'): shuffle(media) response = [item.to_dict() for item in media] return HttpResponse( json.dumps(response), 'content-type: text/json' )
def grab_items_by_radix(self, terms, use_limit=False): total = 10 if use_limit else 10000 if use_limit: limit_movies, limit_series = get_movies_series_share(total) else: limit_movies, limit_series = 10000, 10000 items = [] if terms and len(terms) >= 2: stripped_terms = ' '.join([term.strip()[:4] for term in terms.split(' ') if term]) if limit_movies > 0: movies = [movie for movie in Movie.objects.raw_query( {'$text': {'$search': stripped_terms}, 'visible': True} )[:limit_movies]] items.extend(movies) if limit_series: series = [series for series in Series.objects.raw_query( {'$text': {'$search': stripped_terms}, 'visible': True} )[:limit_series]] items.extend(series) if getattr(settings, 'DEBUG'): show_adult = self.request.user.is_authenticated() and self.request.user.profile.get_can_access_adult_content() else: show_adult = self.request.user.is_authenticated() and self.request.user.can_access_adult_content for item in items: if type(item).__name__ == "Movie" and item.is_adult: if not show_adult: items.remove(item) return items