diff --git a/colab/accounts/models.py b/colab/accounts/models.py index 0981c98..264adea 100644 --- a/colab/accounts/models.py +++ b/colab/accounts/models.py @@ -60,7 +60,7 @@ class User(AbstractUser): return mailman.user_lists(self) def update_subscription(self, email, lists): - mailman.update_subscription(email, lists) + return mailman.update_subscription(email, lists) def save(self, *args, **kwargs): diff --git a/colab/accounts/utils/mailman.py b/colab/accounts/utils/mailman.py index 43d86ca..77b2be3 100644 --- a/colab/accounts/utils/mailman.py +++ b/colab/accounts/utils/mailman.py @@ -4,6 +4,7 @@ import requests import logging from django.conf import settings +from django.contrib import messages TIMEOUT = 1 @@ -20,11 +21,13 @@ def get_url(listname=None): def subscribe(listname, address): url = get_url(listname) try: - requests.put(url, timeout=TIMEOUT, data={'address': address}) + result = requests.put(url, timeout=TIMEOUT, data={'address': address}) + if result.status_code is not 200: + return False, '%s: %s' % (listname, result.json()) except: LOGGER.exception('Unable to subscribe user') - return False - return True + return False, 'Unable to subscribe user' + return True, 'Success' def unsubscribe(listname, address): @@ -39,6 +42,7 @@ def unsubscribe(listname, address): def update_subscription(address, lists): current_lists = mailing_lists(address=address) + error_messages = [] for maillist in current_lists: if maillist not in lists: @@ -46,7 +50,11 @@ def update_subscription(address, lists): for maillist in lists: if maillist not in current_lists: - subscribe(maillist, address) + subscribed, message = subscribe(maillist, address) + if not subscribed: + error_messages.append(message) + + return error_messages def mailing_lists(**kwargs): diff --git a/colab/accounts/views.py b/colab/accounts/views.py index 280b35f..0c36fcd 100644 --- a/colab/accounts/views.py +++ b/colab/accounts/views.py @@ -139,7 +139,9 @@ class ManageUserSubscriptionsView(UserProfileBaseMixin, DetailView): user = self.get_object() for email in user.emails.values_list('address', flat=True): lists = self.request.POST.getlist(email) - user.update_subscription(email, lists) + info_messages = user.update_subscription(email, lists) + for message in info_messages: + messages.success(request, _(message)) return redirect('user_profile', username=user.username) -- libgit2 0.21.2