diff options
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() |
