summaryrefslogtreecommitdiff
path: root/src/mailman/rest/listconf.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/rest/listconf.py')
-rw-r--r--src/mailman/rest/listconf.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/mailman/rest/listconf.py b/src/mailman/rest/listconf.py
index b62d34529..70f04999c 100644
--- a/src/mailman/rest/listconf.py
+++ b/src/mailman/rest/listconf.py
@@ -24,14 +24,17 @@ from mailman.interfaces.archiver import ArchivePolicy
from mailman.interfaces.autorespond import ResponseAction
from mailman.interfaces.digests import DigestFrequency
from mailman.interfaces.mailinglist import (
- DMARCMitigateAction, IAcceptableAliasSet, IMailingList, ReplyToMunging,
- SubscriptionPolicy)
+ DMARCMitigateAction, IAcceptableAliasSet, IMailingList, ReplyToMunging)
from mailman.interfaces.template import ITemplateManager
+from mailman.interfaces.workflows import ISubscriptionWorkflow
from mailman.rest.helpers import (
GetterSetter, bad_request, etag, no_content, not_found, okay)
from mailman.rest.validator import (
PatchValidator, ReadOnlyPATCHRequestError, UnknownPATCHRequestError,
- Validator, enum_validator, list_of_strings_validator)
+ Validator, enum_validator, list_of_strings_validator, policy_validator)
+from mailman.workflows.subscription import (
+ ConfirmModerationSubscriptionPolicy, ConfirmSubscriptionPolicy,
+ ModerationSubscriptionPolicy, OpenSubscriptionPolicy)
from public import public
from zope.component import getUtility
@@ -86,6 +89,20 @@ class URIAttributeMapper(GetterSetter):
getUtility(ITemplateManager).set(template_name, obj.list_id, value)
+class SubscriptionPolicyMapper(GetterSetter):
+
+ def get(self, obj, attribute):
+ assert IMailingList.providedBy(obj), obj
+ old_sub_map = {
+ OpenSubscriptionPolicy: 'open',
+ ConfirmSubscriptionPolicy: 'confirm',
+ ModerationSubscriptionPolicy: 'moderate',
+ ConfirmModerationSubscriptionPolicy: 'confirm_then_moderate'
+ }
+ cls = getattr(obj, attribute)
+ return old_sub_map.get(cls, cls.name)
+
+
# Additional validators for converting from web request strings to internal
# data types. See below for details.
@@ -179,7 +196,8 @@ ATTRIBUTES = dict(
request_address=GetterSetter(None),
send_welcome_message=GetterSetter(as_boolean),
subject_prefix=GetterSetter(str),
- subscription_policy=GetterSetter(enum_validator(SubscriptionPolicy)),
+ subscription_policy=SubscriptionPolicyMapper(
+ policy_validator(ISubscriptionWorkflow)),
volume=GetterSetter(None),
)