bugfix: query results failed due to using mutable list initiation
[releng.git] / utils / test / result_collection_api / resources / result_models.py
1 from tornado_swagger_ui.tornado_swagger import swagger
2
3
4 @swagger.model()
5 class ResultCreateRequest(object):
6     def __init__(self,
7                  pod_name=None,
8                  project_name=None,
9                  case_name=None,
10                  installer=None,
11                  version=None,
12                  start_date=None,
13                  stop_date=None,
14                  details=None,
15                  build_tag=None,
16                  scenario=None,
17                  criteria=None,
18                  trust_indicator=None):
19         self.pod_name = pod_name
20         self.project_name = project_name
21         self.case_name = case_name
22         self.installer = installer
23         self.version = version
24         self.start_date = start_date
25         self.stop_date = stop_date
26         self.details = details
27         self.build_tag = build_tag
28         self.scenario = scenario
29         self.criteria = criteria
30         self.trust_indicator = trust_indicator
31
32     def format(self):
33         return {
34             "pod_name": self.pod_name,
35             "project_name": self.project_name,
36             "case_name": self.case_name,
37             "installer": self.installer,
38             "version": self.version,
39             "start_date": self.start_date,
40             "stop_date": self.stop_date,
41             "details": self.details,
42             "build_tag": self.build_tag,
43             "scenario": self.scenario,
44             "criteria": self.criteria,
45             "trust_indicator": self.trust_indicator
46         }
47
48
49 @swagger.model()
50 class TestResult(object):
51     def __init__(self, _id=None, case_name=None, project_name=None,
52                  pod_name=None, installer=None, version=None,
53                  start_date=None, stop_date=None, details=None,
54                  build_tag=None, scenario=None, criteria=None,
55                  trust_indicator=None):
56         self._id = _id
57         self.case_name = case_name
58         self.project_name = project_name
59         self.pod_name = pod_name
60         self.installer = installer
61         self.version = version
62         self.start_date = start_date
63         self.stop_date = stop_date
64         self.details = details
65         self.build_tag = build_tag
66         self.scenario = scenario
67         self.criteria = criteria
68         self.trust_indicator = trust_indicator
69
70     @staticmethod
71     def from_dict(a_dict):
72
73         if a_dict is None:
74             return None
75
76         t = TestResult()
77         t._id = a_dict.get('_id')
78         t.case_name = a_dict.get('case_name')
79         t.pod_name = a_dict.get('pod_name')
80         t.project_name = a_dict.get('project_name')
81         t.description = a_dict.get('description')
82         t.start_date = str(a_dict.get('start_date'))
83         t.stop_date = str(a_dict.get('stop_date'))
84         t.details = a_dict.get('details')
85         t.version = a_dict.get('version')
86         t.installer = a_dict.get('installer')
87         t.build_tag = a_dict.get('build_tag')
88         t.scenario = a_dict.get('scenario')
89         t.criteria = a_dict.get('criteria')
90         # 0 < trust indicator < 1
91         # if bad value =>  set this indicator to 0
92         t.trust_indicator = a_dict.get('trust_indicator')
93         if t.trust_indicator is not None:
94             if isinstance(t.trust_indicator, (int, long, float)):
95                 if t.trust_indicator < 0:
96                     t.trust_indicator = 0
97                 elif t.trust_indicator > 1:
98                     t.trust_indicator = 1
99             else:
100                 t.trust_indicator = 0
101         else:
102             t.trust_indicator = 0
103         return t
104
105     def format(self):
106         return {
107             "case_name": self.case_name,
108             "project_name": self.project_name,
109             "pod_name": self.pod_name,
110             "description": self.description,
111             "start_date": str(self.start_date),
112             "stop_date": str(self.stop_date),
113             "version": self.version,
114             "installer": self.installer,
115             "details": self.details,
116             "build_tag": self.build_tag,
117             "scenario": self.scenario,
118             "criteria": self.criteria,
119             "trust_indicator": self.trust_indicator
120         }
121
122     def format_http(self):
123         return {
124             "_id": str(self._id),
125             "case_name": self.case_name,
126             "project_name": self.project_name,
127             "pod_name": self.pod_name,
128             "description": self.description,
129             "start_date": str(self.start_date),
130             "stop_date": str(self.stop_date),
131             "version": self.version,
132             "installer": self.installer,
133             "details": self.details,
134             "build_tag": self.build_tag,
135             "scenario": self.scenario,
136             "criteria": self.criteria,
137             "trust_indicator": self.trust_indicator
138         }
139
140
141 @swagger.model()
142 class TestResults(object):
143     """
144         @property results:
145         @ptype results: C{list} of L{TestResult}
146     """
147     def __init__(self):
148         self.results = list()
149
150     @staticmethod
151     def from_dict(a_dict):
152         if a_dict is None:
153             return None
154
155         res = TestResults()
156         for result in a_dict.get('results'):
157             res.results.append(TestResult.from_dict(result))
158         return res