diff options
| author | Barry Warsaw | 2013-08-27 22:14:44 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2013-08-27 22:14:44 -0400 |
| commit | 26c3adb4f457cfc41751aa0203efbb3582adeb2d (patch) | |
| tree | 90973bea29478795792cf36feec8cab6d4525d61 | |
| parent | c175a7036261383b8e3440b5995886674f3f4d7c (diff) | |
| parent | 0120c079ed8c9a9b0b1bc5d8341ac2ec1a8638d3 (diff) | |
| download | mailman-26c3adb4f457cfc41751aa0203efbb3582adeb2d.tar.gz mailman-26c3adb4f457cfc41751aa0203efbb3582adeb2d.tar.zst mailman-26c3adb4f457cfc41751aa0203efbb3582adeb2d.zip | |
31 files changed, 47 insertions, 41 deletions
@@ -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/docs/NEWS.rst b/src/mailman/docs/NEWS.rst index 9de710829..a2b599cbc 100644 --- a/src/mailman/docs/NEWS.rst +++ b/src/mailman/docs/NEWS.rst @@ -17,6 +17,7 @@ Development * Mailman 3 no longer uses ``zc.buildout`` and tests are now run by the ``nose2`` test runner. See ``src/mailman/docs/START.rst`` for details on how to build Mailman and run the test suite. + * Use the ``enum34`` package instead of ``flufl.enum``. REST ---- 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, |
