Abhilash Raj pushed to branch backport-mr-315 at mailman / Mailman Core
Commits:
0d1924fd by Barry Warsaw at 2017-10-31T18:17:42+00:00
Allow a list's acceptable aliases to be cleared via REST.
(cherry picked from commit 5963175fe5a579a60a15808009f0cb5010f478af)
- - - - -
4 changed files:
- src/mailman/docs/NEWS.rst
- src/mailman/rest/docs/listconf.rst
- src/mailman/rest/listconf.py
- src/mailman/rest/tests/test_listconf.py
Changes:
=====================================
src/mailman/docs/NEWS.rst
=====================================
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -12,6 +12,12 @@ Here is a history of user visible changes to Mailman.
=====
(201X-XX-XXX)
+REST
+----
+* Allow a mailing list's acceptable aliases to be cleared by calling
+ ``DELETE`` on the list's ``config/acceptable_aliases`` resource.
+ (Closes #394)
+
3.1.0 -- "Between The Wheels"
=============================
=====================================
src/mailman/rest/docs/listconf.rst
=====================================
--- a/src/mailman/rest/docs/listconf.rst
+++ b/src/mailman/rest/docs/listconf.rst
@@ -296,7 +296,7 @@ dictionary are ignored.
server: WSGIServer/...
status: 204
-Aliases are returned as a list on the ``aliases`` key.
+You can get all the mailing list's acceptable aliases through the REST API.
>>> response = call_http(
... 'http://localhost:9001/3.0/lists/'
@@ -315,6 +315,23 @@ The mailing list has its aliases set.
[email protected]
[email protected]
+The aliases can be removed by using ``DELETE``.
+
+ >>> response = call_http(
+ ... 'http://localhost:9001/3.0/lists/'
+ ... '[email protected]/config/acceptable_aliases',
+ ... method='DELETE')
+ content-length: 0
+ date: ...
+ server: WSGIServer/...
+ status: 204
+
+Now the mailing list has no aliases.
+
+ >>> aliases = IAcceptableAliasSet(mlist)
+ >>> print(len(list(aliases.aliases)))
+ 0
+
Header matches
--------------
=====================================
src/mailman/rest/listconf.py
=====================================
--- a/src/mailman/rest/listconf.py
+++ b/src/mailman/rest/listconf.py
@@ -329,3 +329,23 @@ class ListConfiguration:
bad_request(response, str(error))
else:
no_content(response)
+
+ def on_delete(self, request, response):
+ if self._attribute is None:
+ bad_request(
+ response, 'Cannot delete the list configuration itself')
+ return
+ if self._attribute not in VALIDATORS:
+ bad_request(
+ response, 'Read-only attribute: {}'.format(self._attribute))
+ return
+ # This kind of sucks because it doesn't scale if the list of attributes
+ # which can be deleted grows. So if we get too many we'll have to use
+ # a lookup table. For now, this is good enough.
+ if self._attribute != 'acceptable_aliases':
+ bad_request(
+ response, 'Attribute cannot be DELETEd: {}'.format(
+ self._attribute))
+ return
+ IAcceptableAliasSet(self._mlist).clear()
+ no_content(response)
=====================================
src/mailman/rest/tests/test_listconf.py
=====================================
--- a/src/mailman/rest/tests/test_listconf.py
+++ b/src/mailman/rest/tests/test_listconf.py
@@ -467,3 +467,31 @@ class TestConfiguration(unittest.TestCase):
dict(info=''),
'PATCH')
self.assertEqual(self._mlist.info, '')
+
+ def test_delete_top_level_listconf(self):
+ with self.assertRaises(HTTPError) as cm:
+ call_api('http://localhost:9001/3.0/lists/ant.example.com/config',
+ method='DELETE')
+ self.assertEqual(cm.exception.code, 400)
+ self.assertEqual(cm.exception.reason,
+ 'Cannot delete the list configuration itself')
+
+ def test_delete_read_only_attribute(self):
+ with self.assertRaises(HTTPError) as cm:
+ call_api(
+ 'http://localhost:9001/3.0/lists/ant.example.com/'
+ 'config/post_id',
+ method='DELETE')
+ self.assertEqual(cm.exception.code, 400)
+ self.assertEqual(cm.exception.reason,
+ 'Read-only attribute: post_id')
+
+ def test_delete_undeletable_attribute(self):
+ with self.assertRaises(HTTPError) as cm:
+ call_api(
+ 'http://localhost:9001/3.0/lists/ant.example.com/'
+ 'config/administrivia',
+ method='DELETE')
+ self.assertEqual(cm.exception.code, 400)
+ self.assertEqual(cm.exception.reason,
+ 'Attribute cannot be DELETEd: administrivia')
View it on GitLab:
https://gitlab.com/mailman/mailman/commit/0d1924fdbe7a0025784885df6ed5b94883fb42f2
---
View it on GitLab:
https://gitlab.com/mailman/mailman/commit/0d1924fdbe7a0025784885df6ed5b94883fb42f2
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org