update testapi server in testresults.opnfv.org
[releng.git] / utils / test / result_collection_api / opnfv_testapi / resources / result_handlers.py
index 473a38d..400b84a 100644 (file)
@@ -25,6 +25,13 @@ class GenericResultHandler(GenericApiHandler):
         self.table = self.db_results
         self.table_cls = TestResult
 
+    def get_int(self, key, value):
+        try:
+            value = int(value)
+        except:
+            raise HTTPError(HTTP_BAD_REQUEST, '{} must be int'.format(key))
+        return value
+
     def set_query(self):
         query = dict()
         for k in self.request.query_arguments.keys():
@@ -32,17 +39,14 @@ class GenericResultHandler(GenericApiHandler):
             if k == 'project' or k == 'pod' or k == 'case':
                 query[k + '_name'] = v
             elif k == 'period':
-                try:
-                    v = int(v)
-                except:
-                    raise HTTPError(HTTP_BAD_REQUEST, 'period must be int')
+                v = self.get_int(k, v)
                 if v > 0:
                     period = datetime.now() - timedelta(days=v)
                     obj = {"$gte": str(period)}
                     query['start_date'] = obj
             elif k == 'trust_indicator':
-                query[k] = float(v)
-            else:
+                query[k + '.current'] = float(v)
+            elif k != 'last':
                 query[k] = v
         return query
 
@@ -108,12 +112,20 @@ class ResultsCLHandler(GenericResultHandler):
             @type period: L{string}
             @in period: query
             @required period: False
-            @param trust_indicator: must be int/long/float
-            @type trust_indicator: L{string}
+            @param last: last records stored until now
+            @type last: L{string}
+            @in last: query
+            @required last: False
+            @param trust_indicator: must be float
+            @type trust_indicator: L{float}
             @in trust_indicator: query
             @required trust_indicator: False
         """
-        self._list(self.set_query())
+        last = self.get_query_argument('last', 0)
+        if last is not None:
+            last = self.get_int('last', last)
+
+        self._list(self.set_query(), sort=[('start_date', -1)], last=last)
 
     @swagger.operation(nickname="create")
     def post(self):
@@ -122,7 +134,7 @@ class ResultsCLHandler(GenericResultHandler):
             @param body: result to be created
             @type body: L{ResultCreateRequest}
             @in body: body
-            @rtype: L{TestResult}
+            @rtype: L{CreateResponse}
             @return 200: result is created.
             @raise 404: pod/project/testcase not exist
             @raise 400: body/pod_name/project_name/case_name not provided
@@ -168,3 +180,19 @@ class ResultsGURHandler(GenericResultHandler):
         query = dict()
         query["_id"] = ObjectId(result_id)
         self._get_one(query)
+
+    @swagger.operation(nickname="update")
+    def put(self, result_id):
+        """
+            @description: update a single result by _id
+            @param body: fields to be updated
+            @type body: L{ResultUpdateRequest}
+            @in body: body
+            @rtype: L{Result}
+            @return 200: update success
+            @raise 404: result not exist
+            @raise 403: nothing to update
+        """
+        query = {'_id': ObjectId(result_id)}
+        db_keys = []
+        self._update(query, db_keys)