Move from HTML templates to pure Python

Remove cruft
This commit is contained in:
2026-06-06 07:11:46 +02:00
parent 09db54e940
commit d101aecd70
109 changed files with 2903 additions and 2949 deletions
+117 -44
View File
@@ -1,57 +1,130 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.http import HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.safestring import SafeText
from common.components import (
A,
AddForm,
Button,
Component,
CsrfInput,
Div,
paginated_table_content,
)
from common.layout import render_page
from common.time import dateformat, local_strftime
from games.forms import GameStatusChangeForm
from games.models import GameStatusChange
class EditStatusChangeView(LoginRequiredMixin, UpdateView):
model = GameStatusChange
form_class = GameStatusChangeForm
template_name = "add.html"
context_object_name = "form"
def get_object(self, queryset=None):
return get_object_or_404(GameStatusChange, id=self.kwargs["statuschange_id"])
def get_success_url(self):
return reverse_lazy("games:list_platforms")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Edit Platform"
return context
@login_required
def add_statuschange(request: HttpRequest) -> HttpResponse:
form = GameStatusChangeForm(request.POST or None)
if form.is_valid():
obj = form.save()
return redirect("games:view_game", game_id=obj.game.id)
return render_page(
request, AddForm(form, request=request), title="Add status change"
)
class AddStatusChangeView(LoginRequiredMixin, CreateView):
model = GameStatusChange
form_class = GameStatusChangeForm
template_name = "add.html"
def get_success_url(self):
return reverse_lazy("games:view_game", kwargs={"pk": self.object.game.id})
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Add status change"
return context
@login_required
def edit_statuschange(request: HttpRequest, statuschange_id: int) -> HttpResponse:
statuschange = get_object_or_404(GameStatusChange, id=statuschange_id)
form = GameStatusChangeForm(request.POST or None, instance=statuschange)
if form.is_valid():
form.save()
return redirect("games:list_platforms")
return render_page(
request, AddForm(form, request=request), title="Edit status change"
)
class GameStatusChangeListView(LoginRequiredMixin, ListView):
model = GameStatusChange
template_name = "list_purchases.html"
context_object_name = "status_changes"
paginate_by = 10
@login_required
def list_statuschanges(request: HttpRequest) -> HttpResponse:
page_number = request.GET.get("page", 1)
limit = request.GET.get("limit", 10)
statuschanges = GameStatusChange.objects.select_related("game").all()
page_obj = None
if int(limit) != 0:
paginator = Paginator(statuschanges, limit)
page_obj = paginator.get_page(page_number)
statuschanges = page_obj.object_list
elided_page_range = (
page_obj.paginator.get_elided_page_range(page_number, on_each_side=1, on_ends=1)
if page_obj
else None
)
def get_queryset(self):
return GameStatusChange.objects.select_related("game").all()
data = {
"header_action": None,
"columns": ["Game", "Old Status", "New Status", "Timestamp"],
"rows": [
[
sc.game.name,
sc.get_old_status_display() if sc.old_status else "-",
sc.get_new_status_display(),
local_strftime(sc.timestamp, dateformat) if sc.timestamp else "-",
]
for sc in statuschanges
],
}
content = paginated_table_content(
data,
page_obj=page_obj,
elided_page_range=elided_page_range,
request=request,
)
return render_page(request, content, title="Status changes")
class GameStatusChangeDeleteView(LoginRequiredMixin, DeleteView):
model = GameStatusChange
template_name = "gamestatuschange_confirm_delete.html"
def _delete_statuschange_content(statuschange, request: HttpRequest) -> SafeText:
inner = Div(
[],
[
Component(
tag_name="p",
children=["Are you sure you want to delete this status change?"],
),
Button(
[("class", "w-full")], "Delete", color="red", type="submit", size="lg"
),
A(
[("class", "")],
Button([("class", "w-full")], "Cancel", color="gray"),
href=reverse("games:view_game", args=[statuschange.game.id]),
),
],
)
form = Component(
tag_name="form",
attributes=[("method", "post"), ("class", "dark:text-white")],
children=[CsrfInput(request), inner],
)
return Div(
[
(
"class",
"2xl:max-w-(--breakpoint-2xl) xl:max-w-(--breakpoint-xl) "
"md:max-w-(--breakpoint-md) sm:max-w-(--breakpoint-sm) self-center",
)
],
[form],
)
def get_success_url(self):
return reverse_lazy("games:view_game", kwargs={"game_id": self.object.game.id})
@login_required
def delete_statuschange(request: HttpRequest, pk: int) -> HttpResponse:
statuschange = get_object_or_404(GameStatusChange, id=pk)
if request.method == "POST":
game_id = statuschange.game.id
statuschange.delete()
return redirect("games:view_game", game_id=game_id)
return render_page(
request,
_delete_statuschange_content(statuschange, request),
title="Delete status change",
)