30
30
from restish import http, resource
32
32
from mailman.interfaces.member import DeliveryMode, DeliveryStatus
33
from mailman.rest.helpers import PATCH, etag, no_content, path_to
33
from mailman.rest.helpers import (
34
GetterSetter, PATCH, etag, no_content, path_to)
34
35
from mailman.rest.validator import (
35
36
Validator, enum_validator, language_validator)
72
73
resource['self_link'] = path_to(
73
74
'{0}/preferences'.format(self._base_url))
74
75
return http.ok([], etag(resource))
78
79
class Preferences(ReadOnlyPreferences):
82
83
if self._parent is None:
83
84
return http.not_found()
85
acknowledge_posts=as_boolean,
86
delivery_mode=enum_validator(DeliveryMode),
87
delivery_status=enum_validator(DeliveryStatus),
88
preferred_language=language_validator,
89
receive_list_copy=as_boolean,
90
receive_own_postings=as_boolean,
86
acknowledge_posts=GetterSetter(as_boolean),
87
delivery_mode=GetterSetter(enum_validator(DeliveryMode)),
88
delivery_status=GetterSetter(enum_validator(DeliveryStatus)),
89
preferred_language=GetterSetter(language_validator),
90
receive_list_copy=GetterSetter(as_boolean),
91
receive_own_postings=GetterSetter(as_boolean),
93
94
# For a PUT, all attributes are optional.
94
95
kws['_optional'] = kws.keys()
96
values = Validator(**kws)(request)
97
Validator(**kws).update(self._parent, request)
97
98
except ValueError as error:
98
99
return http.bad_request([], str(error))
99
for key, value in values.items():
100
setattr(self._parent, key, value)
101
100
return no_content()