diff options
| author | Aurélien Bompard | 2015-11-23 17:46:55 +0100 |
|---|---|---|
| committer | Barry Warsaw | 2016-01-06 18:55:56 -0500 |
| commit | e4167544b41f065b29a27ef5f9e27283557185f2 (patch) | |
| tree | 667f5d8c3f4d00dd7a6874578baf9d8fa9c8cf68 | |
| parent | 40cbfaa6443887e215fff6d3b7854e2f9ee03ce4 (diff) | |
| download | mailman-e4167544b41f065b29a27ef5f9e27283557185f2.tar.gz mailman-e4167544b41f065b29a27ef5f9e27283557185f2.tar.zst mailman-e4167544b41f065b29a27ef5f9e27283557185f2.zip | |
| -rw-r--r-- | src/mailman/app/docs/subscriptions.rst | 2 | ||||
| -rw-r--r-- | src/mailman/app/subscriptions.py | 2 | ||||
| -rw-r--r-- | src/mailman/app/tests/test_subscriptions.py | 16 | ||||
| -rw-r--r-- | src/mailman/commands/eml_membership.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/lists.py | 20 | ||||
| -rw-r--r-- | src/mailman/rest/members.py | 6 | ||||
| -rw-r--r-- | src/mailman/runners/tests/test_join.py | 2 |
7 files changed, 26 insertions, 24 deletions
diff --git a/src/mailman/app/docs/subscriptions.rst b/src/mailman/app/docs/subscriptions.rst index 2fc59d9a7..fa5d0edfe 100644 --- a/src/mailman/app/docs/subscriptions.rst +++ b/src/mailman/app/docs/subscriptions.rst @@ -102,7 +102,7 @@ a member of with her ``aperson@example.com`` address. There may be no matching memberships. - >>> service.find_members('dave@example.com') + >>> list(service.find_members('dave@example.com')) [] Memberships can also be searched for by user id. diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py index 8f6dd7cdc..861a12ec0 100644 --- a/src/mailman/app/subscriptions.py +++ b/src/mailman/app/subscriptions.py @@ -408,7 +408,7 @@ class SubscriptionService: q_user = q_user.filter(Member.role == role) # Do a UNION of the two queries, sort the result and generate Members. query = q_address.union(q_user).order_by(*order).from_self(Member) - return query.all() + return query def __iter__(self): for member in self.get_members(): diff --git a/src/mailman/app/tests/test_subscriptions.py b/src/mailman/app/tests/test_subscriptions.py index 229c85aa8..0eefbd62c 100644 --- a/src/mailman/app/tests/test_subscriptions.py +++ b/src/mailman/app/tests/test_subscriptions.py @@ -658,7 +658,7 @@ class TestSubscriptionService(unittest.TestCase): address = self._user_manager.create_address( 'anne@example.com', 'Anne Address') self._mlist.subscribe(address) - members = self._service.find_members('anne@example.com') + members = list(self._service.find_members('anne@example.com')) self.assertEqual(len(members), 1) self.assertEqual(members[0].address, address) @@ -671,7 +671,7 @@ class TestSubscriptionService(unittest.TestCase): user.preferred_address = address # Subscribe the address. self._mlist.subscribe(address) - members = self._service.find_members('anne@example.com') + members = list(self._service.find_members('anne@example.com')) self.assertEqual(len(members), 1) self.assertEqual(members[0].user, user) @@ -684,7 +684,7 @@ class TestSubscriptionService(unittest.TestCase): user.preferred_address = address # Subscribe the user. self._mlist.subscribe(user) - members = self._service.find_members('anne@example.com') + members = list(self._service.find_members('anne@example.com')) self.assertEqual(len(members), 1) self.assertEqual(members[0].user, user) @@ -702,7 +702,7 @@ class TestSubscriptionService(unittest.TestCase): # Subscribe the user. self._mlist.subscribe(user) # Search for the secondary address. - members = self._service.find_members('anne2@example.com') + members = list(self._service.find_members('anne2@example.com')) self.assertEqual(len(members), 1) self.assertEqual(members[0].user, user) @@ -723,7 +723,7 @@ class TestSubscriptionService(unittest.TestCase): # Subscribe the secondary address. self._mlist.subscribe(address_2) # Search for the primary address. - members = self._service.find_members('anne@example.com') + members = list(self._service.find_members('anne@example.com')) self.assertEqual(len(members), 0) def test_find_member_user_id(self): @@ -735,7 +735,7 @@ class TestSubscriptionService(unittest.TestCase): user.preferred_address = address # Subscribe the user. self._mlist.subscribe(user) - members = self._service.find_members(user.user_id) + members = list(self._service.find_members(user.user_id)) self.assertEqual(len(members), 1) self.assertEqual(members[0].user, user) @@ -759,7 +759,7 @@ class TestSubscriptionService(unittest.TestCase): address_3.user = user # Subscribe the secondary address only. self._mlist.subscribe(address_2) - members = self._service.find_members(user.user_id) + members = list(self._service.find_members(user.user_id)) self.assertEqual(len(members), 1) self.assertEqual(members[0].address, address_2) @@ -812,7 +812,7 @@ class TestSubscriptionService(unittest.TestCase): mlist1.subscribe(address_3, MemberRole.owner) # The results should be sorted first by list id, then by address, then # by member role. - members = self._service.find_members(user.user_id) + members = list(self._service.find_members(user.user_id)) self.assertEqual(len(members), 21) self.assertListEqual( [(m.list_id.partition('.')[0], diff --git a/src/mailman/commands/eml_membership.py b/src/mailman/commands/eml_membership.py index 49af269e4..a9dfe56e2 100644 --- a/src/mailman/commands/eml_membership.py +++ b/src/mailman/commands/eml_membership.py @@ -105,7 +105,7 @@ used. # matching memberships. members = getUtility(ISubscriptionService).find_members( email, mlist.list_id, MemberRole.member) - if len(members) > 0: + if members.count() > 0: print(_('$person is already a member'), file=results) return ContinueProcessing.yes subscriber = match_subscriber(email, display_name) diff --git a/src/mailman/rest/lists.py b/src/mailman/rest/lists.py index 10df71330..70f100f25 100644 --- a/src/mailman/rest/lists.py +++ b/src/mailman/rest/lists.py @@ -47,7 +47,7 @@ from mailman.rest.members import AMember, MemberCollection from mailman.rest.post_moderation import HeldMessages from mailman.rest.sub_moderation import SubscriptionRequests from mailman.rest.validator import Validator -from operator import attrgetter +from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound from zope.component import getUtility @@ -152,12 +152,14 @@ class AList(_ListBase): """Return a single member representation.""" if self._mlist is None: return NotFound(), [] - members = getUtility(ISubscriptionService).find_members( - email, self._mlist.list_id, role) - if len(members) == 0: + try: + the_member = getUtility(ISubscriptionService).find_members( + email, self._mlist.list_id, role).one() + except NoResultFound: return NotFound(), [] - assert len(members) == 1, 'Too many matches' - return AMember(request.context['api_version'], members[0].member_id) + except MultipleResultsFound: + raise AssertionError('Too many matches') + return AMember(request.context['api_version'], the_member.member_id) @child(roster_matcher) def roster(self, request, segments, role): @@ -240,9 +242,9 @@ class MembersOfList(MemberCollection): """See `CollectionMixin`.""" # Overrides _MemberBase._get_collection() because we only want to # return the members from the requested roster. - roster = self._mlist.get_roster(self._role) - address_of_member = attrgetter('address.email') - return list(sorted(roster.members, key=address_of_member)) + return getUtility(ISubscriptionService).find_members( + list_id=self._mlist.list_id, + role=self._role) class ListsForDomain(_ListBase): diff --git a/src/mailman/rest/members.py b/src/mailman/rest/members.py index 3b69042da..b41afe18a 100644 --- a/src/mailman/rest/members.py +++ b/src/mailman/rest/members.py @@ -363,8 +363,7 @@ class _FoundMembers(MemberCollection): def _get_collection(self, request): """See `CollectionMixin`.""" - address_of_member = attrgetter('address.email') - return list(sorted(self._members, key=address_of_member)) + return self._members class FindMembers(_MemberBase): @@ -379,9 +378,10 @@ class FindMembers(_MemberBase): role=enum_validator(MemberRole), _optional=('list_id', 'subscriber', 'role')) try: - members = service.find_members(**validator(request)) + data = validator(request) except ValueError as error: bad_request(response, str(error)) else: + members = service.find_members(**data) resource = _FoundMembers(members, self.api_version) okay(response, etag(resource._make_collection(request))) diff --git a/src/mailman/runners/tests/test_join.py b/src/mailman/runners/tests/test_join.py index 239d8e2ef..72bf97b23 100644 --- a/src/mailman/runners/tests/test_join.py +++ b/src/mailman/runners/tests/test_join.py @@ -167,7 +167,7 @@ class TestJoinWithDigests(unittest.TestCase): # digest deliveries. members = getUtility(ISubscriptionService).find_members( 'anne@example.org') - self.assertEqual(len(members), 1) + self.assertEqual(members.count(), 1) self.assertEqual(rmember, members[0]) return rmember |
