def get_recommended_for_single_category(request, *args, **kwargs): category_id = request.GET.get('category_id') response = [] if category_id: category = Category.objects.get(pk=category_id) member = request.user cache_key = member.email + ':recommended-' + category_id recommended = cache.get(cache_key) if not recommended: exclude_list_keys = cache.get(member.email + ':' + EXCLUDE_LIST_KEYS_KEY) exclude_list = [] if not exclude_list_keys: exclude_list_keys = set() else: for key in exclude_list_keys: items = cache.get(key) if items: exclude_list.extend(items) recommended = get_recommended_for_category(category, category.previews_length, exclude_list) exclude_list_keys.add(cache_key) cache.set(cache_key, recommended) cache.set(member.email + ':' + EXCLUDE_LIST_KEYS_KEY, exclude_list_keys) response = [item.to_dict() for item in recommended] return HttpResponse( json.dumps(response), 'content-type: text/json' )
def test_get_recommended_for_category(self): category_id = '56eb6d04b37b3379b531e092' category_western = Category.objects.get(pk=category_id) for movie in Movie.objects.all(): movie.categories.append(category_western) movie.save() for series in Series.objects.all(): series.categories.append(category_western) series.save() items_to_exclude = [ Movie.objects.get(pk=pk) for pk in ('56eb6d04b37b3379b531e085', '56eb6d04b37b3379b531e086') ] media = get_recommended_for_category(category_western, 5, items_to_exclude) expected_media = [ Movie.objects.get(pk=pk) for pk in ('56eb6d04b37b3379b531e084', '56eb6d04b37b3379b531e083', '56eb6d04b37b3379b531e082') ] expected_media.extend([ Series.objects.get(pk=pk) for pk in ('56eb6d04b37b3379b531e074', '56eb6d04b37b3379b531e073') ]) for item in media: self.assertIn(item, expected_media)
def test_get_recommended_for_category(self): category_id = '56eb6d04b37b3379b531e092' category_western = Category.objects.get(pk=category_id) for movie in Movie.objects.all(): movie.categories.append(category_western) movie.save() for series in Series.objects.all(): series.categories.append(category_western) series.save() items_to_exclude = [Movie.objects.get(pk=pk) for pk in ('56eb6d04b37b3379b531e085', '56eb6d04b37b3379b531e086')] media = get_recommended_for_category(category_western, 5, items_to_exclude) expected_media = [Movie.objects.get(pk=pk) for pk in ('56eb6d04b37b3379b531e084', '56eb6d04b37b3379b531e083', '56eb6d04b37b3379b531e082')] expected_media.extend([Series.objects.get(pk=pk) for pk in ('56eb6d04b37b3379b531e074', '56eb6d04b37b3379b531e073')]) for item in media: self.assertIn(item, expected_media)