diff options
| author | Barry Warsaw | 2011-04-09 15:03:11 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2011-04-09 15:03:11 -0400 |
| commit | e8c3d2759aaf23be13a36b72c8cd99aa1fc901a0 (patch) | |
| tree | 299c553cb2dd84b096c7a067675e094fda3e057f /src/mailman/rest/users.py | |
| parent | 9bf23a2f5bc3c7a4f766f3c18f6cf8e42854185c (diff) | |
| download | mailman-e8c3d2759aaf23be13a36b72c8cd99aa1fc901a0.tar.gz mailman-e8c3d2759aaf23be13a36b72c8cd99aa1fc901a0.tar.zst mailman-e8c3d2759aaf23be13a36b72c8cd99aa1fc901a0.zip | |
Add /users/<uid>/addresses to get all the addresses registered to a user.
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)) |
