summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Warsaw2016-04-03 00:19:42 -0400
committerBarry Warsaw2016-04-03 00:19:42 -0400
commit6921b9926253be8062aac8805f192be54f55dafd (patch)
tree58e7f1bf1e2f3ce58e808758543529c66734f03e
parentbbf49fb32d55efae759cd1c86287d80358346782 (diff)
downloadmailman-6921b9926253be8062aac8805f192be54f55dafd.tar.gz
mailman-6921b9926253be8062aac8805f192be54f55dafd.tar.zst
mailman-6921b9926253be8062aac8805f192be54f55dafd.zip
API consistency.
-rw-r--r--src/mailman/rest/addresses.py10
-rw-r--r--src/mailman/rest/bans.py2
-rw-r--r--src/mailman/rest/domains.py12
-rw-r--r--src/mailman/rest/header_matches.py2
-rw-r--r--src/mailman/rest/lists.py54
-rw-r--r--src/mailman/rest/members.py34
-rw-r--r--src/mailman/rest/post_moderation.py2
-rw-r--r--src/mailman/rest/root.py4
-rw-r--r--src/mailman/rest/sub_moderation.py2
-rw-r--r--src/mailman/rest/wsgiapp.py7
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):