Commit 6002dcdb490011e42869bd513544db0f563ed515

Authored by Charles Oliveira
1 parent f3b2dec1

Added support for mailman apiv2

colab/accounts/utils/mailman.py
... ... @@ -27,15 +27,15 @@ MAILMAN_MSGS = {
27 27 }
28 28  
29 29  
30   -def get_url(listname=None):
  30 +def get_url(path, listname=None):
  31 + url = urlparse.urljoin(settings.MAILMAN_API_URL, path)
31 32 if listname:
32   - return urlparse.urljoin(settings.MAILMAN_API_URL, listname)
33   -
34   - return settings.MAILMAN_API_URL
  33 + return urlparse.urljoin(url, listname)
  34 + return url
35 35  
36 36  
37 37 def subscribe(listname, address):
38   - url = get_url(listname)
  38 + url = get_url('subscribe/', listname=listname)
39 39 try:
40 40 result = requests.put(url, timeout=TIMEOUT, data={'address': address})
41 41 msg_type, message = MAILMAN_MSGS[result.json()]
... ... @@ -46,7 +46,7 @@ def subscribe(listname, address):
46 46  
47 47  
48 48 def unsubscribe(listname, address):
49   - url = get_url(listname)
  49 + url = get_url('subscribe/', listname)
50 50 try:
51 51 result = requests.delete(url, timeout=TIMEOUT, data={'address': address})
52 52 msg_type, message = MAILMAN_MSGS[result.json()]
... ... @@ -57,7 +57,7 @@ def unsubscribe(listname, address):
57 57  
58 58  
59 59 def update_subscription(address, lists):
60   - current_lists = mailing_lists(address=address)
  60 + current_lists = mailing_lists(address=address, names_only=True)
61 61 info_messages = []
62 62  
63 63 for maillist in current_lists:
... ... @@ -72,16 +72,21 @@ def update_subscription(address, lists):
72 72  
73 73  
74 74 def mailing_lists(**kwargs):
75   - url = get_url()
76   - path = 'lists/'
  75 + url = get_url('lists/')
77 76  
78 77 try:
79   - lists = requests.get(url + path, timeout=TIMEOUT, params=kwargs)
  78 + lists = requests.get(url, timeout=TIMEOUT, params=kwargs)
80 79 except:
81 80 LOGGER.exception('Unable to list mailing lists')
82 81 return []
83 82  
84   - return lists.json()
  83 + if 'names_only' in kwargs and kwargs['names_only']:
  84 + names_only = []
  85 + for l in lists.json():
  86 + names_only.append(l['listname'])
  87 + return names_only
  88 + else:
  89 + return lists.json()
85 90  
86 91  
87 92 def is_private_list(name):
... ... @@ -115,7 +120,7 @@ def get_list_description(listname, lists=None):
115 120  
116 121  
117 122 def list_users(listname):
118   - url = get_url(listname)
  123 + url = get_url('members/', listname)
119 124  
120 125 params = {}
121 126  
... ...
colab/accounts/views.py
... ... @@ -153,11 +153,11 @@ class ManageUserSubscriptionsView(UserProfileBaseMixin, DetailView):
153 153  
154 154 user = self.get_object()
155 155 emails = user.emails.values_list('address', flat=True)
156   - all_lists = mailman.all_lists(description=True)
  156 + all_lists = mailman.all_lists()
157 157  
158 158 for email in emails:
159 159 lists = []
160   - lists_for_address = mailman.mailing_lists(address=email)
  160 + lists_for_address = mailman.mailing_lists(address=email, names_only=True)
161 161 for mlist in all_lists:
162 162 if mlist.get('listname') in lists_for_address:
163 163 checked = True
... ...