diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/rest/docs/membership.rst | 22 | ||||
| -rw-r--r-- | src/mailman/rest/members.py | 14 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/mailman/rest/docs/membership.rst b/src/mailman/rest/docs/membership.rst index 61ac2c33e..bd4a85eeb 100644 --- a/src/mailman/rest/docs/membership.rst +++ b/src/mailman/rest/docs/membership.rst @@ -626,6 +626,28 @@ Finally, we can search for a specific member given all three criteria. start: 0 total_size: 1 +Search can also be performed using HTTP GET requests. + + >>> dump_json('http://localhost:9001/3.0/members/find' + ... '?subscriber=cperson@example.com' + ... '&list_id=bee.example.com' + ... '&role=member' + ... ) + entry 0: + address: http://localhost:9001/3.0/addresses/cperson@example.com + delivery_mode: regular + email: cperson@example.com + http_etag: ... + list_id: bee.example.com + member_id: 2 + moderation_action: defer + role: member + self_link: http://localhost:9001/3.0/members/2 + user: http://localhost:9001/3.0/users/2 + http_etag: ... + start: 0 + total_size: 1 + Joining a mailing list ====================== diff --git a/src/mailman/rest/members.py b/src/mailman/rest/members.py index 517e55344..b7807271f 100644 --- a/src/mailman/rest/members.py +++ b/src/mailman/rest/members.py @@ -356,19 +356,31 @@ class _FoundMembers(MemberCollection): class FindMembers(_MemberBase): """/members/find""" + def on_get(self, request, response): + return self._find(request, response) + def on_post(self, request, response): + return self._find(request, response) + + def _find(self, request, response): """Find a member""" service = getUtility(ISubscriptionService) validator = Validator( list_id=str, subscriber=str, role=enum_validator(MemberRole), - _optional=('list_id', 'subscriber', 'role')) + # Expect pagination + page=int, + count=int, + _optional=('list_id', 'subscriber', 'role', 'page', 'count')) try: data = validator(request) except ValueError as error: bad_request(response, str(error)) else: + # Remove pagination query elements, it will be handled later. + data.pop('page', None) + data.pop('count', None) members = service.find_members(**data) resource = _FoundMembers(members, self.api) okay(response, etag(resource._make_collection(request))) |
