diff options
| author | Aurélien Bompard | 2015-12-15 19:40:15 +0100 |
|---|---|---|
| committer | Barry Warsaw | 2016-01-13 19:36:29 -0500 |
| commit | bbe2a437d2c1b369cc05abd0dae9305c36561202 (patch) | |
| tree | e2091f732751fe3a64b9bea3da38b255a8e91fd2 /src | |
| parent | 5a6344a8506ef6d2032b9c76e54b0a5c5b887e9a (diff) | |
| download | mailman-bbe2a437d2c1b369cc05abd0dae9305c36561202.tar.gz mailman-bbe2a437d2c1b369cc05abd0dae9305c36561202.tar.zst mailman-bbe2a437d2c1b369cc05abd0dae9305c36561202.zip | |
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))) |
