summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mailman/rest/docs/membership.rst22
-rw-r--r--src/mailman/rest/members.py14
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)))