Commit de0130e04688d2abd14df2d4431d0b4071ed29a3

Authored by Sergio Oliveira
1 parent 55f81ec7

Adding view to manage list subscription

Partialy implemented. Not working yet.
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)