]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/web/magic_folder.py
5d2f3e5ed9c7df6cd0627823d0509f3f886bcb7e
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / web / magic_folder.py
1 import simplejson
2
3 from nevow import rend, url, tags as T
4 from nevow.inevow import IRequest
5
6 from allmydata.web.common import getxmlfile, get_arg, WebError
7
8
9 class MagicFolderWebApi(rend.Page):
10     """
11     I provide the web-based API for Magic Folder status etc.
12     """
13
14     def __init__(self, client):
15         ##rend.Page.__init__(self, storage)
16         super(MagicFolderWebApi, self).__init__(client)
17         self.client = client
18
19     def _render_json(self, req):
20         req.setHeader("content-type", "application/json")
21
22         data = []
23         for item in self.client._magic_folder.uploader.get_status():
24             d = dict(
25                 path=item.relpath_u,
26                 status=item.status_history()[-1][0],
27                 kind='upload',
28             )
29             for (status, ts) in item.status_history():
30                 d[status + '_at'] = ts
31             d['percent_done'] = item.progress.progress
32             data.append(d)
33
34         for item in self.client._magic_folder.downloader.get_status():
35             d = dict(
36                 path=item.relpath_u,
37                 status=item.status_history()[-1][0],
38                 kind='download',
39             )
40             for (status, ts) in item.status_history():
41                 d[status + '_at'] = ts
42             d['percent_done'] = item.progress.progress
43             data.append(d)
44
45         return simplejson.dumps(data)
46
47     def renderHTTP(self, ctx):
48         req = IRequest(ctx)
49         t = get_arg(req, "t", None)
50
51         if t is None:
52             return rend.Page.renderHTTP(self, ctx)
53
54         t = t.strip()
55         if t == 'json':
56             return self._render_json(req)
57
58         raise WebError("'%s' invalid type for 't' arg" % (t,), 400)
59
60