swagger-ize testcase-apis of testAPI
[releng.git] / utils / test / result_collection_api / resources / pod_handlers.py
1 from tornado_swagger_ui.tornado_swagger import swagger
2 from handlers import GenericApiHandler
3 from pod_models import Pod
4 from common.constants import HTTP_FORBIDDEN
5
6
7 class GenericPodHandler(GenericApiHandler):
8     def __init__(self, application, request, **kwargs):
9         super(GenericPodHandler, self).__init__(application, request, **kwargs)
10         self.table = 'pods'
11         self.table_cls = Pod
12
13
14 class PodCLHandler(GenericPodHandler):
15     @swagger.operation(nickname='list-all')
16     def get(self):
17         """
18             @description: list all pods
19             @return 200: list all pods, empty list is no pod exist
20             @rtype: L{Pods}
21         """
22         self._list()
23
24     @swagger.operation(nickname='create')
25     def post(self):
26         """
27             @description: create a pod
28             @param body: pod to be created
29             @type body: L{PodCreateRequest}
30             @in body: body
31             @rtype: L{Pod}
32             @return 200: pod is created.
33             @raise 403: pod already exists
34             @raise 400: post without body
35         """
36         def query(data):
37             return {'name': data.name}
38
39         def error(data):
40             message = '{} already exists as a pod'.format(data.name)
41             return HTTP_FORBIDDEN, message
42
43         db_check = [(self.table, False, query, error)]
44         self._create(db_check)
45
46
47 class PodGURHandler(GenericPodHandler):
48     @swagger.operation(nickname='get-one')
49     def get(self, pod_name):
50         """
51             @description: get a single pod by pod_name
52             @rtype: L{Pod}
53             @return 200: pod exist
54             @raise 404: pod not exist
55         """
56         query = dict()
57         query['name'] = pod_name
58         self._get_one(query)
59
60     def delete(self, pod_name):
61         """ Remove a POD
62
63         # check for an existing pod to be deleted
64         mongo_dict = yield self.db.pods.find_one(
65             {'name': pod_name})
66         pod = TestProject.pod(mongo_dict)
67         if pod is None:
68             raise HTTPError(HTTP_NOT_FOUND,
69                             "{} could not be found as a pod to be deleted"
70                             .format(pod_name))
71
72         # just delete it, or maybe save it elsewhere in a future
73         res = yield self.db.projects.remove(
74             {'name': pod_name})
75
76         self.finish_request(answer)
77         """
78         pass