summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--setup.py2
-rw-r--r--src/mailman/app/moderator.py2
-rw-r--r--src/mailman/app/subscriptions.py2
-rw-r--r--src/mailman/bin/master.py2
-rw-r--r--src/mailman/commands/cli_members.py4
-rw-r--r--src/mailman/commands/cli_status.py2
-rw-r--r--src/mailman/database/schema/mm_20120407000000.py6
-rw-r--r--src/mailman/database/types.py8
-rw-r--r--src/mailman/interfaces/action.py2
-rw-r--r--src/mailman/interfaces/archiver.py2
-rw-r--r--src/mailman/interfaces/autorespond.py2
-rw-r--r--src/mailman/interfaces/bounce.py2
-rw-r--r--src/mailman/interfaces/chain.py2
-rw-r--r--src/mailman/interfaces/command.py2
-rw-r--r--src/mailman/interfaces/digests.py2
-rw-r--r--src/mailman/interfaces/mailinglist.py2
-rw-r--r--src/mailman/interfaces/member.py2
-rw-r--r--src/mailman/interfaces/mime.py2
-rw-r--r--src/mailman/interfaces/nntp.py2
-rw-r--r--src/mailman/interfaces/requests.py2
-rw-r--r--src/mailman/model/docs/autorespond.rst2
-rw-r--r--src/mailman/model/docs/membership.rst2
-rw-r--r--src/mailman/model/docs/users.rst3
-rw-r--r--src/mailman/rest/addresses.py2
-rw-r--r--src/mailman/rest/helpers.py4
-rw-r--r--src/mailman/rest/lists.py4
-rw-r--r--src/mailman/rest/moderation.py4
-rw-r--r--src/mailman/rest/validator.py10
-rw-r--r--src/mailman/rules/docs/moderation.rst2
-rw-r--r--src/mailman/utilities/importer.py2
30 files changed, 46 insertions, 41 deletions
diff --git a/setup.py b/setup.py
index 3e032f46c..f3fc7faaa 100644
--- a/setup.py
+++ b/setup.py
@@ -93,8 +93,8 @@ case second `m'. Any other spelling is incorrect.""",
'console_scripts' : list(scripts),
},
install_requires = [
+ 'enum34',
'flufl.bounce',
- 'flufl.enum',
'flufl.i18n',
'flufl.lock',
'httplib2',
diff --git a/src/mailman/app/moderator.py b/src/mailman/app/moderator.py
index d8603366a..59fcb0976 100644
--- a/src/mailman/app/moderator.py
+++ b/src/mailman/app/moderator.py
@@ -246,7 +246,7 @@ def handle_subscription(mlist, id, action, comment=None):
lang=getUtility(ILanguageManager)[data['language']])
elif action is Action.accept:
key, data = requestdb.get_request(id)
- delivery_mode = DeliveryMode(data['delivery_mode'])
+ delivery_mode = DeliveryMode[data['delivery_mode']]
address = data['address']
display_name = data['display_name']
language = getUtility(ILanguageManager)[data['language']]
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py
index 23e09ccc7..0995202b6 100644
--- a/src/mailman/app/subscriptions.py
+++ b/src/mailman/app/subscriptions.py
@@ -54,7 +54,7 @@ def _membership_sort_key(member):
The members are sorted first by unique list id, then by subscribed email
address, then by role.
"""
- return (member.list_id, member.address.email, int(member.role))
+ return (member.list_id, member.address.email, member.role.value)
diff --git a/src/mailman/bin/master.py b/src/mailman/bin/master.py
index 9e1bbd6c5..65737ad75 100644
--- a/src/mailman/bin/master.py
+++ b/src/mailman/bin/master.py
@@ -34,7 +34,7 @@ import socket
import logging
from datetime import timedelta
-from flufl.enum import Enum
+from enum import Enum
from flufl.lock import Lock, NotLockedError, TimeOutError
from lazr.config import as_boolean
diff --git a/src/mailman/commands/cli_members.py b/src/mailman/commands/cli_members.py
index 7e4b5ec88..37df55cd4 100644
--- a/src/mailman/commands/cli_members.py
+++ b/src/mailman/commands/cli_members.py
@@ -130,7 +130,7 @@ class Members:
DeliveryMode.mime_digests,
DeliveryMode.summary_digests]
elif args.digest is not None:
- digest_types = [DeliveryMode(args.digest + '_digests')]
+ digest_types = [DeliveryMode[args.digest + '_digests']]
else:
# Don't filter on digest type.
pass
@@ -140,7 +140,7 @@ class Members:
elif args.nomail == 'byadmin':
status_types = [DeliveryStatus.by_moderator]
elif args.nomail.startswith('by'):
- status_types = [DeliveryStatus('by_' + args.nomail[2:])]
+ status_types = [DeliveryStatus['by_' + args.nomail[2:]]]
elif args.nomail == 'enabled':
status_types = [DeliveryStatus.enabled]
elif args.nomail == 'unknown':
diff --git a/src/mailman/commands/cli_status.py b/src/mailman/commands/cli_status.py
index 1f4cc552a..8a5cf9bde 100644
--- a/src/mailman/commands/cli_status.py
+++ b/src/mailman/commands/cli_status.py
@@ -64,4 +64,4 @@ class Status:
message = _('GNU Mailman is in an unexpected state '
'($hostname != $fqdn_name)')
print(message)
- return int(status)
+ return status.value
diff --git a/src/mailman/database/schema/mm_20120407000000.py b/src/mailman/database/schema/mm_20120407000000.py
index 8855df5af..0b1e51386 100644
--- a/src/mailman/database/schema/mm_20120407000000.py
+++ b/src/mailman/database/schema/mm_20120407000000.py
@@ -67,11 +67,11 @@ def upgrade(database, store, version, module_path):
def archive_policy(archive, archive_private):
"""Convert archive and archive_private to archive_policy."""
if archive == 0:
- return int(ArchivePolicy.never)
+ return ArchivePolicy.never.value
elif archive_private == 1:
- return int(ArchivePolicy.private)
+ return ArchivePolicy.private.value
else:
- return int(ArchivePolicy.public)
+ return ArchivePolicy.public.value
diff --git a/src/mailman/database/types.py b/src/mailman/database/types.py
index 42f64a640..86d504ca3 100644
--- a/src/mailman/database/types.py
+++ b/src/mailman/database/types.py
@@ -32,7 +32,7 @@ from storm.variables import Variable
class _EnumVariable(Variable):
- """Storm variable for supporting flufl.enum.Enum types.
+ """Storm variable for supporting enum types.
To use this, make the database column a INTEGER.
"""
@@ -46,18 +46,18 @@ class _EnumVariable(Variable):
return None
if not from_db:
return value
- return self._enum[value]
+ return self._enum(value)
def parse_get(self, value, to_db):
if value is None:
return None
if not to_db:
return value
- return int(value)
+ return value.value
class Enum(SimpleProperty):
- """Custom Enum type for Storm supporting flufl.enum.Enums."""
+ """Custom type for Storm supporting enums."""
variable_class = _EnumVariable
diff --git a/src/mailman/interfaces/action.py b/src/mailman/interfaces/action.py
index 287d253f9..22a65d5e1 100644
--- a/src/mailman/interfaces/action.py
+++ b/src/mailman/interfaces/action.py
@@ -24,7 +24,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
diff --git a/src/mailman/interfaces/archiver.py b/src/mailman/interfaces/archiver.py
index 2182798ad..5f074503e 100644
--- a/src/mailman/interfaces/archiver.py
+++ b/src/mailman/interfaces/archiver.py
@@ -27,7 +27,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
diff --git a/src/mailman/interfaces/autorespond.py b/src/mailman/interfaces/autorespond.py
index 7c66d984f..acad717f1 100644
--- a/src/mailman/interfaces/autorespond.py
+++ b/src/mailman/interfaces/autorespond.py
@@ -30,7 +30,7 @@ __all__ = [
from datetime import timedelta
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
ALWAYS_REPLY = timedelta()
diff --git a/src/mailman/interfaces/bounce.py b/src/mailman/interfaces/bounce.py
index 4719553c4..8e7266687 100644
--- a/src/mailman/interfaces/bounce.py
+++ b/src/mailman/interfaces/bounce.py
@@ -28,7 +28,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Attribute, Interface
diff --git a/src/mailman/interfaces/chain.py b/src/mailman/interfaces/chain.py
index b4fd98bb2..9fffc2760 100644
--- a/src/mailman/interfaces/chain.py
+++ b/src/mailman/interfaces/chain.py
@@ -35,7 +35,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
diff --git a/src/mailman/interfaces/command.py b/src/mailman/interfaces/command.py
index 42a859f36..18a8024a8 100644
--- a/src/mailman/interfaces/command.py
+++ b/src/mailman/interfaces/command.py
@@ -28,7 +28,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
diff --git a/src/mailman/interfaces/digests.py b/src/mailman/interfaces/digests.py
index c00758f7a..416e18f13 100644
--- a/src/mailman/interfaces/digests.py
+++ b/src/mailman/interfaces/digests.py
@@ -25,7 +25,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
diff --git a/src/mailman/interfaces/mailinglist.py b/src/mailman/interfaces/mailinglist.py
index eb2a931f4..7beaf9c46 100644
--- a/src/mailman/interfaces/mailinglist.py
+++ b/src/mailman/interfaces/mailinglist.py
@@ -29,7 +29,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
from mailman.interfaces.member import MemberRole
diff --git a/src/mailman/interfaces/member.py b/src/mailman/interfaces/member.py
index ee609a0d9..b561a7571 100644
--- a/src/mailman/interfaces/member.py
+++ b/src/mailman/interfaces/member.py
@@ -36,7 +36,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
from mailman.core.errors import MailmanError
diff --git a/src/mailman/interfaces/mime.py b/src/mailman/interfaces/mime.py
index 629fc776b..549e6c3db 100644
--- a/src/mailman/interfaces/mime.py
+++ b/src/mailman/interfaces/mime.py
@@ -27,7 +27,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
diff --git a/src/mailman/interfaces/nntp.py b/src/mailman/interfaces/nntp.py
index 2246fff6e..03be8f11d 100644
--- a/src/mailman/interfaces/nntp.py
+++ b/src/mailman/interfaces/nntp.py
@@ -25,7 +25,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
diff --git a/src/mailman/interfaces/requests.py b/src/mailman/interfaces/requests.py
index 9f841a6a3..35de05100 100644
--- a/src/mailman/interfaces/requests.py
+++ b/src/mailman/interfaces/requests.py
@@ -30,7 +30,7 @@ __all__ = [
]
-from flufl.enum import Enum
+from enum import Enum
from zope.interface import Interface, Attribute
diff --git a/src/mailman/model/docs/autorespond.rst b/src/mailman/model/docs/autorespond.rst
index 3a9ad01b2..b2bf03ed9 100644
--- a/src/mailman/model/docs/autorespond.rst
+++ b/src/mailman/model/docs/autorespond.rst
@@ -90,7 +90,7 @@ You can also use the response set to get the date of the last response sent.
>>> response.address
<Address: aperson@example.com [not verified] at ...>
>>> response.response_type
- <EnumValue: Response.hold [int=1]>
+ <Response.hold: 1>
>>> response.date_sent
datetime.date(2005, 8, 1)
diff --git a/src/mailman/model/docs/membership.rst b/src/mailman/model/docs/membership.rst
index f257f25ce..eeba9b332 100644
--- a/src/mailman/model/docs/membership.rst
+++ b/src/mailman/model/docs/membership.rst
@@ -217,7 +217,7 @@ There is also a roster containing all the subscribers of a mailing list,
regardless of their role.
>>> def sortkey(member):
- ... return (member.address.email, int(member.role))
+ ... return (member.address.email, member.role.value)
>>> for member in sorted(mlist.subscribers.members, key=sortkey):
... print member.address.email, member.role
aperson@example.com MemberRole.member
diff --git a/src/mailman/model/docs/users.rst b/src/mailman/model/docs/users.rst
index 997f983b2..889fe46d1 100644
--- a/src/mailman/model/docs/users.rst
+++ b/src/mailman/model/docs/users.rst
@@ -332,8 +332,7 @@ membership role.
>>> len(members)
4
>>> def sortkey(member):
- ... return (member.address.email, member.mailing_list,
- ... int(member.role))
+ ... return member.address.email, member.mailing_list, member.role.value
>>> for member in sorted(members, key=sortkey):
... print member.address.email, member.mailing_list.list_id, \
... member.role
diff --git a/src/mailman/rest/addresses.py b/src/mailman/rest/addresses.py
index 2b0bf5890..2908fad57 100644
--- a/src/mailman/rest/addresses.py
+++ b/src/mailman/rest/addresses.py
@@ -178,7 +178,7 @@ class UserAddresses(_AddressBase):
def membership_key(member):
# Sort first by mailing list, then by address, then by role.
- return member.list_id, member.address.email, int(member.role)
+ return member.list_id, member.address.email, member.role.value
class AddressMemberships(MemberCollection):
diff --git a/src/mailman/rest/helpers.py b/src/mailman/rest/helpers.py
index 3a548cb10..7d911d42b 100644
--- a/src/mailman/rest/helpers.py
+++ b/src/mailman/rest/helpers.py
@@ -36,7 +36,7 @@ import hashlib
from cStringIO import StringIO
from datetime import datetime, timedelta
-from flufl.enum import Enum
+from enum import Enum
from lazr.config import as_boolean
from restish import http
from restish.http import Response
@@ -79,7 +79,7 @@ class ExtendedEncoder(json.JSONEncoder):
seconds = obj.seconds + obj.microseconds / 1000000.0
return '{0}d{1}s'.format(obj.days, seconds)
return '{0}d'.format(obj.days)
- elif hasattr(obj, 'enum') and issubclass(obj.enum, Enum):
+ elif isinstance(obj, Enum):
# It's up to the decoding validator to associate this name with
# the right Enum class.
return obj.name
diff --git a/src/mailman/rest/lists.py b/src/mailman/rest/lists.py
index 2a3c72bfd..32e22a76b 100644
--- a/src/mailman/rest/lists.py
+++ b/src/mailman/rest/lists.py
@@ -57,7 +57,7 @@ def member_matcher(request, segments):
return None
try:
role = MemberRole[segments[0]]
- except ValueError:
+ except KeyError:
# Not a valid role.
return None
# No more segments.
@@ -76,7 +76,7 @@ def roster_matcher(request, segments):
return None
try:
return (), dict(role=MemberRole[segments[1]]), ()
- except ValueError:
+ except KeyError:
# Not a valid role.
return None
diff --git a/src/mailman/rest/moderation.py b/src/mailman/rest/moderation.py
index c0dbe93b8..491807f38 100644
--- a/src/mailman/rest/moderation.py
+++ b/src/mailman/rest/moderation.py
@@ -60,7 +60,7 @@ class _ModerationBase:
resource.update(data)
# Check for a matching request type, and insert the type name into the
# resource.
- request_type = RequestType(resource.pop('_request_type'))
+ request_type = RequestType[resource.pop('_request_type')]
if request_type not in expected_request_types:
return None
resource['type'] = request_type.name
@@ -205,7 +205,7 @@ class MembershipChangeRequest(resource.Resource, _ModerationBase):
return http.not_found()
key, data = results
try:
- request_type = RequestType(data['_request_type'])
+ request_type = RequestType[data['_request_type']]
except ValueError:
return http.bad_request()
if request_type is RequestType.subscription:
diff --git a/src/mailman/rest/validator.py b/src/mailman/rest/validator.py
index c59bc53d8..2d178226f 100644
--- a/src/mailman/rest/validator.py
+++ b/src/mailman/rest/validator.py
@@ -48,9 +48,13 @@ class enum_validator:
self._enum_class = enum_class
def __call__(self, enum_value):
- # This will raise a ValueError if the enum value is unknown. Let that
- # percolate up.
- return self._enum_class[enum_value]
+ # This will raise a KeyError if the enum value is unknown. The
+ # Validator API requires turning this into a ValueError.
+ try:
+ return self._enum_class[enum_value]
+ except KeyError as exception:
+ # Retain the error message.
+ raise ValueError(exception.message)
def subscriber_validator(subscriber):
diff --git a/src/mailman/rules/docs/moderation.rst b/src/mailman/rules/docs/moderation.rst
index eacc1cff3..3000f23a2 100644
--- a/src/mailman/rules/docs/moderation.rst
+++ b/src/mailman/rules/docs/moderation.rst
@@ -124,7 +124,7 @@ cperson is neither a member, nor a nonmember of the mailing list.
::
>>> def memberkey(member):
- ... return member.mailing_list, member.address.email, int(member.role)
+ ... return member.mailing_list, member.address.email, member.role.value
>>> dump_list(mlist.members.members, key=memberkey)
<Member: Anne Person <aperson@example.com>
diff --git a/src/mailman/utilities/importer.py b/src/mailman/utilities/importer.py
index 20941bfd6..f5aa8d10a 100644
--- a/src/mailman/utilities/importer.py
+++ b/src/mailman/utilities/importer.py
@@ -28,6 +28,7 @@ __all__ = [
import sys
import datetime
+from mailman.interfaces.action import FilterAction
from mailman.interfaces.autorespond import ResponseAction
from mailman.interfaces.digests import DigestFrequency
from mailman.interfaces.mailinglist import Personalization, ReplyToMunging
@@ -47,6 +48,7 @@ TYPES = dict(
bounce_info_stale_after=seconds_to_delta,
bounce_you_are_disabled_warnings_interval=seconds_to_delta,
digest_volume_frequency=DigestFrequency,
+ filter_action=FilterAction,
newsgroup_moderation=NewsgroupModeration,
personalize=Personalization,
reply_goes_to_list=ReplyToMunging,