X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/d0f0e1412cc42d366b234e798dfb68feed05d751..d555d988764995ea1f9f5ece46f453a66f09b334:/src/contact/mailing.py?ds=inline diff --git a/src/contact/mailing.py b/src/contact/mailing.py new file mode 100644 index 0000000..bfd4209 --- /dev/null +++ b/src/contact/mailing.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +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() + + +def remove_from_groups(email, client): + group_ids = [] + categories = client.lists.interest_categories.all(list_id=settings.MAILCHIMP_LIST_ID)['categories'] + for category in categories: + groups = client.lists.interest_categories.interests.all( + list_id=settings.MAILCHIMP_LIST_ID, category_id=category['id'])['interests'] + group_ids += [group['id'] for group in groups] + interests = {group_id: False for group_id in group_ids} + client.lists.members.update( + settings.MAILCHIMP_LIST_ID, subscriber_hash(email), + data={'interests': interests}) + + +def subscribe(email): + 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: + pass + else: + if member['status'] != 'subscribed': + remove_from_groups(email, client) + 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, + } + )