From 06ba4bfa6d2d8505f0eadd919643bca515b2758e Mon Sep 17 00:00:00 2001 From: Gust Date: Tue, 24 Feb 2015 17:10:10 -0300 Subject: [PATCH] Only show mailinglists if public or user in it --- colab/accounts/utils/mailman.py | 17 +++++++++-------- colab/super_archives/views.py | 29 +++++++++++++++++++---------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/colab/accounts/utils/mailman.py b/colab/accounts/utils/mailman.py index 998c25e..4eb9801 100644 --- a/colab/accounts/utils/mailman.py +++ b/colab/accounts/utils/mailman.py @@ -38,7 +38,7 @@ def unsubscribe(listname, address): def update_subscription(address, lists): - current_lists = address_lists(address) + current_lists = mailing_lists(address=address) for maillist in current_lists: if maillist not in lists: @@ -48,31 +48,32 @@ def update_subscription(address, lists): if maillist not in current_lists: subscribe(maillist, address) +def address_lists(address): + return mailing_lists(address=address) -def address_lists(address, description=''): +def mailing_lists(**kwargs): url = get_url() - params = {'address': address, - 'description': description} - try: - lists = requests.get(url, timeout=TIMEOUT, params=params) + lists = requests.get(url, timeout=TIMEOUT, params=kwargs) except: LOGGER.exception('Unable to list mailing lists') return [] return lists.json() +def is_private_list(name): + return dict(all_lists(private=True))[name] def all_lists(*args, **kwargs): - return address_lists('', *args, **kwargs) + return mailing_lists(*args, **kwargs) def user_lists(user): list_set = set() for email in user.emails.values_list('address', flat=True): - list_set.update(address_lists(email)) + list_set.update(mailing_lists(address=email)) return tuple(list_set) diff --git a/colab/super_archives/views.py b/colab/super_archives/views.py index 2659f39..3b2afea 100644 --- a/colab/super_archives/views.py +++ b/colab/super_archives/views.py @@ -123,20 +123,29 @@ class ThreadDashboardView(View): MAX = 6 context = {} all_lists = mailman.all_lists(description=True) + all_privates = dict(mailman.all_lists(private=True)) + context['lists'] = [] + user = User.objects.get(username=request.user) + emails = user.emails.values_list('address', flat=True) + lists_for_user = [] + for email in emails: + lists_for_user.extend(mailman.address_lists(email)) + for list_ in MailingList.objects.order_by('name'): - context['lists'].append(( - list_.name, - mailman.get_list_description(list_.name, all_lists), - list_.thread_set.filter(spam=False).order_by( - '-latest_message__received_time' - )[:MAX], - [t.latest_message for t in Thread.highest_score.filter( - mailinglist__name=list_.name)[:MAX]], - len(mailman.list_users(list_.name)), - )) + if not all_privates[list_.name] or list_.name in lists_for_user: + context['lists'].append(( + list_.name, + mailman.get_list_description(list_.name), + list_.thread_set.filter(spam=False).order_by( + '-latest_message__received_time' + )[:MAX], + [t.latest_message for t in Thread.highest_score.filter( + mailinglist__name=list_.name)[:MAX]], + len(mailman.list_users(list_.name)), + )) return render(request, 'superarchives/thread-dashboard.html', context) -- libgit2 0.21.2