Skip to content
Snippets Groups Projects
Select Git revision
  • d5d5261e02ffb0621e079d6fe547baa8708abc5c
  • test default protected
  • master protected
  • niki_edit_branch
  • feat/custom-css
  • feat/redesign-improvements-10
  • feat/redesign-improvements-8
  • feat/redesign-fixes-3
  • feat/pirstan-changes
  • feat/separate-import-thread
  • feat/dary-improvements
  • features/add-pdf-page
  • features/add-typed-table
  • features/fix-broken-calendar-categories
  • features/add-embed-to-articles
  • features/create-mastodon-feed-block
  • features/add-custom-numbering-for-candidates
  • features/add-timeline
  • features/create-wordcloud-from-article-page
  • features/create-collapsible-extra-legal-info
  • features/extend-hero-banner
21 results

utils.py

Blame
  • utils.py 3.00 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:
            panels.append(FieldPanel("search_image"))
        panels.append(HelpPanel(help_content))
        panels.append(CommentPanel())
    
        return [MultiFieldPanel(panels, gettext_lazy("Common page configuration"))]
    
    
    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