X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/3f07d81cce72585a8ec7d4a4e062dc15d53fd931..fc0b706f8c7eb67531df0a2acd972412e47c7010:/src/contact/mailing.py?ds=sidebyside diff --git a/src/contact/mailing.py b/src/contact/mailing.py index bfd42093a..4dee9c5a7 100644 --- a/src/contact/mailing.py +++ b/src/contact/mailing.py @@ -1,22 +1,15 @@ -# -*- coding: utf-8 -*- - +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# from hashlib import md5 -import requests from django.conf import settings from mailchimp3 import MailChimp from mailchimp3.mailchimpclient import MailChimpError -INTERESTS = {settings.MAILCHIMP_GROUP_ID: True} - - -def get_client(): - headers = requests.utils.default_headers() - headers['User-Agent'] = '%s (%s)' % settings.MANAGERS[0] - def subscriber_hash(email): - return md5(email).hexdigest() + return md5(email.encode('utf-8')).hexdigest() def remove_from_groups(email, client): @@ -32,7 +25,7 @@ def remove_from_groups(email, client): data={'interests': interests}) -def subscribe(email): +def subscribe(email, mailing_lists=None): client = MailChimp(mc_api=settings.MAILCHIMP_API_KEY, timeout=10.0) try: member = client.lists.members.get(settings.MAILCHIMP_LIST_ID, subscriber_hash(email)) @@ -41,12 +34,41 @@ def subscribe(email): else: if member['status'] != 'subscribed': remove_from_groups(email, client) + mailing_lists = mailing_lists or [settings.MAILCHIMP_DEFAULT_GROUP] + interests = { + settings.MAILCHIMP_GROUP_IDS[mailing_list]: True + for mailing_list in mailing_lists + if mailing_list in settings.MAILCHIMP_GROUP_IDS + } client.lists.members.create_or_update( settings.MAILCHIMP_LIST_ID, subscriber_hash(email), data={ 'email_address': email, 'status_if_new': 'subscribed', 'status': 'subscribed', - 'interests': INTERESTS, + 'interests': interests, + } + ) + + +def unsubscribe(email, mailing_lists=None): + client = MailChimp(mc_api=settings.MAILCHIMP_API_KEY, timeout=10.0) + try: + member = client.lists.members.get(settings.MAILCHIMP_LIST_ID, subscriber_hash(email)) + except MailChimpError: + return + else: + if member['status'] != 'subscribed': + return + mailing_lists = mailing_lists or settings.MAILCHIMP_GROUP_IDS + interests = { + settings.MAILCHIMP_GROUP_IDS[mailing_list]: False + for mailing_list in mailing_lists + if mailing_list in settings.MAILCHIMP_GROUP_IDS + } + client.lists.members.update( + settings.MAILCHIMP_LIST_ID, subscriber_hash(email), + data={ + 'interests': interests, } )