77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import annotations
|
|
|
|
import http
|
|
import logging
|
|
|
|
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:
|
|
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
|