summaryrefslogtreecommitdiff
path: root/src/mailman/plugins/testing/example/rest.py
blob: 1d83ce2cd6ed82ffc7719fabdf30effed4deee59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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 Yes:
    def on_get(self, request, response):
        okay(response, etag(dict(yes=True)))


@public
class No:
    def on_get(self, request, response):
        bad_request(response, etag(dict(no=False)))


@public
class NumberEcho:
    def __init__(self):
        self._plugin = config.plugins['example']

    def on_get(self, request, response):
        okay(response, etag(dict(number=self._plugin.number)))

    def on_post(self, request, response):
        try:
            resource = Validator(number=int)(request)
            self._plugin.number = resource['number']
        except ValueError as error:
            bad_request(response, str(error))
        else:
            no_content(response)

    def on_delete(self, request, response):
        self._plugin.number = 0
        no_content(response)


@public
class RESTExample:
    def on_get(self, request, response):
        resource = {
            'my-name': 'example-plugin',
            'my-child-resources': 'yes, no, echo',
            }
        okay(response, etag(resource))

    @child()
    def yes(self, context, segments):
        return Yes(), []

    @child()
    def no(self, context, segments):
        return No(), []

    @child()
    def echo(self, context, segments):
        return NumberEcho(), []


@public
@implementer(IPlugin)
class ExamplePlugin:
    def __init__(self):
        self.number = 0

    def pre_hook(self):
        pass

    def post_hook(self):
        pass

    @property
    def resource(self):
        return RESTExample()