diff options
| author | Mark Sapiro | 2016-10-20 17:44:25 -0700 |
|---|---|---|
| committer | Mark Sapiro | 2016-10-20 17:44:25 -0700 |
| commit | d1954d1705a987524bb25ecb8cdbace6de56fa5b (patch) | |
| tree | 42be0d51780d6f27aa897f278da5b7022b3a47c5 | |
| parent | f0fcc8b74472c8361ac58b2c4a17b6dd4d1f109d (diff) | |
| download | mailman-d1954d1705a987524bb25ecb8cdbace6de56fa5b.tar.gz mailman-d1954d1705a987524bb25ecb8cdbace6de56fa5b.tar.zst mailman-d1954d1705a987524bb25ecb8cdbace6de56fa5b.zip | |
| -rw-r--r-- | src/mailman/rest/domains.py | 33 |
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""" |
