File: webapi.py

package info (click to toggle)
py-lmdb 1.4.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,832 kB
  • sloc: ansic: 11,932; python: 4,646; makefile: 128
file content (66 lines) | stat: -rw-r--r-- 1,798 bytes parent folder | download | duplicates (3)
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

from __future__ import absolute_import
import pkg_resources
import keystore.web
import twisted.web.server


def read_resource(path):
    return pkg_resources.resource_string('keystore', path)


class KeyResource(keystore.web.DeferrableResource):
    isLeaf = True

    def __init__(self, store):
        keystore.web.DeferrableResource.__init__(self)
        self.store = store

    def _get_done(self, value):
        if value is None:
            return keystore.web.Response(status=404)
        else:
            return keystore.web.Response(body=value)

    def render_GET(self, request):
        d = self.store.get(request.path)
        d.addCallback(self._get_done)
        return d

    def render_PUT(self, request):
        value = request.content.read()
        d = self.store.put(request.path, value)
        d.addCallback(lambda _: keystore.web.Response(status=202))
        return d

    def render_DELETE(self, request):
        d = self.store.delete(request.path)
        d.addCallback(lambda _: keystore.web.Response(status=204))
        return d


class NamespaceResource(keystore.web.DeferrableResource):
    isLeaf = False

    def __init__(self, store):
        keystore.web.DeferrableResource.__init__(self)
        self.store = store

    def getChild(self, path, request):
        return KeyResource(self.store)


class StaticResource(twisted.web.resource.Resource):
    def __init__(self, pkg_path):
        twisted.web.resource.Resource.__init__(self)
        self.data = read_resource(pkg_path)

    def render(self, request):
        return self.data


def create_site(store):
    root = twisted.web.resource.Resource()
    root.putChild('', StaticResource('static/index.html'))
    root.putChild('db', NamespaceResource(store))
    return twisted.web.server.Site(root)