diff --git a/colab/accounts/utils/mailman.py b/colab/accounts/utils/mailman.py index 7e868df..949813d 100644 --- a/colab/accounts/utils/mailman.py +++ b/colab/accounts/utils/mailman.py @@ -117,8 +117,9 @@ def get_list_description(listname, lists=None): if not lists: lists = all_lists() - desc = "".join(mlist.get('description') for mlist in lists\ - if isinstance(mlist, dict) and mlist.get('listname') == listname) + desc = "".join(mlist.get('description') for mlist in lists + if isinstance(mlist, dict) and + mlist.get('listname') == listname) return desc @@ -147,3 +148,10 @@ def get_user_mailinglists(user): lists_for_user.extend(mailing_lists(address=email)) return lists_for_user + + +def extract_listname_from_list(lists): + try: + return [mlist.get('listname') for mlist in lists] + except ValueError: + return [] diff --git a/colab/home/views.py b/colab/home/views.py index 4e16481..48d3a73 100644 --- a/colab/home/views.py +++ b/colab/home/views.py @@ -10,9 +10,10 @@ from colab.accounts.models import User def get_user_threads(threads, lists_for_user, key): visible_threads = [] + listnames_for_user = mailman.extract_listname_from_list(lists_for_user) for t in threads: if not t.mailinglist.is_private or \ - t.mailinglist.name in lists_for_user: + t.mailinglist.name in listnames_for_user: visible_threads.append(key(t)) return visible_threads diff --git a/colab/search/utils.py b/colab/search/utils.py index ee545f4..1768534 100644 --- a/colab/search/utils.py +++ b/colab/search/utils.py @@ -15,11 +15,12 @@ from colab.accounts.utils import mailman def get_visible_threads_queryset(logged_user): queryset = Thread.objects - lists_for_user = [] + listnames_for_user = [] if logged_user: lists_for_user = mailman.get_user_mailinglists(logged_user) + listnames_for_user = mailman.extract_listname_from_list(lists_for_user) - user_lists = Condition(mailinglist__name__in=lists_for_user) + user_lists = Condition(mailinglist__name__in=listnames_for_user) public_lists = Condition(mailinglist__is_private=False) queryset = Thread.objects.filter(user_lists | public_lists) @@ -28,6 +29,7 @@ def get_visible_threads_queryset(logged_user): def get_visible_threads(logged_user, filter_by_user=None): thread_qs = get_visible_threads_queryset(logged_user) + if filter_by_user: message_qs = Message.objects.filter(thread__in=thread_qs) messages = message_qs.filter( diff --git a/colab/super_archives/fixtures/mailinglistdata.json b/colab/super_archives/fixtures/mailinglistdata.json index 6bbfa33..6f74e5e 100644 --- a/colab/super_archives/fixtures/mailinglistdata.json +++ b/colab/super_archives/fixtures/mailinglistdata.json @@ -6,23 +6,23 @@ "twitter": null, "is_staff": false, "user_permissions": [ - + ], "date_joined": "2015-02-24T21:10:35.004Z", "google_talk": null, - "first_name": "Gust", + "first_name": "John", "is_superuser": false, "last_login": "2015-02-26T17:56:13.378Z", "verification_hash": null, "role": null, - "email": "gustmax@hotmail.com", - "username": "gustmax", + "email": "johndoe@example.com", + "username": "johndoe", "bio": null, "needs_update": false, "is_active": true, "facebook": null, "groups": [ - + ], "password": "pbkdf2_sha256$12000$ez83ccNOUQZk$vYT/QcYMukXZ7D7L1qQPyYlzCUEEEF20J7/Xjef0Rqg=", "institution": null, @@ -37,7 +37,7 @@ "real_name": "", "user": 1, "md5": "ed8f47ae6048f8d4456c0554578f53ff", - "address": "gustmax@hotmail.com" + "address": "johndoe@example.com" }, "model": "super_archives.emailaddress", "pk": 1 diff --git a/colab/super_archives/tests/test_privatelist.py b/colab/super_archives/tests/test_privatelist.py index 8bfb542..d9ab255 100644 --- a/colab/super_archives/tests/test_privatelist.py +++ b/colab/super_archives/tests/test_privatelist.py @@ -2,7 +2,7 @@ import mock from colab.accounts.utils import mailman -from django.test import TestCase, Client +from django.test import TestCase, Client class ArchivesViewTest(TestCase): @@ -13,11 +13,14 @@ class ArchivesViewTest(TestCase): self.client = Client() def authenticate_user(self): - self.client.login(username='gustmax', password='1234') + self.client.login(username='johndoe', password='1234') def test_see_only_private_list_if_member(self): mailman.get_user_mailinglists = mock.Mock( + return_value="[{'listname': 'privatelist'}]") + mailman.extract_listname_from_list = mock.Mock( return_value="['privatelist']") + mailman.list_users = mock.Mock(return_value="['johndoe@example.com']") self.authenticate_user() request = self.client.get('/archives/thread/') @@ -26,7 +29,7 @@ class ArchivesViewTest(TestCase): self.assertEqual('lista', list_data[0][0]) self.assertEqual('privatelist', list_data[1][0]) - self.assertEqual(2, len(list_data)) + self.assertEqual(2, len(list_data)) def test_see_only_public_if_not_logged_in(self): request = self.client.get('/archives/thread/') @@ -34,10 +37,12 @@ class ArchivesViewTest(TestCase): list_data = request.context['lists'] self.assertEqual('lista', list_data[0][0]) - self.assertEqual(1, len(list_data)) + self.assertEqual(1, len(list_data)) def test_see_private_thread_in_dashboard_if_member(self): mailman.get_user_mailinglists = mock.Mock( + return_value="[{'listname': 'privatelist'}]") + mailman.extract_listname_from_list = mock.Mock( return_value="['privatelist']") self.authenticate_user() @@ -59,7 +64,7 @@ class ArchivesViewTest(TestCase): self.assertEqual(1, len(hottest_threads)) def test_dont_see_private_threads_in_profile_if_logged_out(self): - request = self.client.get('/account/gustmax') + request = self.client.get('/account/johndoe') emails = request.context['emails'] diff --git a/colab/super_archives/views.py b/colab/super_archives/views.py index ccd2fbe..35d6f59 100644 --- a/colab/super_archives/views.py +++ b/colab/super_archives/views.py @@ -46,8 +46,8 @@ class ThreadView(View): user = User.objects.get(username=request.user) emails = user.emails.values_list('address', flat=True) lists_for_user = mailman.get_user_mailinglists(user) - listnames_for_user = [mlist.get("listname") - for mlist in lists_for_user] + listnames_for_user = mailman.extract_listname_from_list( + lists_for_user) if thread.mailinglist.name not in listnames_for_user: raise PermissionDenied @@ -150,13 +150,16 @@ class ThreadDashboardView(View): context['lists'] = [] - lists_for_user = [] + listnames_for_user = [] if request.user.is_authenticated(): user = User.objects.get(username=request.user) lists_for_user = mailman.get_user_mailinglists(user) + listnames_for_user = mailman.extract_listname_from_list( + lists_for_user) for list_ in MailingList.objects.order_by('name'): - if list_.name not in all_privates or list_.name in lists_for_user: + if list_.name not in all_privates\ + or list_.name in listnames_for_user: context['lists'].append(( list_.name, mailman.get_list_description(list_.name), -- libgit2 0.21.2