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 /src/mailman/rest | |
| parent | 40cbfaa6443887e215fff6d3b7854e2f9ee03ce4 (diff) | |
| download | mailman-e4167544b41f065b29a27ef5f9e27283557185f2.tar.gz mailman-e4167544b41f065b29a27ef5f9e27283557185f2.tar.zst mailman-e4167544b41f065b29a27ef5f9e27283557185f2.zip | |
Make the members request pageable
Diffstat (limited to 'src/mailman/rest')
| -rw-r--r-- | src/mailman/rest/lists.py | 20 | ||||
| -rw-r--r-- | src/mailman/rest/members.py | 6 |
2 files changed, 14 insertions, 12 deletions
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))) |
