Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
def podcastlists_by_rating(**kwargs):
    r = PodcastList.view('podcastlists/by_rating',
            descending   = True,
            include_docs = True,
            stale        = 'update_after',
            **kwargs
        )
    return list(r)
Exemple #4
0
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)
Exemple #5
0
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})
Exemple #6
0
    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)
Exemple #7
0
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)
Exemple #8
0
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})
Exemple #9
0
        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)
Exemple #10
0
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)
Exemple #11
0
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
Exemple #12
0
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)
Exemple #13
0
def lists_own(request):

    lists = PodcastList.for_user(request.user._id)

    return render(request, "lists.html", {"lists": lists})