1 from datetime import datetime, timedelta
3 from bson.objectid import ObjectId
4 from tornado.web import HTTPError
6 from common.constants import HTTP_BAD_REQUEST, HTTP_NOT_FOUND
7 from resources.handlers import GenericApiHandler
8 from resources.result_models import TestResult
9 from tornado_swagger_ui.tornado_swagger import swagger
12 class GenericResultHandler(GenericApiHandler):
13 def __init__(self, application, request, **kwargs):
14 super(GenericResultHandler, self).__init__(application,
17 self.table = self.db_results
18 self.table_cls = TestResult
21 class ResultsCLHandler(GenericResultHandler):
22 @swagger.operation(nickname="list-all")
25 @description: list all test results consist with query
26 @return 200: all test results consist with query,
27 empty list if no result is found
28 @rtype: L{TestResults}
31 pod_arg = self.get_query_argument("pod", None)
32 project_arg = self.get_query_argument("project", None)
33 case_arg = self.get_query_argument("case", None)
34 version_arg = self.get_query_argument("version", None)
35 installer_arg = self.get_query_argument("installer", None)
36 build_tag_arg = self.get_query_argument("build_tag", None)
37 scenario_arg = self.get_query_argument("scenario", None)
38 criteria_arg = self.get_query_argument("criteria", None)
39 period_arg = self.get_query_argument("period", None)
40 trust_indicator_arg = self.get_query_argument("trust_indicator", None)
42 if project_arg is not None:
43 query["project_name"] = project_arg
45 if case_arg is not None:
46 query["case_name"] = case_arg
48 if pod_arg is not None:
49 query["pod_name"] = pod_arg
51 if version_arg is not None:
52 query["version"] = version_arg
54 if installer_arg is not None:
55 query["installer"] = installer_arg
57 if build_tag_arg is not None:
58 query["build_tag"] = build_tag_arg
60 if scenario_arg is not None:
61 query["scenario"] = scenario_arg
63 if criteria_arg is not None:
64 query["criteria_tag"] = criteria_arg
66 if trust_indicator_arg is not None:
67 query["trust_indicator_arg"] = trust_indicator_arg
69 if period_arg is not None:
71 period_arg = int(period_arg)
73 raise HTTPError(HTTP_BAD_REQUEST)
76 period = datetime.now() - timedelta(days=period_arg)
77 obj = {"$gte": str(period)}
78 query["creation_date"] = obj
82 @swagger.operation(nickname="create")
85 @description: create a test result
86 @param body: result to be created
87 @type body: L{ResultCreateRequest}
90 @return 200: result is created.
91 @raise 404: pod/project/testcase not exist
92 @raise 400: body/pod_name/project_name/case_name not provided
95 return {'name': data.pod_name}
98 message = 'Could not find pod [{}]'.format(data.pod_name)
99 return HTTP_NOT_FOUND, message
101 def project_query(data):
102 return {'name': data.project_name}
104 def project_error(data):
105 message = 'Could not find project [{}]'.format(data.project_name)
106 return HTTP_NOT_FOUND, message
108 def testcase_query(data):
109 return {'project_name': data.project_name, 'name': data.case_name}
111 def testcase_error(data):
112 message = 'Could not find testcase [{}] in project [{}]'\
113 .format(data.case_name, data.project_name)
114 return HTTP_NOT_FOUND, message
116 miss_checks = ['pod_name', 'project_name', 'case_name']
117 db_checks = [('pods', True, pod_query, pod_error),
118 ('projects', True, project_query, project_error),
119 ('testcases', True, testcase_query, testcase_error)]
120 self._create(miss_checks, db_checks)
123 class ResultsGURHandler(GenericResultHandler):
124 @swagger.operation(nickname='get-one')
125 def get(self, result_id):
127 @description: get a single result by result_id
128 @rtype: L{TestResult}
129 @return 200: test result exist
130 @raise 404: test result not exist
133 query["_id"] = ObjectId(result_id)