Fix pagination controls, move mixin to common app, fix pagination invocation on all views, and other random bug fixes
This commit is contained in:
parent
7edefe23c3
commit
6a61b79bbe
425 changed files with 51656 additions and 243 deletions
|
|
@ -1,31 +1,21 @@
|
|||
from django.views.generic import TemplateView, DeleteView, CreateView, ListView, DetailView, UpdateView, FormView
|
||||
from django.views.generic import DeleteView, CreateView, ListView, DetailView, UpdateView
|
||||
from django.views import View
|
||||
from django.urls import reverse_lazy
|
||||
from django.http import HttpResponseRedirect, JsonResponse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.shortcuts import render
|
||||
from django.core.exceptions import PermissionDenied, ValidationError
|
||||
from django.views.generic.edit import FormMixin
|
||||
from django.utils import timezone
|
||||
from django.db.models import Q, Case, When, Value, BooleanField, Prefetch, F
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django.core.paginator import Paginator
|
||||
from django.contrib import messages
|
||||
from django.views.decorators.cache import cache_page
|
||||
from meta.views import Meta
|
||||
from .models import TradeOffer, TradeAcceptance
|
||||
from .forms import (TradeOfferAcceptForm,
|
||||
TradeAcceptanceCreateForm, TradeOfferCreateForm, TradeAcceptanceTransitionForm)
|
||||
from cards.models import Card
|
||||
import imgkit
|
||||
from django.http import HttpResponse, Http404
|
||||
from .forms import (TradeAcceptanceCreateForm, TradeOfferCreateForm, TradeAcceptanceTransitionForm)
|
||||
from django.template.loader import render_to_string
|
||||
from trades.templatetags.trade_offer_tags import render_trade_offer
|
||||
from django.template import RequestContext
|
||||
from playwright.sync_api import sync_playwright
|
||||
from django.conf import settings
|
||||
from .mixins import FriendCodeRequiredMixin
|
||||
from common.mixins import ReusablePaginationMixin
|
||||
|
||||
class TradeOfferCreateView(LoginRequiredMixin, CreateView):
|
||||
http_method_names = ['get'] # restricts this view to GET only
|
||||
|
|
@ -65,47 +55,46 @@ class TradeOfferCreateView(LoginRequiredMixin, CreateView):
|
|||
context["selected_friend_code"] = selected_friend_code
|
||||
return context
|
||||
|
||||
class TradeOfferAllListView(ListView):
|
||||
class TradeOfferAllListView(ReusablePaginationMixin, ListView):
|
||||
model = TradeOffer
|
||||
template_name = "trades/trade_offer_all_list.html"
|
||||
|
||||
#@silk_profile(name="Trade Offer All List- Get Context Data")
|
||||
def get_context_data(self, *, object_list=None, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
request = self.request
|
||||
show_closed = request.GET.get("show_closed", "false").lower() == "true"
|
||||
context["show_closed"] = show_closed
|
||||
|
||||
# Build the queryset with our related objects.
|
||||
queryset = TradeOffer.objects
|
||||
queryset = TradeOffer.objects.all()
|
||||
if show_closed:
|
||||
queryset = queryset.filter(is_closed=True)
|
||||
else:
|
||||
queryset = queryset.filter(is_closed=False)
|
||||
|
||||
# On initial load, use the 'offers_page' parameter.
|
||||
offers_page = request.GET.get("offers_page")
|
||||
offers_paginator = Paginator(queryset, 10)
|
||||
context["all_trade_offers_paginated"] = offers_paginator.get_page(offers_page)
|
||||
page_number = self.get_page_number()
|
||||
self.per_page = 10
|
||||
paginated_offers, pagination_context = self.paginate_data(queryset, page_number)
|
||||
context["offers"] = paginated_offers
|
||||
# Set pagination context using the key expected in the template
|
||||
context["page_obj"] = pagination_context
|
||||
return context
|
||||
|
||||
#@silk_profile(name="Trade Offer All List- Render to Response")
|
||||
def render_to_response(self, context, **response_kwargs):
|
||||
# For AJAX requests, return only the paginated fragment.
|
||||
if self.request.headers.get("X-Requested-With") == "XMLHttpRequest":
|
||||
page = self.request.GET.get("page")
|
||||
show_closed = self.request.GET.get("show_closed", "false").lower() == "true"
|
||||
|
||||
queryset = TradeOffer.objects
|
||||
queryset = TradeOffer.objects.all()
|
||||
if show_closed:
|
||||
queryset = queryset.filter(is_closed=True)
|
||||
else:
|
||||
queryset = queryset.filter(is_closed=False)
|
||||
paginated_offers = Paginator(queryset, 10).get_page(page)
|
||||
|
||||
page_number = self.get_page_number()
|
||||
self.per_page = 10
|
||||
paginated_offers, pagination_context = self.paginate_data(queryset, page_number)
|
||||
return render(
|
||||
self.request,
|
||||
"trades/_trade_offer_list.html",
|
||||
{"offers": paginated_offers}
|
||||
{"offers": paginated_offers, "page_obj": pagination_context}
|
||||
)
|
||||
return super().render_to_response(context, **response_kwargs)
|
||||
|
||||
|
|
@ -445,7 +434,7 @@ class TradeAcceptanceCreateView(LoginRequiredMixin, FriendCodeRequiredMixin, Cre
|
|||
return super().form_invalid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy("trade_offer_detail", kwargs={"pk": self.trade_offer.pk})
|
||||
return reverse_lazy("trade_acceptance_update", kwargs={"pk": self.object.pk})
|
||||
|
||||
class TradeAcceptanceUpdateView(LoginRequiredMixin, FriendCodeRequiredMixin, UpdateView):
|
||||
"""
|
||||
|
|
@ -487,7 +476,7 @@ class TradeAcceptanceUpdateView(LoginRequiredMixin, FriendCodeRequiredMixin, Upd
|
|||
return HttpResponseRedirect(self.get_success_url())
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy("trade_offer_detail", kwargs={"pk": self.object.trade_offer.pk})
|
||||
return reverse_lazy("trade_acceptance_update", kwargs={"pk": self.object.pk})
|
||||
|
||||
class TradeOfferPNGView(View):
|
||||
"""
|
||||
|
|
@ -523,8 +512,6 @@ class TradeOfferPNGView(View):
|
|||
trade_offer.image.open()
|
||||
return HttpResponse(trade_offer.image.read(), content_type="image/png")
|
||||
|
||||
# Generate PNG using Playwright as before.
|
||||
from trades.templatetags import trade_offer_tags
|
||||
tag_context = trade_offer_tags.render_trade_offer_png(
|
||||
{'request': request}, trade_offer, show_friend_code=True
|
||||
)
|
||||
|
|
@ -534,7 +521,6 @@ class TradeOfferPNGView(View):
|
|||
raise ValueError("Could not determine image dimensions from tag_context")
|
||||
html = render_to_string("templatetags/trade_offer_png.html", tag_context)
|
||||
|
||||
from playwright.sync_api import sync_playwright
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch(
|
||||
headless=True,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue