diff --git a/README.md b/README.md index ff48c2979c1c0c91025981b389211a3ac4ce9552..e529f48dbd22a0573999baf6e06597cc4691f7d0 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,8 @@ Různé: | `SENTRY_DSN` | | pokud je zadáno, pády se reportují do Sentry | | `SEARCH_CONFIG` | english | nastavení jazyka fulltextového vyhledávání, viz níže | | `DEBUG_TOOLBAR` | False | zobrazit Django Debug Toolbar (pro vývoj) | +| `MAILTRAIN_API_URL` | | URL k API Mailtrain | +| `MAILTRAIN_API_TOKEN` | | token k API Mailtrain | Settings pro appky na weby: diff --git a/czech_inspirational/models.py b/czech_inspirational/models.py index e7c33cbdcb1f950964d7b15c38d0f8d04c0faa35..b92889df8eeeace16da10fa9bdb9bebc3bc3ad5a 100644 --- a/czech_inspirational/models.py +++ b/czech_inspirational/models.py @@ -299,9 +299,7 @@ class CzechInspirationalDownloadPage( pass else: subscribe_to_newsletter( - email, - settings.CZECH_INSPIRATIONAL_NEWSLETTER_ID, - settings.CZECH_INSPIRATIONAL_NEWSLETTER_SOURCE, + email, settings.CZECH_INSPIRATIONAL_NEWSLETTER_CID ) return context diff --git a/elections2021/models.py b/elections2021/models.py index cd452b167b8d1332868967e5eb617b4b7be319ad..dc170d52e6da7aecffde474b4fef1a5b56975dc2 100644 --- a/elections2021/models.py +++ b/elections2021/models.py @@ -518,9 +518,7 @@ class Elections2021HomePage(MetadataPageMixin, RoutablePageMixin, Page): form = SubscribeForm(request.POST) if form.is_valid(): subscribe_to_newsletter( - form.cleaned_data["email"], - settings.ELECTIONS2021_NEWSLETTER_ID, - settings.ELECTIONS2021_NEWSLETTER_SOURCE, + form.cleaned_data["email"], settings.ELECTIONS2021_NEWSLETTER_CID ) try: page = ( diff --git a/main/models.py b/main/models.py index 33b1e96fc15c57a43f035ea6737fc547396a0b62..20353e10d5165f1555e07b8ef0704488455d5e96 100644 --- a/main/models.py +++ b/main/models.py @@ -27,6 +27,7 @@ from wagtail.search import index from wagtailmetadata.models import MetadataPageMixin from elections2021.constants import REGION_CHOICES # pozor, import ze sousedního modulu +from instagram_utils.models import InstagramPost from shared.forms import SubscribeForm from shared.models import ( # MenuMixin, ArticleMixin, @@ -36,7 +37,6 @@ from shared.models import ( # MenuMixin, ) from shared.utils import make_promote_panels, subscribe_to_newsletter from tuning import admin_help -from instagram_utils.models import InstagramPost from . import blocks from .constants import MONTH_NAMES @@ -209,12 +209,9 @@ class MainHomePage( for access_data in self.instagram_access.raw_data ] - instagram_post_list = ( - InstagramPost. - objects. - filter(author_username__in=instagram_username_list). - order_by("-timestamp") - ) + instagram_post_list = InstagramPost.objects.filter( + author_username__in=instagram_username_list + ).order_by("-timestamp") context["instagram_post_list"] = instagram_post_list[:4] context["show_next_instagram_post"] = len(instagram_post_list) > 4 @@ -262,22 +259,19 @@ class MainHomePage( for access_data in self.instagram_access.raw_data ] - instagram_post_list_queryset = ( - InstagramPost. - objects. - filter(author_username__in=instagram_username_list). - order_by("-timestamp") - ) + instagram_post_list_queryset = InstagramPost.objects.filter( + author_username__in=instagram_username_list + ).order_by("-timestamp") instagram_post_paginator = Paginator(instagram_post_list_queryset, 4) - instagram_post_page = instagram_post_paginator.get_page(request.GET.get("page", 1)) + instagram_post_page = instagram_post_paginator.get_page( + request.GET.get("page", 1) + ) context = {"instagram_post_list": instagram_post_page.object_list} html_content = render( - request, - "main/includes/instagram_widget.html", - context + request, "main/includes/instagram_widget.html", context ).content data = { @@ -314,9 +308,7 @@ class MainHomePage( form = SubscribeForm(request.POST) if form.is_valid(): subscribe_to_newsletter( - form.cleaned_data["email"], - settings.PIRATICZ_NEWSLETTER_ID, - settings.PIRATICZ_NEWSLETTER_SOURCE, + form.cleaned_data["email"], settings.PIRATICZ_NEWSLETTER_CID ) messages.success( @@ -822,12 +814,11 @@ class MainPersonPage(ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, if len(self.instagram_access.raw_data) != 0: context["instagram_post_list"] = ( - InstagramPost. - objects. - filter( - author_username=self.instagram_access.raw_data[0]["value"]["username"] - ). - order_by("-timestamp") + InstagramPost.objects.filter( + author_username=self.instagram_access.raw_data[0]["value"][ + "username" + ] + ).order_by("-timestamp") )[:20] return context diff --git a/majak/settings/base.py b/majak/settings/base.py index 618884f2785919dbe42df1f5636318a46d5fd422..db4fe38990c7845158011d6295fb9909747a2db3 100644 --- a/majak/settings/base.py +++ b/majak/settings/base.py @@ -284,24 +284,17 @@ DONATE_PORTAL_API_URL = env.str("DONATE_PORTAL_API_URL", default="") DONATE_PORTAL_API_TIMEOUT = 5 DONATE_PORTAL_API_CACHE_TIMEOUT = 60 * 5 -CZECH_INSPIRATIONAL_NEWSLETTER_ID = env.int( - "CZECH_INSPIRATIONAL_NEWSLETTER_ID", default=0 -) -CZECH_INSPIRATIONAL_NEWSLETTER_SOURCE = env.str( - "CZECH_INSPIRATIONAL_NEWSLETTER_SOURCE", default="Česko inspirativní" -) +MAILTRAIN_API_URL = env.str("MAILTRAIN_API_URL", default="") +MAILTRAIN_API_TOKEN = env.str("MAILTRAIN_API_TOKEN", default="") -NALODENI_API_NEWS_SUBSCRIBE_URL = env.str("NALODENI_API_NEWS_SUBSCRIBE_URL", default="") -NALODENI_API_CREDENTIALS = env.str("NALODENI_API_CREDENTIALS", default="") +CZECH_INSPIRATIONAL_NEWSLETTER_CID = env.str( + "CZECH_INSPIRATIONAL_NEWSLETTER_CID", default="" +) ELECTIONS2021_COOKIE_NAME = "program" -ELECTIONS2021_NEWSLETTER_ID = env.int("ELECTIONS2021_NEWSLETTER_ID", default=0) -ELECTIONS2021_NEWSLETTER_SOURCE = env.str( - "ELECTIONS2021_NEWSLETTER_SOURCE", "Koalice 2021" -) +ELECTIONS2021_NEWSLETTER_CID = env.str("ELECTIONS2021_NEWSLETTER_CID", default="") -PIRATICZ_NEWSLETTER_ID = env.int("PIRATICZ_NEWSLETTER_ID", default=0) -PIRATICZ_NEWSLETTER_SOURCE = env.str("PIRATICZ_NEWSLETTER_SOURCE", "Piráti.cz") +PIRATICZ_NEWSLETTER_CID = env.str("PIRATICZ_NEWSLETTER_CID", default="") # URL pointing to MapProxy instance to use. # MapProxy is used to serve map tiles to hide client details from the tile provider. diff --git a/shared/utils.py b/shared/utils.py index c2a42ee84b0a6be4d82297831b6b93af60086128..48a1cc3205bff9cbfd9092545448d2c446bab499 100644 --- a/shared/utils.py +++ b/shared/utils.py @@ -1,6 +1,7 @@ import json import logging import urllib.request +from urllib.parse import urljoin import bleach import requests @@ -53,22 +54,15 @@ def make_promote_panels( return [MultiFieldPanel(panels, gettext_lazy("Common page configuration"))] -def subscribe_to_newsletter(email, news_id, source): - payload = { - "email": email, - "news_id": news_id, - "source": source, - "verify_email": 1, - } +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( - settings.NALODENI_API_NEWS_SUBSCRIBE_URL, - data=json.dumps(payload), - auth=tuple(settings.NALODENI_API_CREDENTIALS.split(":")), + url, data=data, headers={"access-token": settings.MAILTRAIN_API_TOKEN} ) if response.status_code != 200: logger.error( - "Failed to subscribe!", - extra={"payload": payload, "response": response.text}, + "Failed to subscribe!", extra={"data": data, "response": response.text} )