def add_user_recursive(self, user, docs): """ adds a user and all the podcast and episodes it references """ # User docs.add(user._id) # Suggestions suggestions = suggestions_for_user(user) docs.add(suggestions._id) progress(0, len(docs), '', stream=sys.stderr) # Podcast States for p_state in podcast_states_for_user(user): self.add_podcast_state(p_state, docs) progress(0, len(docs), p_state, stream=sys.stderr) # Podcast podcast = podcast_by_id(p_state.podcast) self.add_podcast(podcast, docs) progress(0, len(docs), podcast, stream=sys.stderr) # Episodes for episode in episodes_for_podcast(podcast): self.add_episode(episode, docs) progress(0, len(docs), episode, stream=sys.stderr) e_state = episode_state_for_user_episode(user, episode) self.add_episode_state(e_state, docs) progress(0, len(docs), e_state, stream=sys.stderr)
def update_suggestions(user, max_suggestions=15): """ updates the suggestions of a user """ # get suggestions object suggestion = suggestions_for_user(user) # calculate possible suggestions subscribed_podcasts = list(set(user.get_subscribed_podcasts())) subscribed_podcasts = filter(None, subscribed_podcasts) related = chain.from_iterable([p.related_podcasts for p in subscribed_podcasts]) # filter out blacklisted podcasts related = filter(lambda pid: not pid in suggestion.blacklist, related) # get most relevant counter = Counter(related) get_podcast_id = itemgetter(0) suggested = map(get_podcast_id, counter.most_common(max_suggestions)) suggestion.podcasts = suggested try: # update suggestions object suggestion.save() except ResourceConflict as ex: raise update_suggestions.retry(exc=ex)
def suggestions(request): suggestion_obj = suggestions_for_user(request.user) suggestions = suggestion_obj.get_podcasts() current_site = RequestSite(request) return render(request, 'suggestions.html', { 'entries': suggestions, 'url': current_site })
def suggestions(request, count, format): count = parse_range(count, 1, 100, 100) suggestion_obj = suggestions_for_user(request.user) suggestions = suggestion_obj.get_podcasts(count) title = _('gpodder.net - %(count)d Suggestions') % {'count': len(suggestions)} domain = RequestSite(request).domain p_data = lambda p: podcast_data(p, domain) return format_podcast_list(suggestions, format, title, json_map=p_data, jsonp_padding=request.GET.get('jsonp'))
def rate_suggestions(request): rating_val = int(request.GET.get('rate', None)) suggestion = suggestions_for_user(request.user) suggestion.rate(rating_val, request.user._id) suggestion.save() messages.success(request, _('Thanks for rating!')) return HttpResponseRedirect(reverse('suggestions'))
def blacklist(request, blacklisted_podcast): user = request.user suggestion = suggestions_for_user(user) @repeat_on_conflict(['suggestion']) def _update(suggestion, podcast_id): suggestion.blacklist.append(podcast_id) suggestion.save() _update(suggestion=suggestion, podcast_id=blacklisted_podcast.get_id()) update_suggestions.delay(user) return HttpResponseRedirect(reverse('suggestions'))