-
Alexa Valentová authoredAlexa Valentová authored
utils.py 3.04 KiB
import json
import logging
import urllib.request
from urllib.parse import urljoin
import bleach
import requests
from django.conf import settings
from django.core.files import File
from django.http import HttpResponse
from django.utils.translation import gettext_lazy
from wagtail.admin.panels import CommentPanel, FieldPanel, HelpPanel, MultiFieldPanel
from wagtail.images.models import Image
from wagtail.models import Page
from tuning import admin_help
logger = logging.getLogger()
def create_image_from_url(url, filename):
img_data = urllib.request.urlretrieve(url)
img_obj = Image(title=filename)
img_obj.file.save(filename, File(open(img_data[0], "rb")))
img_obj.save()
return img_obj
def get_subpage_url(page, dest_page_type):
try:
return page.get_descendants().type(dest_page_type).live().first().get_url()
except (Page.DoesNotExist, AttributeError):
return "#"
def make_promote_panels(
help_content=None, *, seo_title=True, search_description=True, search_image=True
):
if help_content is None:
help_content = admin_help.build(
admin_help.NO_SEO_TITLE, admin_help.NO_SEARCH_IMAGE
)
panels = [FieldPanel("slug")]
if seo_title:
panels.append(FieldPanel("seo_title"))
if search_description:
panels.append(FieldPanel("search_description"))
if search_image:
# TODO
panels.append(FieldPanel("search_image")) # , label="Obrázek pro embed"))
panels.append(HelpPanel(help_content))
panels.append(CommentPanel())
return [MultiFieldPanel(panels, gettext_lazy("Metadata stránky"))]
def subscribe_to_newsletter(email, list_id):
url = urljoin(settings.MAILTRAIN_API_URL, f"subscribe/{list_id}")
data = {"EMAIL": email, "FORCE_SUBSCRIBE": False, "REQUIRE_CONFIRMATION": True}
response = requests.post(
url, data=data, headers={"access-token": settings.MAILTRAIN_API_TOKEN}
)
if response.status_code != 200:
logger.error(
"Failed to subscribe!", extra={"data": data, "response": response.text}
)
return response
def subscribe_to_newsletter_ajax(request):
client_response = HttpResponse()
if request.method == "POST":
body = json.loads(request.body)
response = subscribe_to_newsletter(body["email"], body["list_id"])
if "error" in response.json():
client_response.status_code = 500
else:
client_response.status_code = response.status_code
return client_response
client_response.status_code = 400
return client_response
def strip_all_html_tags(value: str):
"""Drop all HTML tags from given value.
:param value: string to sanitize
"""
return bleach.clean(value, tags=[], attributes=[], strip=True, strip_comments=True)
def trim_to_length(value: str, max_length: int = 150):
"""Trim value to max length shall it exceed it.
:param value: input string
:param max_length: max allowed length
"""
if len(value) > max_length:
return value[:max_length] + "..."
return value