def create(request, username, format): """ Creates a new podcast list and links to it in the Location header """ title = request.GET.get('title', None) if not title: return HttpResponseBadRequest('Title missing') slug = slugify(title) if not slug: return HttpResponseBadRequest('Invalid title') plist = PodcastList.for_user_slug(request.user._id, slug) if plist: return HttpResponse('List already exists', status=409) urls = parse_subscription(request.raw_post_data, format) podcasts = [Podcast.for_url(url, create=True) for url in urls] podcast_ids = map(Podcast.get_id, podcasts) plist = PodcastList() plist.title = title plist.slug = slug plist.user = request.user._id plist.podcasts = podcast_ids plist.save() response = HttpResponse(status=201) list_url = reverse('api-get-list', args=[request.user.username, slug, format]) response['Location'] = list_url return response
def podcastlist_count(with_rating=True): view = 'podcastlists/by_rating' if with_rating else \ 'podcastlists/by_user_slug' return PodcastList.view(view, limit = 0, stale = 'update_after', ).total_rows
def podcastlists_by_rating(**kwargs): r = PodcastList.view('podcastlists/by_rating', descending = True, include_docs = True, stale = 'update_after', **kwargs ) return list(r)
def create_list(request): title = request.POST.get('title', None) if not title: messages.error(request, _('You have to specify a title.')) return HttpResponseRedirect(reverse('lists-overview')) slug = slugify(title) if not slug: messages.error(request, _('"{title}" is not a valid title').format( title=title)) return HttpResponseRedirect(reverse('lists-overview')) plist = podcastlist_for_user_slug(request.user._id, slug) if plist is None: plist = PodcastList() plist.created_timestamp = get_timestamp(datetime.utcnow()) plist.title = title plist.slug = slug plist.user = request.user._id plist.save() list_url = reverse('list-show', args=[request.user.username, slug]) return HttpResponseRedirect(list_url)
def lists_user(request, username): user = User.get_user(username) if not user: raise Http404 lists = PodcastList.for_user(user._id) return render(request, "lists_user.html", {"lists": lists, "user": user})
def __iter__(self): lists = PodcastList.by_rating(endkey=self.min_list_rating) lists = islice(lists, 0, self.num_lists) lists = map(self._prepare_list, lists) categories = Category.top_categories(self.num_categories) categories = map(self._prepare_category, categories) return chain(lists, categories)
def podcastlists_for_user(user_id): if not user_id: raise QueryParameterMissing('user_id') r = PodcastList.view('podcastlists/by_user_slug', startkey = [user_id, None], endkey = [user_id, {}], include_docs = True, ) return list(r)
def podcast_lists(request, page_size=20): # Make sure page request is an int. If not, deliver first page. try: page = int(request.GET.get("page", "1")) except ValueError: page = 1 lists = PodcastList.by_rating(skip=(page - 1) * page_size, limit=page_size) def _prepare_list(l): user = User.get(l.user) l = proxy_object(l) l.username = user.username return l lists = map(_prepare_list, lists) num_pages = int(ceil(PodcastList.count() / float(page_size))) page_list = utils.get_page_list(1, num_pages, page, 15) return render(request, "podcast_lists.html", {"lists": lists, "page_list": page_list})
def _decorator(request, username, listname, *args, **kwargs): user = User.get_user(username) if not user: raise Http404 if must_own and request.user != user: return HttpResponseForbidden() plist = PodcastList.for_user_slug(user._id, listname) if plist is None: raise Http404 return f(request, plist, user, *args, **kwargs)
def get_lists(request, username): """ Returns a list of all podcast lists by the given user """ user = User.get_user(username) if not user: raise Http404 lists = PodcastList.for_user(user._id) site = RequestSite(request) get_data = partial(_get_list_data, username=user.username, domain=site.domain) lists_data = map(get_data, lists) return JsonResponse(lists_data)
def random_podcastlists(chunk_size=1): while True: rnd = random() res = PodcastList.view('podcastlists/random', startkey = rnd, include_docs = True, limit = chunk_size, stale = 'ok', ) if not res: break for r in res: yield r
def create_list(request): title = request.POST.get("title", None) if not title: messages.error(request, _("You have to specify a title.")) return HttpResponseRedirect(reverse("lists-overview")) slug = slugify(title) if not slug: messages.error(request, _('"{title}" is not a valid title').format(title=title)) return HttpResponseRedirect(reverse("lists-overview")) plist = PodcastList.for_user_slug(request.user._id, slug) if plist is None: plist = PodcastList() plist.title = title plist.slug = slug plist.user = request.user._id plist.save() list_url = reverse("list-show", args=[request.user.username, slug]) return HttpResponseRedirect(list_url)
def lists_own(request): lists = PodcastList.for_user(request.user._id) return render(request, "lists.html", {"lists": lists})