summaryrefslogtreecommitdiff
path: root/src/mailman/rest/domains.py
diff options
context:
space:
mode:
authorMark Sapiro2016-10-20 17:44:25 -0700
committerMark Sapiro2016-10-20 17:44:25 -0700
commitd1954d1705a987524bb25ecb8cdbace6de56fa5b (patch)
tree42be0d51780d6f27aa897f278da5b7022b3a47c5 /src/mailman/rest/domains.py
parentf0fcc8b74472c8361ac58b2c4a17b6dd4d1f109d (diff)
downloadmailman-d1954d1705a987524bb25ecb8cdbace6de56fa5b.tar.gz
mailman-d1954d1705a987524bb25ecb8cdbace6de56fa5b.tar.zst
mailman-d1954d1705a987524bb25ecb8cdbace6de56fa5b.zip
Diffstat (limited to 'src/mailman/rest/domains.py')
-rw-r--r--src/mailman/rest/domains.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/mailman/rest/domains.py b/src/mailman/rest/domains.py
index 7f54e8905..931b34775 100644
--- a/src/mailman/rest/domains.py
+++ b/src/mailman/rest/domains.py
@@ -71,6 +71,39 @@ class ADomain(_DomainBase):
else:
no_content(response)
+ def patch_put(self, request, response, is_optional):
+ domain = getUtility(IDomainManager).get(self._domain)
+ if domain is None:
+ not_found(response)
+ kws = {'mail_host': str,
+ 'description': str,
+ 'owner': list_of_strings_validator,
+ 'mailing_lists': list_of_strings_validator}
+ if is_optional:
+ # For a PATCH, all attributes are optional.
+ kws['_optional'] = kws.keys()
+ try:
+ validator = Validator(**kws)
+ values = validator(request)
+ except ValueError as error:
+ bad_request(response, str(error))
+ if ('email_host' in values and
+ values['email_host'] != domain.email_host):
+ reason = "PATCH/PUT can't change email_host"
+ bad_request(response, reason.encode('utf-8'))
+ else:
+ for k, v in values.items():
+ setattr(domain, k, v)
+ no_content(response)
+
+ def on_put(self, request, response):
+ """Update all the domain except mail_host"""
+ self.patch_put(request, response, is_optional=False)
+
+ def on_patch(self, request, response):
+ """Patch some domain attributes."""
+ self.patch_put(request, response, is_optional=True)
+
@child()
def lists(self, context, segments):
"""/domains/<domain>/lists"""