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
80
81
82
83
84
85
86
87
|
# Copyright (c) 2011 Canonical Ltd
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License along with this program. If not, see
# <http://www.gnu.org/licenses/>.
__metaclass__ = type
import json
import uuid
import web
from grackle.server.model import CassandraConnection
conn = None
class root:
def GET(self):
web.header('Content-Type', 'text/plain')
return (
'Service endpoint for Grackle.\n\n'
'When you want mail that was archived in Grackle, you can get it '
'from Grackle')
class archive:
def GET(self, name):
web.header('Content-Type', 'text/plain')
args = web.input()
if not getattr(args, 'op', None):
return self.index(name)
if args.op == 'get_messages':
return self.get_messages(name, args)
def POST(self, name):
data = web.data()
conn.add_message(name, data)
web.ctx.status = '201 Created'
def index(self, name):
return ('Service for archive %s.' % name)
def get_messages(self, name, args):
try:
count = int(args.count)
except (AttributeError, ValueError):
count = 10
order = getattr(args, 'order', '-date')
start = getattr(args, 'start', '')
if start:
start = uuid.UUID(start)
messages, next_memo = conn.get_messages(name, order, count, start)
return json.dumps({
'messages': messages,
'next_memo': next_memo,
})
urls = (
'/', 'root',
'/archive/(.+)', 'archive',
)
app = web.application(urls, globals(), autoreload=False)
if __name__ == "__main__":
import logging
logging.basicConfig(
format='%(asctime)s:%(levelname)s:%(name)s:%(message)s',
level=logging.DEBUG)
conn = CassandraConnection('grackle', ['localhost:9160'])
app.run()
|