summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mailman/rest/lists.py2
-rw-r--r--src/mailman/rest/members.py18
-rw-r--r--src/mailman/rest/root.py33
3 files changed, 20 insertions, 33 deletions
diff --git a/src/mailman/rest/lists.py b/src/mailman/rest/lists.py
index 192a9f41e..51da341d1 100644
--- a/src/mailman/rest/lists.py
+++ b/src/mailman/rest/lists.py
@@ -147,7 +147,7 @@ class AList(_ListBase):
email, self._mlist.list_id, role)
if member is None:
return NotFound(), []
- return AMember(context['api'], member.member_id)
+ return AMember(member.member_id)
@child(roster_matcher)
def roster(self, context, segments, role):
diff --git a/src/mailman/rest/members.py b/src/mailman/rest/members.py
index 2a75973db..26c79aa0e 100644
--- a/src/mailman/rest/members.py
+++ b/src/mailman/rest/members.py
@@ -101,16 +101,13 @@ class MemberCollection(_MemberBase):
class AMember(_MemberBase):
"""A member."""
- def __init__(self, api, member_id):
+ def __init__(self, member_id):
# The member_id is either the member's UUID or the string
# representation of the member's UUID.
- self.api = api
service = getUtility(ISubscriptionService)
- try:
- self._member = service.get_member(api.to_uuid(member_id))
- except ValueError:
- # The string argument could not be converted to a UUID.
- self._member = None
+ self._member_id = member_id
+ self._member = (None if member_id is None
+ else service.get_member(member_id))
def on_get(self, request, response):
"""Return a single member end-point."""
@@ -126,7 +123,7 @@ class AMember(_MemberBase):
return NotFound(), []
if self._member is None:
return NotFound(), []
- member_id = self.api.from_uuid(self._member.member_id)
+ member_id = context['api'].from_uuid(self._member_id)
child = Preferences(
self._member.preferences, 'members/{}'.format(member_id))
return child, []
@@ -138,10 +135,9 @@ class AMember(_MemberBase):
return NotFound(), []
if self._member is None:
return NotFound(), []
+ member_id = context['api'].from_uuid(self._member_id)
child = ReadOnlyPreferences(
- self._member,
- 'members/{}/all'.format(
- self.api.from_uuid(self._member.member_id)))
+ self._member, 'members/{}/all'.format(member_id))
return child, []
def on_delete(self, context, response):
diff --git a/src/mailman/rest/root.py b/src/mailman/rest/root.py
index 289b714dd..6fad5bc7c 100644
--- a/src/mailman/rest/root.py
+++ b/src/mailman/rest/root.py
@@ -175,14 +175,10 @@ class TopLevel:
/<api>/addresses/<email>
"""
if len(segments) == 0:
- resource = AllAddresses()
- resource.api = context['api']
- return resource
+ return AllAddresses()
else:
email = segments.pop(0)
- resource = AnAddress(email)
- resource.api = context['api']
- return resource, segments
+ return AnAddress(email), segments
@child()
def domains(self, context, segments):
@@ -215,32 +211,29 @@ class TopLevel:
@child()
def members(self, context, segments):
"""/<api>/members"""
- api = context['api']
if len(segments) == 0:
- resource = AllMembers()
- resource.api = api
- return resource
+ return AllMembers()
# Either the next segment is the string "find" or a member id. They
# cannot collide.
segment = segments.pop(0)
if segment == 'find':
resource = FindMembers()
- resource.api = api
else:
- resource = AMember(api, segment)
+ try:
+ member_id = context['api'].to_uuid(segment)
+ except ValueError:
+ member_id = None
+ resource = AMember(member_id)
return resource, segments
@child()
def users(self, context, segments):
"""/<api>/users"""
- api = context['api']
if len(segments) == 0:
- resource = AllUsers()
- resource.api = api
- return resource
+ return AllUsers()
else:
- user_id = segments.pop(0)
- return AUser(api, user_id), segments
+ user_identifier = segments.pop(0)
+ return AUser(context['api'], user_identifier), segments
@child()
def owners(self, context, segments):
@@ -248,9 +241,7 @@ class TopLevel:
if len(segments) != 0:
return BadRequest(), []
else:
- resource = ServerOwners()
- resource.api = context['api']
- return resource, segments
+ return ServerOwners(), segments
@child()
def templates(self, context, segments):