diff options
Diffstat (limited to 'src/mailman/rest/listconf.py')
| -rw-r--r-- | src/mailman/rest/listconf.py | 26 |
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), ) |
