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