diff options
| author | Barry Warsaw | 2016-04-03 00:19:42 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2016-04-03 00:19:42 -0400 |
| commit | 6921b9926253be8062aac8805f192be54f55dafd (patch) | |
| tree | 58e7f1bf1e2f3ce58e808758543529c66734f03e | |
| parent | bbf49fb32d55efae759cd1c86287d80358346782 (diff) | |
| download | mailman-6921b9926253be8062aac8805f192be54f55dafd.tar.gz mailman-6921b9926253be8062aac8805f192be54f55dafd.tar.zst mailman-6921b9926253be8062aac8805f192be54f55dafd.zip | |
API consistency.
| -rw-r--r-- | src/mailman/rest/addresses.py | 10 | ||||
| -rw-r--r-- | src/mailman/rest/bans.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/domains.py | 12 | ||||
| -rw-r--r-- | src/mailman/rest/header_matches.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/lists.py | 54 | ||||
| -rw-r--r-- | src/mailman/rest/members.py | 34 | ||||
| -rw-r--r-- | src/mailman/rest/post_moderation.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/root.py | 4 | ||||
| -rw-r--r-- | src/mailman/rest/sub_moderation.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/wsgiapp.py | 7 |
10 files changed, 65 insertions, 64 deletions
diff --git a/src/mailman/rest/addresses.py b/src/mailman/rest/addresses.py index 1cf2d2f41..4624db379 100644 --- a/src/mailman/rest/addresses.py +++ b/src/mailman/rest/addresses.py @@ -115,7 +115,7 @@ class AnAddress(_AddressBase): no_content(response) @child() - def memberships(self, request, segments): + def memberships(self, context, segments): """/addresses/<email>/memberships""" if len(segments) != 0: return NotFound(), [] @@ -124,7 +124,7 @@ class AnAddress(_AddressBase): return AddressMemberships(self._address) @child() - def preferences(self, request, segments): + def preferences(self, context, segments): """/addresses/<email>/preferences""" if len(segments) != 0: return NotFound(), [] @@ -136,7 +136,7 @@ class AnAddress(_AddressBase): return child, [] @child() - def verify(self, request, segments): + def verify(self, context, segments): """/addresses/<email>/verify""" if len(segments) != 0: return BadRequest(), [] @@ -146,7 +146,7 @@ class AnAddress(_AddressBase): return child, [] @child() - def unverify(self, request, segments): + def unverify(self, context, segments): """/addresses/<email>/verify""" if len(segments) != 0: return BadRequest(), [] @@ -156,7 +156,7 @@ class AnAddress(_AddressBase): return child, [] @child() - def user(self, request, segments): + def user(self, context, segments): """/addresses/<email>/user""" if self._address is None: return NotFound(), [] diff --git a/src/mailman/rest/bans.py b/src/mailman/rest/bans.py index 70a61cc73..ccd88d9b4 100644 --- a/src/mailman/rest/bans.py +++ b/src/mailman/rest/bans.py @@ -108,5 +108,5 @@ class BannedEmails(_BannedBase, CollectionMixin): created(response, self._location(email)) @child(r'^(?P<email>[^/]+)') - def email(self, request, segments, **kw): + def email(self, context, segments, **kw): return BannedEmail(self._mlist, kw['email']) diff --git a/src/mailman/rest/domains.py b/src/mailman/rest/domains.py index dbf9f94c1..2b335797e 100644 --- a/src/mailman/rest/domains.py +++ b/src/mailman/rest/domains.py @@ -73,7 +73,7 @@ class ADomain(_DomainBase): no_content(response) @child() - def lists(self, request, segments): + def lists(self, context, segments): """/domains/<domain>/lists""" if len(segments) == 0: domain = getUtility(IDomainManager).get(self._domain) @@ -84,7 +84,7 @@ class ADomain(_DomainBase): return BadRequest(), [] @child() - def owners(self, request, segments): + def owners(self, context, segments): """/domains/<domain>/owners""" if len(segments) == 0: domain = getUtility(IDomainManager).get(self._domain) @@ -99,7 +99,7 @@ class ADomain(_DomainBase): class AllDomains(_DomainBase): """The domains.""" - def on_post(self, request, response): + def on_post(self, context, response): """Create a new domain.""" domain_manager = getUtility(IDomainManager) try: @@ -109,7 +109,7 @@ class AllDomains(_DomainBase): owner=list_of_strings_validator, _optional=( 'description', 'base_url', 'owner')) - values = validator(request) + values = validator(context) # For consistency, owners are passed in as multiple `owner` keys, # but .add() requires an `owners` keyword. Match impedence. owners = values.pop('owner', None) @@ -122,7 +122,7 @@ class AllDomains(_DomainBase): location = self.api.path_to('domains/{}'.format(domain.mail_host)) created(response, location) - def on_get(self, request, response): + def on_get(self, context, response): """/domains""" - resource = self._make_collection(request) + resource = self._make_collection(context) okay(response, etag(resource)) diff --git a/src/mailman/rest/header_matches.py b/src/mailman/rest/header_matches.py index 07a1f2c1c..a9ccd2e35 100644 --- a/src/mailman/rest/header_matches.py +++ b/src/mailman/rest/header_matches.py @@ -168,5 +168,5 @@ class HeaderMatches(_HeaderMatchBase, CollectionMixin): no_content(response) @child(r'^(?P<position>\d+)') - def header_match(self, request, segments, **kw): + def header_match(self, context, segments, **kw): return HeaderMatch(self._mlist, int(kw['position'])) diff --git a/src/mailman/rest/lists.py b/src/mailman/rest/lists.py index c26e4702a..192a9f41e 100644 --- a/src/mailman/rest/lists.py +++ b/src/mailman/rest/lists.py @@ -150,55 +150,55 @@ class AList(_ListBase): return AMember(context['api'], member.member_id) @child(roster_matcher) - def roster(self, request, segments, role): + def roster(self, context, segments, role): """Return the collection of all a mailing list's members.""" if self._mlist is None: return NotFound(), [] return MembersOfList(self._mlist, role) @child(config_matcher) - def config(self, request, segments, attribute=None): + def config(self, context, segments, attribute=None): """Return a mailing list configuration object.""" if self._mlist is None: return NotFound(), [] return ListConfiguration(self._mlist, attribute) @child() - def held(self, request, segments): + def held(self, context, segments): """Return a list of held messages for the mailing list.""" if self._mlist is None: return NotFound(), [] return HeldMessages(self._mlist) @child() - def requests(self, request, segments): + def requests(self, context, segments): """Return a list of subscription/unsubscription requests.""" if self._mlist is None: return NotFound(), [] return SubscriptionRequests(self._mlist) @child() - def archivers(self, request, segments): + def archivers(self, context, segments): """Return a representation of mailing list archivers.""" if self._mlist is None: return NotFound(), [] return ListArchivers(self._mlist) @child() - def digest(self, request, segments): + def digest(self, context, segments): if self._mlist is None: return NotFound(), [] return ListDigest(self._mlist) @child() - def bans(self, request, segments): + def bans(self, context, segments): """Return a collection of mailing list's banned addresses.""" if self._mlist is None: return NotFound(), [] return BannedEmails(self._mlist) @child(r'^header-matches') - def header_matches(self, request, segments): + def header_matches(self, context, segments): """Return a collection of mailing list's header matches.""" if self._mlist is None: return NotFound(), [] @@ -209,13 +209,13 @@ class AList(_ListBase): class AllLists(_ListBase): """The mailing lists.""" - def on_post(self, request, response): + def on_post(self, context, response): """Create a new mailing list.""" try: validator = Validator(fqdn_listname=str, style_name=str, _optional=('style_name',)) - mlist = create_list(**validator(request)) + mlist = create_list(**validator(context)) except ListAlreadyExistsError: bad_request(response, b'Mailing list exists') except BadDomainSpecificationError as error: @@ -225,9 +225,9 @@ class AllLists(_ListBase): location = self.api.path_to('lists/{0}'.format(mlist.list_id)) created(response, location) - def on_get(self, request, response): + def on_get(self, context, response): """/lists""" - resource = self._make_collection(request) + resource = self._make_collection(context) okay(response, etag(resource)) @@ -240,10 +240,10 @@ class MembersOfList(MemberCollection): self._mlist = mailing_list self._role = role - def _get_collection(self, request): + def _get_collection(self, context): """See `CollectionMixin`.""" # Overrides _MemberBase._get_collection() because we only want to - # return the members from the requested roster. + # return the members from the contexted roster. return getUtility(ISubscriptionService).find_members( list_id=self._mlist.list_id, role=self._role) @@ -256,12 +256,12 @@ class ListsForDomain(_ListBase): def __init__(self, domain): self._domain = domain - def on_get(self, request, response): + def on_get(self, context, response): """/domains/<domain>/lists""" - resource = self._make_collection(request) + resource = self._make_collection(context) okay(response, etag(resource)) - def _get_collection(self, request): + def _get_collection(self, context): """See `CollectionMixin`.""" return list(self._domain.mailing_lists) @@ -290,14 +290,14 @@ class ListArchivers: def __init__(self, mlist): self._mlist = mlist - def on_get(self, request, response): + def on_get(self, context, response): """Get all the archiver statuses.""" archiver_set = IListArchiverSet(self._mlist) resource = {archiver.name: archiver.is_enabled for archiver in archiver_set.archivers} okay(response, etag(resource)) - def patch_put(self, request, response, is_optional): + def patch_put(self, context, response, is_optional): archiver_set = IListArchiverSet(self._mlist) kws = {archiver.name: ArchiverGetterSetter(self._mlist) for archiver in archiver_set.archivers} @@ -305,19 +305,19 @@ class ListArchivers: # For a PATCH, all attributes are optional. kws['_optional'] = kws.keys() try: - Validator(**kws).update(self._mlist, request) + Validator(**kws).update(self._mlist, context) except ValueError as error: bad_request(response, str(error)) else: no_content(response) - def on_put(self, request, response): + def on_put(self, context, response): """Update all the archiver statuses.""" - self.patch_put(request, response, is_optional=False) + self.patch_put(context, response, is_optional=False) - def on_patch(self, request, response): + def on_patch(self, context, response): """Patch some archiver statueses.""" - self.patch_put(request, response, is_optional=True) + self.patch_put(context, response, is_optional=True) @public @@ -327,20 +327,20 @@ class ListDigest: def __init__(self, mlist): self._mlist = mlist - def on_get(self, request, response): + def on_get(self, context, response): resource = dict( next_digest_number=self._mlist.next_digest_number, volume=self._mlist.volume, ) okay(response, etag(resource)) - def on_post(self, request, response): + def on_post(self, context, response): try: validator = Validator( send=as_boolean, bump=as_boolean, _optional=('send', 'bump')) - values = validator(request) + values = validator(context) except ValueError as error: bad_request(response, str(error)) return diff --git a/src/mailman/rest/members.py b/src/mailman/rest/members.py index b9461fdaa..2a75973db 100644 --- a/src/mailman/rest/members.py +++ b/src/mailman/rest/members.py @@ -120,7 +120,7 @@ class AMember(_MemberBase): okay(response, self._resource_as_json(self._member)) @child() - def preferences(self, request, segments): + def preferences(self, context, segments): """/members/<id>/preferences""" if len(segments) != 0: return NotFound(), [] @@ -132,7 +132,7 @@ class AMember(_MemberBase): return child, [] @child() - def all(self, request, segments): + def all(self, context, segments): """/members/<id>/all/preferences""" if len(segments) == 0: return NotFound(), [] @@ -144,7 +144,7 @@ class AMember(_MemberBase): self.api.from_uuid(self._member.member_id))) return child, [] - def on_delete(self, request, response): + def on_delete(self, context, response): """Delete the member (i.e. unsubscribe).""" # Leaving a list is a bit different than deleting a moderator or # owner. Handle the former case first. For now too, we will not send @@ -159,7 +159,7 @@ class AMember(_MemberBase): self._member.unsubscribe() no_content(response) - def on_patch(self, request, response): + def on_patch(self, context, response): """Patch the membership. This is how subscription changes are done. @@ -173,7 +173,7 @@ class AMember(_MemberBase): delivery_mode=enum_validator(DeliveryMode), moderation_action=enum_validator(Action), _optional=('address', 'delivery_mode', 'moderation_action'), - )(request) + )(context) except ValueError as error: bad_request(response, str(error)) return @@ -199,7 +199,7 @@ class AMember(_MemberBase): class AllMembers(_MemberBase): """The members.""" - def on_post(self, request, response): + def on_post(self, context, response): """Create a new member.""" try: validator = Validator( @@ -213,7 +213,7 @@ class AllMembers(_MemberBase): pre_approved=bool, _optional=('delivery_mode', 'display_name', 'role', 'pre_verified', 'pre_confirmed', 'pre_approved')) - arguments = validator(request) + arguments = validator(context) except ValueError as error: bad_request(response, str(error)) return @@ -338,9 +338,9 @@ class AllMembers(_MemberBase): location = self.api.path_to('members/{}'.format(member_id)) created(response, location) - def on_get(self, request, response): + def on_get(self, context, response): """/members""" - resource = self._make_collection(request) + resource = self._make_collection(context) okay(response, etag(resource)) @@ -352,7 +352,7 @@ class _FoundMembers(MemberCollection): self._members = members self.api = api - def _get_collection(self, request): + def _get_collection(self, context): """See `CollectionMixin`.""" return self._members @@ -361,13 +361,13 @@ class _FoundMembers(MemberCollection): class FindMembers(_MemberBase): """/members/find""" - def on_get(self, request, response): - return self._find(request, response) + def on_get(self, context, response): + return self._find(context, response) - def on_post(self, request, response): - return self._find(request, response) + def on_post(self, context, response): + return self._find(context, response) - def _find(self, request, response): + def _find(self, context, response): """Find a member""" service = getUtility(ISubscriptionService) validator = Validator( @@ -379,7 +379,7 @@ class FindMembers(_MemberBase): count=int, _optional=('list_id', 'subscriber', 'role', 'page', 'count')) try: - data = validator(request) + data = validator(context) except ValueError as error: bad_request(response, str(error)) else: @@ -389,4 +389,4 @@ class FindMembers(_MemberBase): data.pop('count', None) members = service.find_members(**data) resource = _FoundMembers(members, self.api) - okay(response, etag(resource._make_collection(request))) + okay(response, etag(resource._make_collection(context))) diff --git a/src/mailman/rest/post_moderation.py b/src/mailman/rest/post_moderation.py index a020b3350..fc38af359 100644 --- a/src/mailman/rest/post_moderation.py +++ b/src/mailman/rest/post_moderation.py @@ -152,5 +152,5 @@ class HeldMessages(_HeldMessageBase, CollectionMixin): okay(response, etag(resource)) @child(r'^(?P<id>[^/]+)') - def message(self, request, segments, **kw): + def message(self, context, segments, **kw): return HeldMessage(self._mlist, kw['id']) diff --git a/src/mailman/rest/root.py b/src/mailman/rest/root.py index c07be5388..289b714dd 100644 --- a/src/mailman/rest/root.py +++ b/src/mailman/rest/root.py @@ -256,7 +256,7 @@ class TopLevel: def templates(self, context, segments): """/<api>/templates/<fqdn_listname>/<template>/[<language>] - Use content negotiation to request language and suffix (content-type). + Use content negotiation to context language and suffix (content-type). """ if len(segments) == 3: fqdn_listname, template, language = segments @@ -268,7 +268,7 @@ class TopLevel: mlist = getUtility(IListManager).get(fqdn_listname) if mlist is None: return NotFound(), [] - # XXX dig out content-type from request. + # XXX dig out content-type from context. content_type = None return TemplateFinder( fqdn_listname, template, language, content_type) diff --git a/src/mailman/rest/sub_moderation.py b/src/mailman/rest/sub_moderation.py index 033f95317..f2ec122f6 100644 --- a/src/mailman/rest/sub_moderation.py +++ b/src/mailman/rest/sub_moderation.py @@ -132,5 +132,5 @@ class SubscriptionRequests(_ModerationBase, CollectionMixin): okay(response, etag(resource)) @child(r'^(?P<token>[^/]+)') - def subscription(self, request, segments, **kw): + def subscription(self, context, segments, **kw): return IndividualRequest(self._mlist, kw['token']) diff --git a/src/mailman/rest/wsgiapp.py b/src/mailman/rest/wsgiapp.py index 766c4de03..c0beb4d5d 100644 --- a/src/mailman/rest/wsgiapp.py +++ b/src/mailman/rest/wsgiapp.py @@ -78,9 +78,9 @@ class AdminWebServiceWSGIRequestHandler(WSGIRequestHandler): class Middleware: """Falcon middleware object for Mailman's REST API. - This does two things. It sets the API version on the resource object so - that it is acceptable to all http mapped methods, and it verifies that the - proper authentication has been performed. + This does two things. It sets the API version on the resource + object, and it verifies that the proper authentication has been + performed. """ def process_resource(self, request, response, resource, params): # Set this attribute on the resource right before it is dispatched to. @@ -118,6 +118,7 @@ class ObjectRouter: self._root = root def add_route(self, uri_template, method_map, resource): + # We don't need this method for object-based routing. raise NotImplementedError def find(self, uri): |
