diff --git a/src/accounts/models.py b/src/accounts/models.py index fa4789f..6e7f532 100644 --- a/src/accounts/models.py +++ b/src/accounts/models.py @@ -26,12 +26,22 @@ class User(AbstractUser): def facebook_link(self): return urlparse.urljoin('https://www.facebook.com', self.facebook) - def mailinglists(self): + def mailinglists(self, email=None): list_set = set() - for email in self.emails.all(): - lists = requests.get(settings.MAILMAN_API_URL, timeout=1, - params={'address': email.address}) + + if not email: + emails = self.emails.values_list('address', flat=True) + else: + emails = [email] + + for email in emails: + try: + lists = requests.get(settings.MAILMAN_API_URL, timeout=1, + params={'address': email}) + except requests.exceptions.Timeout: + pass list_set.update(lists.json()) + return tuple(list_set) diff --git a/src/accounts/urls.py b/src/accounts/urls.py index 5c59ef9..ffa036b 100644 --- a/src/accounts/urls.py +++ b/src/accounts/urls.py @@ -1,7 +1,8 @@ from django.conf.urls import patterns, include, url -from .views import UserProfileDetailView, UserProfileUpdateView +from .views import UserProfileDetailView, UserProfileUpdateView, \ + ManageUserSubscriptionsView urlpatterns = patterns('', @@ -12,4 +13,7 @@ urlpatterns = patterns('', url(r'^(?P[\w@+.-]+)/edit/?$', UserProfileUpdateView.as_view(), name='user_profile_update'), + + url(r'^(?P[\w@+.-]+)/subscriptions/?$', + ManageUserSubscriptionsView.as_view(), name='user_subscriptions'), ) diff --git a/src/accounts/views.py b/src/accounts/views.py index 2135498..7d9afb7 100644 --- a/src/accounts/views.py +++ b/src/accounts/views.py @@ -2,9 +2,11 @@ # encoding: utf-8 import datetime +import requests from collections import OrderedDict +from django.conf import settings from django.contrib import messages from django.db.models import Count from django.contrib.auth import get_user_model @@ -43,6 +45,7 @@ class UserProfileUpdateView(UserProfileBaseMixin, UpdateView): return obj + class UserProfileDetailView(UserProfileBaseMixin, DetailView): template_name = 'accounts/user_detail.html' @@ -121,3 +124,25 @@ def signup(request): 'Profiles not validated are deleted in 24h.')) return redirect('user_profile', username=user.username) + + +class ManageUserSubscriptionsView(UserProfileBaseMixin, DetailView): + http_method_names = [u'get', u'post'] + template_name = u'accounts/manage_subscriptions.html' + + def post(self, request, *args, **kwargs): + user = self.get_object() + for email in user.emails.values_list('address', flat=True): + current_lists = user.mailinglists(email) + #url = urlparse.urljoin(settings.MAILMAN_API_URL, + # ) + #requests.put() + return self.get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = {} + resp = requests.get(settings.MAILMAN_API_URL) + context['lists'] = resp.json() + + context.update(kwargs) + return super(ManageUserSubscriptionsView, self).get_context_data(**context) -- libgit2 0.21.2