diff options
| author | Barry Warsaw | 2014-08-12 19:00:44 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2014-08-12 19:00:44 -0400 |
| commit | 61ad6fde0a9cff213a347838f19878a7b52f5466 (patch) | |
| tree | daa43402eed6d9adf8e40c4d077249c46129d962 /src/mailman/rest/addresses.py | |
| parent | 826261effa9d74b8ecdf1247e9ebba75fa3b2baa (diff) | |
| download | mailman-61ad6fde0a9cff213a347838f19878a7b52f5466.tar.gz mailman-61ad6fde0a9cff213a347838f19878a7b52f5466.tar.zst mailman-61ad6fde0a9cff213a347838f19878a7b52f5466.zip | |
Diffstat (limited to 'src/mailman/rest/addresses.py')
| -rw-r--r-- | src/mailman/rest/addresses.py | 66 |
1 files changed, 37 insertions, 29 deletions
diff --git a/src/mailman/rest/addresses.py b/src/mailman/rest/addresses.py index 92772d6f3..6e9eb8872 100644 --- a/src/mailman/rest/addresses.py +++ b/src/mailman/rest/addresses.py @@ -27,6 +27,8 @@ __all__ = [ ] +import falcon + from operator import attrgetter from restish import http, resource from zope.component import getUtility @@ -34,7 +36,9 @@ from zope.component import getUtility from mailman.interfaces.address import ( ExistingAddressError, InvalidEmailAddressError) from mailman.interfaces.usermanager import IUserManager -from mailman.rest.helpers import CollectionMixin, etag, no_content, path_to +from mailman.rest.helpers import ( + BadRequest, CollectionMixin, NotFound, child, etag, path_not_found, + path_to) from mailman.rest.members import MemberCollection from mailman.rest.preferences import Preferences from mailman.rest.validator import Validator @@ -42,7 +46,7 @@ from mailman.utilities.datetime import now -class _AddressBase(resource.Resource, CollectionMixin): +class _AddressBase(CollectionMixin): """Shared base class for address representations.""" def _resource_as_dict(self, address): @@ -72,11 +76,11 @@ class _AddressBase(resource.Resource, CollectionMixin): class AllAddresses(_AddressBase): """The addresses.""" - @resource.GET() - def collection(self, request): + def on_get(self, request, response): """/addresses""" resource = self._make_collection(request) - return http.ok([], etag(resource)) + response.status = falcon.HTTP_200 + response.body = etag(resource) @@ -88,14 +92,13 @@ class _VerifyResource(resource.Resource): self._action = action assert action in ('verify', 'unverify') - @resource.POST() - def verify(self, request): + def on_post(self, request, response): # We don't care about the POST data, just do the action. if self._action == 'verify' and self._address.verified_on is None: self._address.verified_on = now() elif self._action == 'unverify': self._address.verified_on = None - return no_content() + response.status = falcon.HTTP_204 class AnAddress(_AddressBase): @@ -109,20 +112,21 @@ class AnAddress(_AddressBase): """ self._address = getUtility(IUserManager).get_address(email) - @resource.GET() - def address(self, request): + def on_get(self, request, response): """Return a single address.""" if self._address is None: - return http.not_found() - return http.ok([], self._resource_as_json(self._address)) + path_not_found(request, response) + else: + response.status = falcon.HTTP_200 + response.body = self._resource_as_json(self._address) - @resource.child() + @child() def memberships(self, request, segments): """/addresses/<email>/memberships""" if len(segments) != 0: - return http.bad_request() + return BadRequest(), [] if self._address is None: - return http.not_found() + return NotFound(), [] return AddressMemberships(self._address) @resource.child() @@ -137,23 +141,23 @@ class AnAddress(_AddressBase): 'addresses/{0}'.format(self._address.email)) return child, [] - @resource.child() + @child() def verify(self, request, segments): """/addresses/<email>/verify""" if len(segments) != 0: - return http.bad_request() + return BadRequest(), [] if self._address is None: - return http.not_found() + return NotFound(), [] child = _VerifyResource(self._address, 'verify') return child, [] - @resource.child() + @child() def unverify(self, request, segments): """/addresses/<email>/verify""" if len(segments) != 0: - return http.bad_request() + return BadRequest(), [] if self._address is None: - return http.not_found() + return NotFound(), [] child = _VerifyResource(self._address, 'unverify') return child, [] @@ -171,20 +175,23 @@ class UserAddresses(_AddressBase): return sorted(self._user.addresses, key=attrgetter('original_email')) - @resource.GET() - def collection(self, request): + def on_get(self, request, response): """/addresses""" - resource = self._make_collection(request) - return http.ok([], etag(resource)) + if self._user is None: + path_not_found(request, response) + else: + response.status = falcon.HTTP_200 + resource = self._make_collection(request) + response.body = etag(resource) - @resource.POST() - def create(self, request): + def on_post(self, request, response): """POST to /addresses Add a new address to the user record. """ if self._user is None: - return http.not_found() + path_not_found(request, response) + return user_manager = getUtility(IUserManager) validator = Validator(email=unicode, display_name=unicode, @@ -201,7 +208,8 @@ class UserAddresses(_AddressBase): # Link the address to the current user and return it. address.user = self._user location = path_to('addresses/{0}'.format(address.email)) - return http.created(location, [], None) + response.status = falcon.HTTP_201 + response.location = location |
