diff options
Diffstat (limited to 'src/mailman/rest')
| -rw-r--r-- | src/mailman/rest/addresses.py | 2 | ||||
| -rw-r--r-- | src/mailman/rest/helpers.py | 4 | ||||
| -rw-r--r-- | src/mailman/rest/lists.py | 4 | ||||
| -rw-r--r-- | src/mailman/rest/moderation.py | 4 | ||||
| -rw-r--r-- | src/mailman/rest/validator.py | 10 |
5 files changed, 14 insertions, 10 deletions
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): |
