summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Warsaw2009-12-27 13:43:35 -0500
committerBarry Warsaw2009-12-27 13:43:35 -0500
commitf759cae372f4a9a48cf1c6851992f3ad1366fd04 (patch)
treea11b606b88153c4475c8289f024aba3cb5dc0860
parent16bf4d15972351c3f8dacc7f28c4cdb24a717e59 (diff)
downloadmailman-f759cae372f4a9a48cf1c6851992f3ad1366fd04.tar.gz
mailman-f759cae372f4a9a48cf1c6851992f3ad1366fd04.tar.zst
mailman-f759cae372f4a9a48cf1c6851992f3ad1366fd04.zip
-rw-r--r--src/mailman/docs/membership.txt11
-rw-r--r--src/mailman/rest/configure.zcml7
-rw-r--r--src/mailman/rest/docs/membership.txt31
-rw-r--r--src/mailman/rest/urls.py14
4 files changed, 56 insertions, 7 deletions
diff --git a/src/mailman/docs/membership.txt b/src/mailman/docs/membership.txt
index ef1675593..27d2d9552 100644
--- a/src/mailman/docs/membership.txt
+++ b/src/mailman/docs/membership.txt
@@ -1,3 +1,4 @@
+================
List memberships
================
@@ -55,7 +56,7 @@ When we create a mailing list, it starts out with no members...
Administrators
---------------
+==============
A mailing list's administrators are defined as union of the list's owners and
the list's moderators. We can add new owners or moderators to this list by
@@ -129,7 +130,7 @@ Now, both Anne and Ben are list administrators.
Members
--------
+=======
Similarly, list members are born of users being given the proper role. It's
more interesting here because these roles should have a preference which can
@@ -178,7 +179,7 @@ It's easy to make the list administrators members of the mailing list too.
Finding members
----------------
+===============
You can find the IMember object that is a member of a roster for a given text
email address by using an IRoster's .get_member() method.
@@ -205,7 +206,7 @@ is returned.
All subscribers
----------------
+===============
There is also a roster containing all the subscribers of a mailing list,
regardless of their role.
@@ -222,7 +223,7 @@ regardless of their role.
Double subscriptions
---------------------
+====================
It is an error to subscribe someone to a list with the same role twice.
diff --git a/src/mailman/rest/configure.zcml b/src/mailman/rest/configure.zcml
index 6a181f671..5bff5d563 100644
--- a/src/mailman/rest/configure.zcml
+++ b/src/mailman/rest/configure.zcml
@@ -37,6 +37,13 @@
/>
<adapter
+ for="mailman.interfaces.member.IMember
+ lazr.restful.simple.Request"
+ provides="zope.traversing.browser.interfaces.IAbsoluteURL"
+ factory="mailman.rest.urls.MemberURLMapper"
+ />
+
+ <adapter
for="zope.publisher.interfaces.NotFound
lazr.restful.simple.Request"
provides="zope.interface.Interface"
diff --git a/src/mailman/rest/docs/membership.txt b/src/mailman/rest/docs/membership.txt
index e1b60e084..b27abdeab 100644
--- a/src/mailman/rest/docs/membership.txt
+++ b/src/mailman/rest/docs/membership.txt
@@ -15,11 +15,38 @@ There are no mailing lists and no members yet.
We create a mailing list, which starts out with no members.
- >>> create_list('test-one@example.com')
- <mailing list "test-one@example.com" at ...>
+ >>> mlist_one = create_list('test-one@example.com')
>>> transaction.commit()
>>> dump_json('http://localhost:8001/3.0/members')
resource_type_link: http://localhost:8001/3.0/#members
start: None
total_size: 0
+
+
+Subscribers
+===========
+
+After Anne subscribes to the mailing list, her subscription is available via
+the REST interface.
+
+ >>> from mailman.interfaces.member import MemberRole
+ >>> from mailman.interfaces.usermanager import IUserManager
+ >>> from zope.component import getUtility
+ >>> user_manager = getUtility(IUserManager)
+
+ >>> anne = user_manager.create_user('aperson@example.com', 'Anne Person')
+ >>> anne_address = list(anne.addresses)[0]
+ >>> anne_address.subscribe(mlist_one, MemberRole.member)
+ <Member: Anne Person <aperson@example.com>
+ on test-one@example.com as MemberRole.member>
+ >>> transaction.commit()
+
+ >>> dump_json('http://localhost:8001/3.0/members')
+ entry 0:
+ http_etag: "a0213c9ff485ef3d24a6e2cc8ee68ed147f05398"
+ resource_type_link: http://localhost:8001/3.0/#member
+ self_link: http://localhost:8001/3.0/members/test-one@example.com/member/aperson@example.com
+ resource_type_link: http://localhost:8001/3.0/#members
+ start: 0
+ total_size: 1
diff --git a/src/mailman/rest/urls.py b/src/mailman/rest/urls.py
index 8f0409eb0..5a3b07500 100644
--- a/src/mailman/rest/urls.py
+++ b/src/mailman/rest/urls.py
@@ -117,3 +117,17 @@ class MailingListURLMapper(TopLevelURLMapper):
format_string = (
'{0.schema}://{0.hostname}:{0.port}/{0.version}/'
'lists/{0.context.fqdn_listname}')
+
+
+class MemberURLMapper(TopLevelURLMapper):
+ """Mapper of `IMember` to `IAbsoluteURL`."""
+
+ def __init__(self, context, request):
+ super(MemberURLMapper, self).__init__(context, request)
+ # Use a shorted version of the MemberRole string.
+ enum, dot, self.role = str(self.context.role).partition('.')
+
+ format_string = (
+ '{0.schema}://{0.hostname}:{0.port}/{0.version}/'
+ 'members/{0.context.mailing_list}/'
+ '{0.role}/{0.context.address.address}')