Commit de0130e04688d2abd14df2d4431d0b4071ed29a3
1 parent
55f81ec7
Exists in
master
and in
39 other branches
Adding view to manage list subscription
Partialy implemented. Not working yet.
Showing
3 changed files
with
44 additions
and
5 deletions
Show diff stats
src/accounts/models.py
@@ -26,12 +26,22 @@ class User(AbstractUser): | @@ -26,12 +26,22 @@ class User(AbstractUser): | ||
26 | def facebook_link(self): | 26 | def facebook_link(self): |
27 | return urlparse.urljoin('https://www.facebook.com', self.facebook) | 27 | return urlparse.urljoin('https://www.facebook.com', self.facebook) |
28 | 28 | ||
29 | - def mailinglists(self): | 29 | + def mailinglists(self, email=None): |
30 | list_set = set() | 30 | list_set = set() |
31 | - for email in self.emails.all(): | ||
32 | - lists = requests.get(settings.MAILMAN_API_URL, timeout=1, | ||
33 | - params={'address': email.address}) | 31 | + |
32 | + if not email: | ||
33 | + emails = self.emails.values_list('address', flat=True) | ||
34 | + else: | ||
35 | + emails = [email] | ||
36 | + | ||
37 | + for email in emails: | ||
38 | + try: | ||
39 | + lists = requests.get(settings.MAILMAN_API_URL, timeout=1, | ||
40 | + params={'address': email}) | ||
41 | + except requests.exceptions.Timeout: | ||
42 | + pass | ||
34 | list_set.update(lists.json()) | 43 | list_set.update(lists.json()) |
44 | + | ||
35 | return tuple(list_set) | 45 | return tuple(list_set) |
36 | 46 | ||
37 | 47 |
src/accounts/urls.py
1 | 1 | ||
2 | from django.conf.urls import patterns, include, url | 2 | from django.conf.urls import patterns, include, url |
3 | 3 | ||
4 | -from .views import UserProfileDetailView, UserProfileUpdateView | 4 | +from .views import UserProfileDetailView, UserProfileUpdateView, \ |
5 | + ManageUserSubscriptionsView | ||
5 | 6 | ||
6 | 7 | ||
7 | urlpatterns = patterns('', | 8 | urlpatterns = patterns('', |
@@ -12,4 +13,7 @@ urlpatterns = patterns('', | @@ -12,4 +13,7 @@ urlpatterns = patterns('', | ||
12 | 13 | ||
13 | url(r'^(?P<username>[\w@+.-]+)/edit/?$', | 14 | url(r'^(?P<username>[\w@+.-]+)/edit/?$', |
14 | UserProfileUpdateView.as_view(), name='user_profile_update'), | 15 | UserProfileUpdateView.as_view(), name='user_profile_update'), |
16 | + | ||
17 | + url(r'^(?P<username>[\w@+.-]+)/subscriptions/?$', | ||
18 | + ManageUserSubscriptionsView.as_view(), name='user_subscriptions'), | ||
15 | ) | 19 | ) |
src/accounts/views.py
@@ -2,9 +2,11 @@ | @@ -2,9 +2,11 @@ | ||
2 | # encoding: utf-8 | 2 | # encoding: utf-8 |
3 | 3 | ||
4 | import datetime | 4 | import datetime |
5 | +import requests | ||
5 | 6 | ||
6 | from collections import OrderedDict | 7 | from collections import OrderedDict |
7 | 8 | ||
9 | +from django.conf import settings | ||
8 | from django.contrib import messages | 10 | from django.contrib import messages |
9 | from django.db.models import Count | 11 | from django.db.models import Count |
10 | from django.contrib.auth import get_user_model | 12 | from django.contrib.auth import get_user_model |
@@ -43,6 +45,7 @@ class UserProfileUpdateView(UserProfileBaseMixin, UpdateView): | @@ -43,6 +45,7 @@ class UserProfileUpdateView(UserProfileBaseMixin, UpdateView): | ||
43 | 45 | ||
44 | return obj | 46 | return obj |
45 | 47 | ||
48 | + | ||
46 | class UserProfileDetailView(UserProfileBaseMixin, DetailView): | 49 | class UserProfileDetailView(UserProfileBaseMixin, DetailView): |
47 | template_name = 'accounts/user_detail.html' | 50 | template_name = 'accounts/user_detail.html' |
48 | 51 | ||
@@ -121,3 +124,25 @@ def signup(request): | @@ -121,3 +124,25 @@ def signup(request): | ||
121 | 'Profiles not validated are deleted in 24h.')) | 124 | 'Profiles not validated are deleted in 24h.')) |
122 | 125 | ||
123 | return redirect('user_profile', username=user.username) | 126 | return redirect('user_profile', username=user.username) |
127 | + | ||
128 | + | ||
129 | +class ManageUserSubscriptionsView(UserProfileBaseMixin, DetailView): | ||
130 | + http_method_names = [u'get', u'post'] | ||
131 | + template_name = u'accounts/manage_subscriptions.html' | ||
132 | + | ||
133 | + def post(self, request, *args, **kwargs): | ||
134 | + user = self.get_object() | ||
135 | + for email in user.emails.values_list('address', flat=True): | ||
136 | + current_lists = user.mailinglists(email) | ||
137 | + #url = urlparse.urljoin(settings.MAILMAN_API_URL, | ||
138 | + # ) | ||
139 | + #requests.put() | ||
140 | + return self.get(request, *args, **kwargs) | ||
141 | + | ||
142 | + def get_context_data(self, **kwargs): | ||
143 | + context = {} | ||
144 | + resp = requests.get(settings.MAILMAN_API_URL) | ||
145 | + context['lists'] = resp.json() | ||
146 | + | ||
147 | + context.update(kwargs) | ||
148 | + return super(ManageUserSubscriptionsView, self).get_context_data(**context) |