Skip to content

Commit

Permalink
refactor: render_pagination_response function
Browse files Browse the repository at this point in the history
  • Loading branch information
danjac committed Oct 13, 2024
1 parent da62d48 commit 2dabc25
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 120 deletions.
63 changes: 15 additions & 48 deletions radiofeed/episodes/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@
HttpResponseUnauthorized,
require_DELETE,
)
from radiofeed.paginator import paginate, paginate_lazy
from radiofeed.partials import render_partial_for_target
from radiofeed.paginator import render_pagination_response


@require_safe
Expand All @@ -41,18 +40,7 @@ def index(request: HttpRequest) -> TemplateResponse:
.order_by("-pub_date", "-id")
).distinct()

return render_partial_for_target(
request,
TemplateResponse(
request,
"episodes/index.html",
{
"page": paginate(request, episodes),
},
),
target="pagination",
partial="pagination",
)
return render_pagination_response(request, "episodes/index.html", episodes)


@require_safe
Expand All @@ -70,18 +58,7 @@ def search_episodes(
.order_by("-rank", "-pub_date")
)

return render_partial_for_target(
request,
TemplateResponse(
request,
"episodes/search.html",
{
"page": paginate_lazy(request, episodes),
},
),
target="pagination",
partial="pagination",
)
return render_pagination_response(request, "episodes/search.html", episodes)

return HttpResponseRedirect(reverse("episodes:index"))

Expand Down Expand Up @@ -184,18 +161,13 @@ def history(request: HttpRequest) -> TemplateResponse:
else audio_logs.order_by("listened" if ordering_asc else "-listened")
)

return render_partial_for_target(
return render_pagination_response(
request,
TemplateResponse(
request,
"episodes/history.html",
{
"page": paginate(request, audio_logs),
"ordering_asc": ordering_asc,
},
),
target="pagination",
partial="pagination",
"episodes/history.html",
audio_logs,
{
"ordering_asc": ordering_asc,
},
)


Expand Down Expand Up @@ -239,18 +211,13 @@ def bookmarks(request: HttpRequest) -> TemplateResponse:
else bookmarks.order_by("created" if ordering_asc else "-created")
)

return render_partial_for_target(
return render_pagination_response(
request,
TemplateResponse(
request,
"episodes/bookmarks.html",
{
"page": paginate(request, bookmarks),
"ordering_asc": ordering_asc,
},
),
target="pagination",
partial="pagination",
"episodes/history.html",
bookmarks,
{
"ordering_asc": ordering_asc,
},
)


Expand Down
28 changes: 28 additions & 0 deletions radiofeed/paginator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
from django.core.paginator import Page, Paginator
from django.db.models import QuerySet
from django.http import HttpRequest
from django.template.response import TemplateResponse
from django.utils.functional import SimpleLazyObject

from radiofeed.partials import render_partial_for_target

DEFAULT_PAGE_SIZE: Final = 30


Expand All @@ -22,3 +25,28 @@ def paginate(
def paginate_lazy(*args, **kwargs) -> SimpleLazyObject:
"""Returns lazily-evaluated paginated object."""
return SimpleLazyObject(lambda: paginate(*args, **kwargs))


def render_pagination_response( # noqa: PLR0913
request: HttpRequest,
template_name: str,
queryset: QuerySet,
extra_context: dict | None = None,
target: str = "pagination",
partial: str = "pagination",
**pagination_kwargs,
) -> TemplateResponse:
"""Render pagination response."""
return render_partial_for_target(
request,
TemplateResponse(
request,
template_name,
{
"page": paginate_lazy(request, queryset, **pagination_kwargs),
**(extra_context or {}),
},
),
target=target,
partial=partial,
)
91 changes: 19 additions & 72 deletions radiofeed/podcasts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from radiofeed.http import HttpResponseConflict, require_DELETE, require_form_methods
from radiofeed.http_client import get_client
from radiofeed.paginator import DEFAULT_PAGE_SIZE, paginate, paginate_lazy
from radiofeed.paginator import DEFAULT_PAGE_SIZE, render_pagination_response
from radiofeed.partials import render_partial_for_target
from radiofeed.podcasts import itunes
from radiofeed.podcasts.forms import PrivateFeedForm
Expand All @@ -36,38 +36,15 @@ def subscriptions(request: HttpRequest) -> TemplateResponse:
else podcasts.order_by("-pub_date")
)

return render_partial_for_target(
request,
TemplateResponse(
request,
"podcasts/subscriptions.html",
{
"page": paginate(request, podcasts),
},
),
target="pagination",
partial="pagination",
)
return render_pagination_response(request, "podcasts/subscriptions.html", podcasts)


@require_safe
@login_required
def discover(request: HttpRequest) -> TemplateResponse:
"""Shows all promoted podcasts."""
podcasts = _get_podcasts().filter(promoted=True).order_by("-pub_date")

return render_partial_for_target(
request,
TemplateResponse(
request,
"podcasts/discover.html",
{
"page": paginate_lazy(request, podcasts),
},
),
target="pagination",
partial="pagination",
)
return render_pagination_response(request, "podcasts/discover.html", podcasts)


@require_safe
Expand All @@ -89,17 +66,8 @@ def search_podcasts(
)
)

return render_partial_for_target(
request,
TemplateResponse(
request,
"podcasts/search_podcasts.html",
{
"page": paginate(request, podcasts),
},
),
target="pagination",
partial="pagination",
return render_pagination_response(
request, "podcasts/search_podcasts.html", podcasts
)

return HttpResponseRedirect(reverse("podcasts:discover"))
Expand Down Expand Up @@ -176,19 +144,14 @@ def episodes(
else episodes.order_by("pub_date" if ordering_asc else "-pub_date")
)

return render_partial_for_target(
return render_pagination_response(
request,
TemplateResponse(
request,
"podcasts/episodes.html",
{
"podcast": podcast,
"ordering_asc": ordering_asc,
"page": paginate_lazy(request, episodes),
},
),
target="pagination",
partial="pagination",
"podcasts/episodes.html",
episodes,
{
"podcast": podcast,
"ordering_asc": ordering_asc,
},
)


Expand Down Expand Up @@ -271,18 +234,13 @@ def category_detail(
else podcasts.order_by("-pub_date")
)

return render_partial_for_target(
return render_pagination_response(
request,
TemplateResponse(
request,
"podcasts/category_detail.html",
{
"category": category,
"page": paginate_lazy(request, podcasts),
},
),
target="pagination",
partial="pagination",
"podcasts/category_detail.html",
podcasts,
{
"category": category,
},
)


Expand Down Expand Up @@ -330,18 +288,7 @@ def private_feeds(request: HttpRequest) -> TemplateResponse:
else podcasts.order_by("-pub_date")
)

return render_partial_for_target(
request,
TemplateResponse(
request,
"podcasts/private_feeds.html",
{
"page": paginate(request, podcasts),
},
),
target="pagination",
partial="pagination",
)
return render_pagination_response(request, "podcasts/private_feeds.html", podcasts)


@require_form_methods
Expand Down

0 comments on commit 2dabc25

Please sign in to comment.