Merge "Add profiler parameter to doctor verify job"
[releng.git] / utils / test / testapi / opnfv_testapi / resources / models.py
index e79308b..f518c97 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
+        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 = list()\r
+                    [hs.append(h.format() if hasattr(h, 'format') else str(h))\r
+                     for h in dicts[k]]\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
 @swagger.model()\r
-class Versions(object):\r
+class CreateResponse(ModelBase):\r
+    def __init__(self, href=''):\r
+        self.href = href\r
+\r
+\r
+@swagger.model()\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