simplify model process of TestAPI 77/26277/4
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 20 Dec 2016 04:02:03 +0000 (12:02 +0800)
committerSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 20 Dec 2016 06:58:13 +0000 (14:58 +0800)
JIRA: FUNCTEST-671

Change-Id: I8a398f04f2d12c880ec0803aa56c2645dc673523
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
utils/test/testapi/opnfv_testapi/resources/models.py
utils/test/testapi/opnfv_testapi/resources/pod_models.py
utils/test/testapi/opnfv_testapi/resources/project_models.py
utils/test/testapi/opnfv_testapi/resources/result_models.py
utils/test/testapi/opnfv_testapi/resources/testcase_models.py

index e79308b..c85c1d5 100644 (file)
 # feng.xiaowei@zte.com.cn  add CreateResponse                      5-19-2016\r
 # feng.xiaowei@zte.com.cn  mv TestCase to testcase_models.py       5-20-2016\r
 # feng.xiaowei@zte.com.cn  mv TestResut to result_models.py        5-23-2016\r
+# feng.xiaowei@zte.com.cn  add ModelBase                           12-20-2016\r
 ##############################################################################\r
+import copy\r
+\r
 from opnfv_testapi.tornado_swagger import swagger\r
 \r
 \r
-@swagger.model()\r
-class CreateResponse(object):\r
-    def __init__(self, href=''):\r
-        self.href = href\r
+class ModelBase(object):\r
+\r
+    def _format(self, excludes):\r
+        new_obj = copy.deepcopy(self)\r
+        dicts = new_obj.__dict__\r
+        print self, self.__class__\r
+        for k in dicts.keys():\r
+            if k in excludes:\r
+                del dicts[k]\r
+            elif dicts[k]:\r
+                if hasattr(dicts[k], 'format'):\r
+                    dicts[k] = dicts[k].format()\r
+                elif isinstance(dicts[k], list):\r
+                    hs = []\r
+                    for h in dicts[k]:\r
+                        hs.append(h.format())\r
+                    dicts[k] = hs\r
+                elif not isinstance(dicts[k], (str, int, float, dict)):\r
+                    dicts[k] = str(dicts[k])\r
+        return dicts\r
+\r
+    def format(self):\r
+        return self._format(['_id'])\r
+\r
+    def format_http(self):\r
+        return self._format([])\r
 \r
     @staticmethod\r
-    def from_dict(res_dict):\r
-        if res_dict is None:\r
+    def attr_parser():\r
+        return {}\r
+\r
+    @classmethod\r
+    def from_dict(cls, a_dict):\r
+        if a_dict is None:\r
             return None\r
 \r
-        res = CreateResponse()\r
-        res.href = res_dict.get('href')\r
-        return res\r
+        attr_parser = cls.attr_parser()\r
+        t = cls()\r
+        for k, v in a_dict.iteritems():\r
+            value = v\r
+            if isinstance(v, dict) and k in attr_parser:\r
+                value = attr_parser[k].from_dict(v)\r
+            elif isinstance(v, list) and k in attr_parser:\r
+                value = []\r
+                for item in v:\r
+                    value.append(attr_parser[k].from_dict(item))\r
 \r
-    def format(self):\r
-        return {'href': self.href}\r
+            t.__setattr__(k, value)\r
+\r
+        return t\r
+\r
+\r
+class CreateResponse(ModelBase):\r
+    def __init__(self, href=''):\r
+        self.href = href\r
 \r
 \r
 @swagger.model()\r
-class Versions(object):\r
+class Versions(ModelBase):\r
     """\r
         @property versions:\r
         @ptype versions: C{list} of L{Version}\r
     """\r
+\r
     def __init__(self):\r
         self.versions = list()\r
 \r
     @staticmethod\r
-    def from_dict(res_dict):\r
-        if res_dict is None:\r
-            return None\r
-\r
-        res = Versions()\r
-        for version in res_dict.get('versions'):\r
-            res.versions.append(Version.from_dict(version))\r
-        return res\r
+    def attr_parser():\r
+        return {'versions': Version}\r
 \r
 \r
 @swagger.model()\r
-class Version(object):\r
+class Version(ModelBase):\r
     def __init__(self, version=None, description=None):\r
         self.version = version\r
         self.description = description\r
-\r
-    @staticmethod\r
-    def from_dict(a_dict):\r
-        if a_dict is None:\r
-            return None\r
-\r
-        ver = Version()\r
-        ver.version = a_dict.get('version')\r
-        ver.description = str(a_dict.get('description'))\r
-        return ver\r
index 7231806..26a9e67 100644 (file)
@@ -6,8 +6,10 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
+import models
 from opnfv_testapi.tornado_swagger import swagger
 
+
 # name: name of the POD e.g. zte-1
 # mode: metal or virtual
 # details: any detail
@@ -15,58 +17,29 @@ from opnfv_testapi.tornado_swagger import swagger
 
 
 @swagger.model()
-class PodCreateRequest(object):
+class PodCreateRequest(models.ModelBase):
     def __init__(self, name, mode='', details='', role=""):
         self.name = name
         self.mode = mode
         self.details = details
         self.role = role
 
-    def format(self):
-        return {
-            "name": self.name,
-            "mode": self.mode,
-            "details": self.details,
-            "role": self.role,
-        }
-
 
 @swagger.model()
-class Pod(PodCreateRequest):
+class Pod(models.ModelBase):
     def __init__(self,
                  name='', mode='', details='',
                  role="", _id='', create_date=''):
-        super(Pod, self).__init__(name, mode, details, role)
+        self.name = name
+        self.mode = mode
+        self.details = details
+        self.role = role
         self._id = _id
         self.creation_date = create_date
 
-    @staticmethod
-    def from_dict(pod_dict):
-        if pod_dict is None:
-            return None
-
-        p = Pod()
-        p._id = pod_dict.get('_id')
-        p.creation_date = str(pod_dict.get('creation_date'))
-        p.name = pod_dict.get('name')
-        p.mode = pod_dict.get('mode')
-        p.details = pod_dict.get('details')
-        p.role = pod_dict.get('role')
-        return p
-
-    def format(self):
-        f = super(Pod, self).format()
-        f['creation_date'] = str(self.creation_date)
-        return f
-
-    def format_http(self):
-        f = self.format()
-        f['_id'] = str(self._id)
-        return f
-
 
 @swagger.model()
-class Pods(object):
+class Pods(models.ModelBase):
     """
         @property pods:
         @ptype pods: C{list} of L{Pod}
@@ -75,11 +48,5 @@ class Pods(object):
         self.pods = list()
 
     @staticmethod
-    def from_dict(res_dict):
-        if res_dict is None:
-            return None
-
-        res = Pods()
-        for pod in res_dict.get('pods'):
-            res.pods.append(Pod.from_dict(pod))
-        return res
+    def attr_parser():
+        return {'pods': Pod}
index f70630c..f7323c1 100644 (file)
@@ -6,37 +6,26 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
+import models
 from opnfv_testapi.tornado_swagger import swagger
 
 
 @swagger.model()
-class ProjectCreateRequest(object):
+class ProjectCreateRequest(models.ModelBase):
     def __init__(self, name, description=''):
         self.name = name
         self.description = description
 
-    def format(self):
-        return {
-            "name": self.name,
-            "description": self.description,
-        }
-
 
 @swagger.model()
-class ProjectUpdateRequest(object):
+class ProjectUpdateRequest(models.ModelBase):
     def __init__(self, name='', description=''):
         self.name = name
         self.description = description
 
-    def format(self):
-        return {
-            "name": self.name,
-            "description": self.description,
-        }
-
 
 @swagger.model()
-class Project(object):
+class Project(models.ModelBase):
     def __init__(self,
                  name=None, _id=None, description=None, create_date=None):
         self._id = _id
@@ -44,38 +33,9 @@ class Project(object):
         self.description = description
         self.creation_date = create_date
 
-    @staticmethod
-    def from_dict(res_dict):
-
-        if res_dict is None:
-            return None
-
-        t = Project()
-        t._id = res_dict.get('_id')
-        t.creation_date = res_dict.get('creation_date')
-        t.name = res_dict.get('name')
-        t.description = res_dict.get('description')
-
-        return t
-
-    def format(self):
-        return {
-            "name": self.name,
-            "description": self.description,
-            "creation_date": str(self.creation_date)
-        }
-
-    def format_http(self):
-        return {
-            "_id": str(self._id),
-            "name": self.name,
-            "description": self.description,
-            "creation_date": str(self.creation_date),
-        }
-
 
 @swagger.model()
-class Projects(object):
+class Projects(models.ModelBase):
     """
         @property projects:
         @ptype projects: C{list} of L{Project}
@@ -84,11 +44,5 @@ class Projects(object):
         self.projects = list()
 
     @staticmethod
-    def from_dict(res_dict):
-        if res_dict is None:
-            return None
-
-        res = Projects()
-        for project in res_dict.get('projects'):
-            res.projects.append(Project.from_dict(project))
-        return res
+    def attr_parser():
+        return {'projects': Project}
index f73f5c6..3011902 100644 (file)
@@ -6,11 +6,12 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
+import models
 from opnfv_testapi.tornado_swagger import swagger
 
 
 @swagger.model()
-class TIHistory(object):
+class TIHistory(models.ModelBase):
     """
         @ptype step: L{float}
     """
@@ -18,22 +19,9 @@ class TIHistory(object):
         self.date = date
         self.step = step
 
-    def format(self):
-        return {
-            "date": self.date,
-            "step": self.step
-        }
-
-    @staticmethod
-    def from_dict(a_dict):
-        if a_dict is None:
-            return None
-
-        return TIHistory(a_dict.get('date'), a_dict.get('step'))
-
 
 @swagger.model()
-class TI(object):
+class TI(models.ModelBase):
     """
         @property histories: trust_indicator update histories
         @ptype histories: C{list} of L{TIHistory}
@@ -43,31 +31,13 @@ class TI(object):
         self.current = current
         self.histories = list()
 
-    def format(self):
-        hs = []
-        for h in self.histories:
-            hs.append(h.format())
-
-        return {
-            "current": self.current,
-            "histories": hs
-        }
-
     @staticmethod
-    def from_dict(a_dict):
-        t = TI()
-        if a_dict:
-            t.current = a_dict.get('current')
-            if 'histories' in a_dict.keys():
-                for history in a_dict.get('histories', None):
-                    t.histories.append(TIHistory.from_dict(history))
-            else:
-                t.histories = []
-        return t
+    def attr_parser():
+        return {'histories': TIHistory}
 
 
 @swagger.model()
-class ResultCreateRequest(object):
+class ResultCreateRequest(models.ModelBase):
     """
         @property trust_indicator:
         @ptype trust_indicator: L{TI}
@@ -98,25 +68,9 @@ class ResultCreateRequest(object):
         self.criteria = criteria
         self.trust_indicator = trust_indicator if trust_indicator else TI(0)
 
-    def format(self):
-        return {
-            "pod_name": self.pod_name,
-            "project_name": self.project_name,
-            "case_name": self.case_name,
-            "installer": self.installer,
-            "version": self.version,
-            "start_date": self.start_date,
-            "stop_date": self.stop_date,
-            "details": self.details,
-            "build_tag": self.build_tag,
-            "scenario": self.scenario,
-            "criteria": self.criteria,
-            "trust_indicator": self.trust_indicator.format()
-        }
-
 
 @swagger.model()
-class ResultUpdateRequest(object):
+class ResultUpdateRequest(models.ModelBase):
     """
         @property trust_indicator:
         @ptype trust_indicator: L{TI}
@@ -124,14 +78,9 @@ class ResultUpdateRequest(object):
     def __init__(self, trust_indicator=None):
         self.trust_indicator = trust_indicator
 
-    def format(self):
-        return {
-            "trust_indicator": self.trust_indicator.format(),
-        }
-
 
 @swagger.model()
-class TestResult(object):
+class TestResult(models.ModelBase):
     """
         @property trust_indicator: used for long duration test case
         @ptype trust_indicator: L{TI}
@@ -156,76 +105,19 @@ class TestResult(object):
         self.trust_indicator = trust_indicator
 
     @staticmethod
-    def from_dict(a_dict):
-
-        if a_dict is None:
-            return None
-
-        t = TestResult()
-        t._id = a_dict.get('_id')
-        t.case_name = a_dict.get('case_name')
-        t.pod_name = a_dict.get('pod_name')
-        t.project_name = a_dict.get('project_name')
-        t.start_date = str(a_dict.get('start_date'))
-        t.stop_date = str(a_dict.get('stop_date'))
-        t.details = a_dict.get('details')
-        t.version = a_dict.get('version')
-        t.installer = a_dict.get('installer')
-        t.build_tag = a_dict.get('build_tag')
-        t.scenario = a_dict.get('scenario')
-        t.criteria = a_dict.get('criteria')
-        t.trust_indicator = TI.from_dict(a_dict.get('trust_indicator'))
-        return t
-
-    def format(self):
-        return {
-            "case_name": self.case_name,
-            "project_name": self.project_name,
-            "pod_name": self.pod_name,
-            "start_date": str(self.start_date),
-            "stop_date": str(self.stop_date),
-            "version": self.version,
-            "installer": self.installer,
-            "details": self.details,
-            "build_tag": self.build_tag,
-            "scenario": self.scenario,
-            "criteria": self.criteria,
-            "trust_indicator": self.trust_indicator.format()
-        }
-
-    def format_http(self):
-        return {
-            "_id": str(self._id),
-            "case_name": self.case_name,
-            "project_name": self.project_name,
-            "pod_name": self.pod_name,
-            "start_date": str(self.start_date),
-            "stop_date": str(self.stop_date),
-            "version": self.version,
-            "installer": self.installer,
-            "details": self.details,
-            "build_tag": self.build_tag,
-            "scenario": self.scenario,
-            "criteria": self.criteria,
-            "trust_indicator": self.trust_indicator.format()
-        }
+    def attr_parser():
+        return {'trust_indicator': TI}
 
 
 @swagger.model()
-class TestResults(object):
+class TestResults(models.ModelBase):
     """
-        @property results:
+        @property rgit esults:
         @ptype results: C{list} of L{TestResult}
     """
     def __init__(self):
         self.results = list()
 
     @staticmethod
-    def from_dict(a_dict):
-        if a_dict is None:
-            return None
-
-        res = TestResults()
-        for result in a_dict.get('results'):
-            res.results.append(TestResult.from_dict(result))
-        return res
+    def attr_parser():
+        return {'results': TestResult}
index 0ed705f..8cc3c6c 100644 (file)
@@ -6,11 +6,12 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
+import models
 from opnfv_testapi.tornado_swagger import swagger
 
 
 @swagger.model()
-class TestcaseCreateRequest(object):
+class TestcaseCreateRequest(models.ModelBase):
     def __init__(self, name, url=None, description=None,
                  tier=None, ci_loop=None, criteria=None,
                  blocking=None, dependencies=None, run=None,
@@ -29,16 +30,9 @@ class TestcaseCreateRequest(object):
         self.version = version
         self.trust = "Silver"
 
-    def format(self):
-        return {
-            "name": self.name,
-            "description": self.description,
-            "url": self.url,
-        }
-
 
 @swagger.model()
-class TestcaseUpdateRequest(object):
+class TestcaseUpdateRequest(models.ModelBase):
     def __init__(self, name=None, description=None, project_name=None,
                  tier=None, ci_loop=None, criteria=None,
                  blocking=None, dependencies=None, run=None,
@@ -57,26 +51,9 @@ class TestcaseUpdateRequest(object):
         self.version = version
         self.trust = trust
 
-    def format(self):
-        return {
-            "name": self.name,
-            "description": self.description,
-            "project_name": self.project_name,
-            "tier": self.tier,
-            "ci_loop": self.ci_loop,
-            "criteria": self.criteria,
-            "blocking": self.blocking,
-            "dependencies": self.dependencies,
-            "run": self.run,
-            "domains": self.domains,
-            "tags": self.tags,
-            "version": self.version,
-            "trust": self.trust
-        }
-
 
 @swagger.model()
-class Testcase(object):
+class Testcase(models.ModelBase):
     def __init__(self, _id=None, name=None, project_name=None,
                  description=None, url=None, creation_date=None,
                  tier=None, ci_loop=None, criteria=None,
@@ -89,85 +66,20 @@ class Testcase(object):
         self.description = None
         self.url = None
         self.creation_date = None
-        self.tier=None
-        self.ci_loop=None
-        self.criteria=None
-        self.blocking=None
-        self.dependencies=None
-        self.run=None
-        self.domains=None
-        self.tags=None
-        self.version=None
-        self.trust=None
-
-    @staticmethod
-    def from_dict(a_dict):
-
-        if a_dict is None:
-            return None
-
-        t = Testcase()
-        t._id = a_dict.get('_id')
-        t.project_name = a_dict.get('project_name')
-        t.creation_date = a_dict.get('creation_date')
-        t.name = a_dict.get('name')
-        t.description = a_dict.get('description')
-        t.url = a_dict.get('url')
-        t.tier = a_dict.get('tier')
-        t.ci_loop = a_dict.get('ci_loop')
-        t.criteria = a_dict.get('criteria')
-        t.blocking = a_dict.get('blocking')
-        t.dependencies = a_dict.get('dependencies')
-        t.run = a_dict.get('run')
-        t.domains = a_dict.get('domains')
-        t.tags = a_dict.get('tags')
-        t.version = a_dict.get('version')
-        t.trust = a_dict.get('trust')
-
-        return t
-
-    def format(self):
-        return {
-            "name": self.name,
-            "description": self.description,
-            "project_name": self.project_name,
-            "creation_date": str(self.creation_date),
-            "url": self.url,
-            "tier": self.tier,
-            "ci_loop": self.ci_loop,
-            "criteria": self.criteria,
-            "blocking": self.blocking,
-            "dependencies": self.dependencies,
-            "run": self.run,
-            "domains": self.domains,
-            "tags": self.tags,
-            "version": self.version,
-            "trust": self.trust
-        }
-
-    def format_http(self):
-        return {
-            "_id": str(self._id),
-            "name": self.name,
-            "project_name": self.project_name,
-            "description": self.description,
-            "creation_date": str(self.creation_date),
-            "url": self.url,
-            "tier": self.tier,
-            "ci_loop": self.ci_loop,
-            "criteria": self.criteria,
-            "blocking": self.blocking,
-            "dependencies": self.dependencies,
-            "run": self.run,
-            "domains": self.domains,
-            "tags": self.tags,
-            "version": self.version,
-            "trust": self.trust
-        }
+        self.tier = None
+        self.ci_loop = None
+        self.criteria = None
+        self.blocking = None
+        self.dependencies = None
+        self.run = None
+        self.domains = None
+        self.tags = None
+        self.version = None
+        self.trust = None
 
 
 @swagger.model()
-class Testcases(object):
+class Testcases(models.ModelBase):
     """
         @property testcases:
         @ptype testcases: C{list} of L{Testcase}
@@ -176,11 +88,5 @@ class Testcases(object):
         self.testcases = list()
 
     @staticmethod
-    def from_dict(res_dict):
-        if res_dict is None:
-            return None
-
-        res = Testcases()
-        for testcase in res_dict.get('testcases'):
-            res.testcases.append(Testcase.from_dict(testcase))
-        return res
+    def attr_parser():
+        return {'testcases': Testcase}