leverage query_by_name decorator to simplify name querying 89/48489/3
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Wed, 6 Dec 2017 20:04:09 +0000 (04:04 +0800)
committerSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 2 Jan 2018 02:47:15 +0000 (10:47 +0800)
name query is case insensitive and partial match

Change-Id: I65a6f5d3aa9411559cb9cf27d0fbd7ec46d4b26f
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
testapi/opnfv_testapi/common/check.py
testapi/opnfv_testapi/handlers/base_handlers.py
testapi/opnfv_testapi/handlers/pod_handlers.py
testapi/opnfv_testapi/handlers/project_handlers.py
testapi/opnfv_testapi/tests/unit/fake_pymongo.py
testapi/setup.cfg

index 8a76f17..713f0fb 100644 (file)
@@ -158,3 +158,17 @@ def updated_one_not_exist(xstep):
         ret = yield gen.coroutine(xstep)(self, data, *args, **kwargs)
         raise gen.Return(ret)
     return wrap
+
+
+def query_by_name(xstep):
+    @functools.wraps(xstep)
+    def wrap(self, *args, **kwargs):
+        if 'name' in self.request.query_arguments.keys():
+            query = kwargs.get('query', {})
+            query.update({'name': re.compile(self.get_query_argument('name'), re.IGNORECASE)})
+            kwargs.update({'query': query})
+
+        ret = yield gen.coroutine(xstep)(self, *args, **kwargs)
+        raise gen.Return(ret)
+
+    return wrap
index a2fdb19..bc91f64 100644 (file)
@@ -103,7 +103,8 @@ class GenericApiHandler(web.RequestHandler):
 
     @web.asynchronous
     @gen.coroutine
-    def _list(self, query=None, res_op=None, *args, **kwargs):
+    @check.query_by_name
+    def _list(self, query=None, **kwargs):
         sort = kwargs.get('sort')
         page = kwargs.get('page', 0)
         last = kwargs.get('last', 0)
@@ -131,10 +132,7 @@ class GenericApiHandler(web.RequestHandler):
             cursor = dbapi.db_aggregate(self.table, pipelines)
             while (yield cursor.fetch_next):
                 data.append(self.format_data(cursor.next_object()))
-        if res_op is None:
-            res = {self.table: data}
-        else:
-            res = res_op(data, *args)
+        res = {self.table: data}
         if page > 0:
             res.update({
                 'pagination': {
index 06a8b17..03c2033 100644 (file)
@@ -6,7 +6,6 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-import re
 
 from opnfv_testapi.handlers import base_handlers
 from opnfv_testapi.models import pod_models
@@ -19,14 +18,6 @@ class GenericPodHandler(base_handlers.GenericApiHandler):
         self.table = 'pods'
         self.table_cls = pod_models.Pod
 
-    def set_query(self):
-        query = dict()
-        for k in self.request.query_arguments.keys():
-            v = self.get_query_argument(k)
-            if k == 'name':
-                query['name'] = re.compile(v, re.IGNORECASE)
-        return query
-
 
 class PodCLHandler(GenericPodHandler):
     @swagger.operation(nickname='listAllPods')
@@ -40,7 +31,7 @@ class PodCLHandler(GenericPodHandler):
             @in name: query
             @required name: False
         """
-        self._list(query=self.set_query())
+        self._list()
 
     @swagger.operation(nickname='createPod')
     def post(self):
index 3ba1a80..0800ee8 100644 (file)
@@ -6,7 +6,6 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-import re
 
 from opnfv_testapi.handlers import base_handlers
 from opnfv_testapi.models import project_models
@@ -21,14 +20,6 @@ class GenericProjectHandler(base_handlers.GenericApiHandler):
         self.table = 'projects'
         self.table_cls = project_models.Project
 
-    def set_query(self):
-        query = dict()
-        for k in self.request.query_arguments.keys():
-            v = self.get_query_argument(k)
-            if k == 'name':
-                query['name'] = re.compile(v, re.IGNORECASE)
-        return query
-
 
 class ProjectCLHandler(GenericProjectHandler):
     @swagger.operation(nickname="listProjects")
@@ -47,7 +38,7 @@ class ProjectCLHandler(GenericProjectHandler):
             @in name: query
             @required name: False
         """
-        self._list(query=self.set_query())
+        self._list()
 
     @swagger.operation(nickname="createProject")
     def post(self):
index 39b7e6a..a9c04bb 100644 (file)
@@ -178,6 +178,9 @@ class MemDb(object):
                             elif i_k == 'versions.projects.project':
                                 return self._in_scenarios_project(i_v,
                                                                   content)
+                elif isinstance(v, re._pattern_type):
+                    if v.match(content.get(k, None)) is None:
+                        return False
                 elif content.get(k, None) != v:
                     return False
 
index e83da5e..570d138 100644 (file)
@@ -24,7 +24,7 @@ packages =
     opnfv_testapi
 
 data_files =
-    /etc/opnfv_testapi = etc/config.ini
+#    /etc/opnfv_testapi = etc/config.ini
     /usr/local/share/opnfv_testapi = 3rd_party/static/*
     /usr/local/share/opnfv_testapi/testapi-ui = opnfv_testapi/ui/*