You've already forked hotpocket
This commit is contained in:
78
services/backend/hotpocket_backend/apps/ui/views/saves.py
Normal file
78
services/backend/hotpocket_backend/apps/ui/views/saves.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import annotations
|
||||
|
||||
import http
|
||||
import logging
|
||||
|
||||
import django.db
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse
|
||||
from django.views.generic import FormView
|
||||
from django_htmx.http import trigger_client_event
|
||||
|
||||
from hotpocket_backend.apps.accounts.mixins import AccountRequiredMixin
|
||||
from hotpocket_backend.apps.ui.forms.saves import CreateForm
|
||||
from hotpocket_backend.apps.ui.services import UISavesService
|
||||
from hotpocket_backend.apps.ui.services.workflows import CreateSaveWorkflow
|
||||
|
||||
LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CreateView(AccountRequiredMixin, FormView):
|
||||
template_name = 'ui/saves/create.html'
|
||||
form_class = CreateForm
|
||||
|
||||
def form_valid(self, form: CreateForm) -> HttpResponse:
|
||||
with django.db.transaction.atomic():
|
||||
return CreateSaveWorkflow().run(
|
||||
request=self.request,
|
||||
account=self.request.user,
|
||||
url=form.cleaned_data['url'],
|
||||
)
|
||||
|
||||
def get_success_url(self) -> str:
|
||||
return reverse('ui.associations.browse')
|
||||
|
||||
|
||||
def embed(request: HttpRequest) -> HttpResponse:
|
||||
try:
|
||||
assert request.method == http.HTTPMethod.POST, (
|
||||
f'405 Method Not Allowed: `{request.method}`'
|
||||
)
|
||||
assert 'pk' in request.POST, (
|
||||
'400 Bad Request: `pk` missing'
|
||||
)
|
||||
assert request.htmx, (
|
||||
'400 Bad Reqquest: Not an HTMX request'
|
||||
)
|
||||
except AssertionError as exception:
|
||||
LOGGER.error(
|
||||
'Unable to render save embed: pk=`pk`: %s',
|
||||
exception,
|
||||
exc_info=exception,
|
||||
)
|
||||
return HttpResponse(
|
||||
b'NOPE',
|
||||
status=http.HTTPStatus.BAD_REQUEST,
|
||||
content_type='text/plain;charset=utf-8',
|
||||
)
|
||||
|
||||
save = UISavesService().get_or_404(pk=request.POST['pk'])
|
||||
|
||||
response = render(
|
||||
request,
|
||||
'ui/saves/partials/embed.html',
|
||||
{
|
||||
'save': save,
|
||||
},
|
||||
)
|
||||
|
||||
trigger_client_event(
|
||||
response,
|
||||
'HotPocket:ViewAssociationView:loadEmbed',
|
||||
{},
|
||||
after='swap',
|
||||
)
|
||||
|
||||
return response
|
||||
Reference in New Issue
Block a user