diff options
Diffstat (limited to 'src/mailman/rest/users.py')
| -rw-r--r-- | src/mailman/rest/users.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/mailman/rest/users.py b/src/mailman/rest/users.py index 7413a8e19..54402096f 100644 --- a/src/mailman/rest/users.py +++ b/src/mailman/rest/users.py @@ -26,6 +26,7 @@ __all__ = [ ] +from operator import attrgetter from restish import http, resource from zope.component import getUtility @@ -122,3 +123,38 @@ class AUser(_UserBase): if self._user is None: return http.not_found() return http.ok([], self._resource_as_json(self._user)) + + @resource.child() + def addresses(self, request, segments): + """/users/<uid>/addresses""" + return _AllUserAddresses(self._user) + + + +class _AllUserAddresses(resource.Resource, CollectionMixin): + """All addresses that a user controls.""" + + def __init__(self, user): + self._user = user + super(_AllUserAddresses, self).__init__() + + def _resource_as_dict(self, address): + """See `CollectionMixin`.""" + return dict( + email=address.email, + original_email=address.original_email, + real_name=address.real_name, + registered_on=address.registered_on, + verified_on=address.verified_on, + ) + + def _get_collection(self, request): + """See `CollectionMixin`.""" + return sorted(self._user.addresses, + key=attrgetter('original_email')) + + @resource.GET() + def collection(self, request): + """/addresses""" + resource = self._make_collection(request) + return http.ok([], etag(resource)) |
