From 6002dcdb490011e42869bd513544db0f563ed515 Mon Sep 17 00:00:00 2001 From: Charles Oliveira <18oliveira.charles@gmail.com> Date: Fri, 7 Aug 2015 10:20:53 -0400 Subject: [PATCH] Added support for mailman apiv2 --- colab/accounts/utils/mailman.py | 29 +++++++++++++++++------------ colab/accounts/views.py | 4 ++-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/colab/accounts/utils/mailman.py b/colab/accounts/utils/mailman.py index 73d3896..1186747 100644 --- a/colab/accounts/utils/mailman.py +++ b/colab/accounts/utils/mailman.py @@ -27,15 +27,15 @@ MAILMAN_MSGS = { } -def get_url(listname=None): +def get_url(path, listname=None): + url = urlparse.urljoin(settings.MAILMAN_API_URL, path) if listname: - return urlparse.urljoin(settings.MAILMAN_API_URL, listname) - - return settings.MAILMAN_API_URL + return urlparse.urljoin(url, listname) + return url def subscribe(listname, address): - url = get_url(listname) + url = get_url('subscribe/', listname=listname) try: result = requests.put(url, timeout=TIMEOUT, data={'address': address}) msg_type, message = MAILMAN_MSGS[result.json()] @@ -46,7 +46,7 @@ def subscribe(listname, address): def unsubscribe(listname, address): - url = get_url(listname) + url = get_url('subscribe/', listname) try: result = requests.delete(url, timeout=TIMEOUT, data={'address': address}) msg_type, message = MAILMAN_MSGS[result.json()] @@ -57,7 +57,7 @@ def unsubscribe(listname, address): def update_subscription(address, lists): - current_lists = mailing_lists(address=address) + current_lists = mailing_lists(address=address, names_only=True) info_messages = [] for maillist in current_lists: @@ -72,16 +72,21 @@ def update_subscription(address, lists): def mailing_lists(**kwargs): - url = get_url() - path = 'lists/' + url = get_url('lists/') try: - lists = requests.get(url + path, timeout=TIMEOUT, params=kwargs) + lists = requests.get(url, timeout=TIMEOUT, params=kwargs) except: LOGGER.exception('Unable to list mailing lists') return [] - return lists.json() + if 'names_only' in kwargs and kwargs['names_only']: + names_only = [] + for l in lists.json(): + names_only.append(l['listname']) + return names_only + else: + return lists.json() def is_private_list(name): @@ -115,7 +120,7 @@ def get_list_description(listname, lists=None): def list_users(listname): - url = get_url(listname) + url = get_url('members/', listname) params = {} diff --git a/colab/accounts/views.py b/colab/accounts/views.py index 6bbaa15..0c3130f 100644 --- a/colab/accounts/views.py +++ b/colab/accounts/views.py @@ -153,11 +153,11 @@ class ManageUserSubscriptionsView(UserProfileBaseMixin, DetailView): user = self.get_object() emails = user.emails.values_list('address', flat=True) - all_lists = mailman.all_lists(description=True) + all_lists = mailman.all_lists() for email in emails: lists = [] - lists_for_address = mailman.mailing_lists(address=email) + lists_for_address = mailman.mailing_lists(address=email, names_only=True) for mlist in all_lists: if mlist.get('listname') in lists_for_address: checked = True -- libgit2 0.21.2