diff options
| author | J08nY | 2017-06-01 20:53:53 +0200 |
|---|---|---|
| committer | J08nY | 2017-06-17 19:35:47 +0200 |
| commit | f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85 (patch) | |
| tree | 13d95e1277272bc810eacde6bb00acbf03ecaee2 /src/mailman/testing/plugin.py | |
| parent | 7abfcbfe1f41b915dd4419ae6be857deb49f04db (diff) | |
| download | mailman-f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85.tar.gz mailman-f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85.tar.zst mailman-f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85.zip | |
Diffstat (limited to 'src/mailman/testing/plugin.py')
| -rw-r--r-- | src/mailman/testing/plugin.py | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/src/mailman/testing/plugin.py b/src/mailman/testing/plugin.py index 75667844a..a8b001406 100644 --- a/src/mailman/testing/plugin.py +++ b/src/mailman/testing/plugin.py @@ -15,22 +15,87 @@ # You should have received a copy of the GNU General Public License along with # GNU Mailman. If not, see <http://www.gnu.org/licenses/>. -"""Example plugin with hooks for testing purposes.""" +"""Example plugin with hooks and REST for testing purposes.""" +from mailman.config import config from mailman.interfaces.plugin import IPlugin +from mailman.rest.helpers import bad_request, child, etag, no_content, okay +from mailman.rest.validator import Validator from public import public from zope.interface import implementer @public +class GoodREST: + + def on_get(self, request, response): + okay(response, etag({'good': True})) + + +@public +class BadREST: + + def on_get(self, request, response): + bad_request(response, etag({'good': False})) + + +@public +class CountingREST: + + def __init__(self): + self._plugin = config.plugins['example'] + + def on_get(self, request, response): + okay(response, etag({'count': self._plugin.counter})) + + def on_post(self, request, response): + try: + counter = Validator(count=int)(request) + self._plugin.counter = counter['count'] + except ValueError as error: + bad_request(response, str(error)) + else: + no_content(response) + + def on_delete(self, request, response): + self._plugin.counter = 0 + no_content(response) + + +@public +class RESTExample: + + def on_get(self, request, response): + okay(response, etag({'example-plugin-reply': 'yes'})) + + def on_post(self, request, response): + bad_request(response) + + @child() + def good(self, context, segments): + return GoodREST(), [] + + @child() + def bad(self, context, segments): + return BadREST(), [] + + @child() + def count(self, context, segments): + return CountingREST(), [] + + +@public @implementer(IPlugin) class ExamplePlugin: def __init__(self): - pass + self.counter = 0 def pre_hook(self): pass def post_hook(self): pass + + def rest_object(self): + return RESTExample() |
