~unity-2d-team/unity-2d/Shell-MultiMonitor

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