Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / pybind / mgr / restful / api / request.py
1 from pecan import expose, request, response
2 from pecan.rest import RestController
3
4 from restful import module
5 from restful.decorators import auth, lock, paginate
6
7
8 class RequestId(RestController):
9     def __init__(self, request_id):
10         self.request_id = request_id
11
12
13     @expose(template='json')
14     @auth
15     def get(self, **kwargs):
16         """
17         Show the information for the request id
18         """
19         request = filter(
20             lambda x: x.id == self.request_id,
21             module.instance.requests
22         )
23
24         if len(request) != 1:
25             response.status = 500
26             return {'message': 'Unknown request id "%s"' % str(self.request_id)}
27
28         request = request[0]
29         return request
30
31
32     @expose(template='json')
33     @auth
34     @lock
35     def delete(self, **kwargs):
36         """
37         Remove the request id from the database
38         """
39         for index in range(len(module.instance.requests)):
40             if module.instance.requests[index].id == self.request_id:
41                 return module.instance.requests.pop(index)
42
43         # Failed to find the job to cancel
44         response.status = 500
45         return {'message': 'No such request id'}
46
47
48
49 class Request(RestController):
50     @expose(template='json')
51     @paginate
52     @auth
53     def get(self, **kwargs):
54         """
55         List all the available requests
56         """
57         return module.instance.requests
58
59
60     @expose(template='json')
61     @auth
62     @lock
63     def delete(self, **kwargs):
64         """
65         Remove all the finished requests
66         """
67         num_requests = len(module.instance.requests)
68
69         module.instance.requests = filter(
70             lambda x: not x.is_finished(),
71             module.instance.requests
72         )
73
74         # Return the job statistics
75         return {
76             'cleaned': num_requests - len(module.instance.requests),
77             'remaining': len(module.instance.requests),
78         }
79
80
81     @expose(template='json')
82     @auth
83     def post(self, **kwargs):
84         """
85         Pass through method to create any request
86         """
87         return module.instance.submit_request([[request.json]], **kwargs)
88
89
90     @expose()
91     def _lookup(self, request_id, *remainder):
92         return RequestId(request_id), remainder