diff options
| author | Barry Warsaw | 2009-12-28 07:37:25 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2009-12-28 07:37:25 -0500 |
| commit | ba2c7550b005255f75aaf3396f908cc3ead10032 (patch) | |
| tree | 13b4c6338aaf2542b530e11e7e4ed130b675579c | |
| parent | 7174e2fc80c296a71496b177b53205e8f4508feb (diff) | |
| download | mailman-ba2c7550b005255f75aaf3396f908cc3ead10032.tar.gz mailman-ba2c7550b005255f75aaf3396f908cc3ead10032.tar.zst mailman-ba2c7550b005255f75aaf3396f908cc3ead10032.zip | |
| -rw-r--r-- | src/mailman/app/membership.py | 3 | ||||
| -rw-r--r-- | src/mailman/interfaces/member.py | 1 | ||||
| -rw-r--r-- | src/mailman/rest/configure.zcml | 14 | ||||
| -rw-r--r-- | src/mailman/rest/docs/membership.txt | 42 |
4 files changed, 58 insertions, 2 deletions
diff --git a/src/mailman/app/membership.py b/src/mailman/app/membership.py index 09ecf3a8b..cf7bb2419 100644 --- a/src/mailman/app/membership.py +++ b/src/mailman/app/membership.py @@ -36,7 +36,8 @@ from mailman.core.i18n import _ from mailman.email.message import OwnerNotification from mailman.email.validate import validate from mailman.interfaces.member import ( - AlreadySubscribedError, MemberRole, MembershipIsBannedError) + AlreadySubscribedError, MemberRole, MembershipIsBannedError, + NotAMemberError) from mailman.interfaces.usermanager import IUserManager diff --git a/src/mailman/interfaces/member.py b/src/mailman/interfaces/member.py index 66cf61581..6fe4f32ca 100644 --- a/src/mailman/interfaces/member.py +++ b/src/mailman/interfaces/member.py @@ -78,6 +78,7 @@ class MembershipError(MailmanError): """Base exception for all membership errors.""" +@error_status(400) class AlreadySubscribedError(MembershipError): """The member is already subscribed to the mailing list with this role.""" diff --git a/src/mailman/rest/configure.zcml b/src/mailman/rest/configure.zcml index 5bff5d563..cf08b331e 100644 --- a/src/mailman/rest/configure.zcml +++ b/src/mailman/rest/configure.zcml @@ -51,6 +51,20 @@ name="index.html" /> + <!-- + XXX 2009-12-28 Why is this necessary? NotAMemberError is decorated with + @error_status(400) so it /should/ already be adaptable to + WebServiceExceptionView. For some reason though rest/membership.txt fails + without this. + --> + <adapter + for="mailman.interfaces.member.NotAMemberError + lazr.restful.simple.Request" + provides="zope.interface.Interface" + factory="lazr.restful.error.WebServiceExceptionView" + name="index.html" + /> + <utility factory="mailman.rest.configuration.AdminWebServiceConfiguration" provides="lazr.restful.interfaces.IWebServiceConfiguration" diff --git a/src/mailman/rest/docs/membership.txt b/src/mailman/rest/docs/membership.txt index 42c6bb242..4628e6af2 100644 --- a/src/mailman/rest/docs/membership.txt +++ b/src/mailman/rest/docs/membership.txt @@ -188,7 +188,7 @@ created for her. ... 'address': 'eperson@example.com', ... 'real_name': 'Elly Person', ... }) - http_etag: "a0213c9ff485ef3d24a6e2cc8ee68ed147f05398" + http_etag: ... resource_type_link: http://localhost:8001/3.0/#member self_link: http://localhost:8001/3.0/lists/alpha@example.com/member/eperson@example.com @@ -229,3 +229,43 @@ Elly is no longer a member of the mailing list. >>> set(member.mailing_list for member in elly.memberships.members) set([]) + + +Corner cases +============ + +For some reason Elly tries to join a mailing list that does not exist. + + >>> dump_json('http://localhost:8001/3.0/members', { + ... 'ws.op': 'join', + ... 'fqdn_listname': 'beta@example.com', + ... 'address': 'eperson@example.com', + ... 'real_name': 'Elly Person', + ... }) + Traceback (most recent call last): + ... + HTTPError: HTTP Error 400: Bad Request + +Then, she tries to leave a mailing list that does not exist. + + >>> dump_json('http://localhost:8001/3.0/members', { + ... 'ws.op': 'leave', + ... 'fqdn_listname': 'beta@example.com', + ... 'address': 'eperson@example.com', + ... 'real_name': 'Elly Person', + ... }) + Traceback (most recent call last): + ... + HTTPError: HTTP Error 400: Bad Request + +For some reason, Elly tries to leave the mailing list again, but she's already +been unsubscribed. + + >>> dump_json('http://localhost:8001/3.0/members', { + ... 'ws.op': 'leave', + ... 'fqdn_listname': 'alpha@example.com', + ... 'address': 'eperson@example.com', + ... }) + Traceback (most recent call last): + ... + HTTPError: HTTP Error 400: Bad Request |
