Merge "re-enable testapi auto update"
[releng.git] / utils / test / testapi / opnfv_testapi / resources / models.py
index c85c1d5..e8fc532 100644 (file)
-##############################################################################\r
-# Copyright (c) 2015 Orange\r
-# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com\r
-# All rights reserved. This program and the accompanying materials\r
-# are made available under the terms of the Apache License, Version 2.0\r
-# which accompanies this distribution, and is available at\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-# feng.xiaowei@zte.com.cn  mv Pod to pod_models.py                 5-18-2016\r
-# feng.xiaowei@zte.com.cn  add MetaCreateResponse/MetaGetResponse  5-18-2016\r
-# feng.xiaowei@zte.com.cn  mv TestProject to project_models.py     5-19-2016\r
-# feng.xiaowei@zte.com.cn  delete meta class                       5-19-2016\r
-# 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
-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 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
-        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
-            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(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 attr_parser():\r
-        return {'versions': Version}\r
-\r
-\r
-@swagger.model()\r
-class Version(ModelBase):\r
-    def __init__(self, version=None, description=None):\r
-        self.version = version\r
-        self.description = description\r
+##############################################################################
+# Copyright (c) 2015 Orange
+# guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+# feng.xiaowei@zte.com.cn  mv Pod to pod_models.py                 5-18-2016
+# feng.xiaowei@zte.com.cn  add MetaCreateResponse/MetaGetResponse  5-18-2016
+# feng.xiaowei@zte.com.cn  mv TestProject to project_models.py     5-19-2016
+# feng.xiaowei@zte.com.cn  delete meta class                       5-19-2016
+# feng.xiaowei@zte.com.cn  add CreateResponse                      5-19-2016
+# feng.xiaowei@zte.com.cn  mv TestCase to testcase_models.py       5-20-2016
+# feng.xiaowei@zte.com.cn  mv TestResut to result_models.py        5-23-2016
+# feng.xiaowei@zte.com.cn  add ModelBase                           12-20-2016
+##############################################################################
+import ast
+import copy
+
+from opnfv_testapi.tornado_swagger import swagger
+
+
+class ModelBase(object):
+
+    def format(self):
+        return self._format(['_id'])
+
+    def format_http(self):
+        return self._format([])
+
+    @classmethod
+    def from_dict(cls, a_dict):
+        if a_dict is None:
+            return None
+
+        attr_parser = cls.attr_parser()
+        t = cls()
+        for k, v in a_dict.iteritems():
+            value = v
+            if isinstance(v, dict) and k in attr_parser:
+                value = attr_parser[k].from_dict(v)
+            elif isinstance(v, list) and k in attr_parser:
+                value = []
+                for item in v:
+                    value.append(attr_parser[k].from_dict(item))
+
+            t.__setattr__(k, value)
+
+        return t
+
+    @staticmethod
+    def attr_parser():
+        return {}
+
+    def _format(self, excludes):
+        new_obj = copy.deepcopy(self)
+        dicts = new_obj.__dict__
+        for k in dicts.keys():
+            if k in excludes:
+                del dicts[k]
+            elif dicts[k]:
+                dicts[k] = self._obj_format(dicts[k])
+        return dicts
+
+    def _obj_format(self, obj):
+        if self._has_format(obj):
+            obj = obj.format()
+        elif isinstance(obj, unicode):
+            try:
+                obj = self._obj_format(ast.literal_eval(obj))
+            except:
+                try:
+                    obj = str(obj)
+                except:
+                    obj = obj
+        elif isinstance(obj, list):
+            hs = list()
+            for h in obj:
+                hs.append(self._obj_format(h))
+            obj = hs
+        elif not isinstance(obj, (str, int, float, dict)):
+            obj = str(obj)
+        return obj
+
+    @staticmethod
+    def _has_format(obj):
+        return not isinstance(obj, (str, unicode)) and hasattr(obj, 'format')
+
+
+@swagger.model()
+class CreateResponse(ModelBase):
+    def __init__(self, href=''):
+        self.href = href
+
+
+@swagger.model()
+class Versions(ModelBase):
+    """
+        @property versions:
+        @ptype versions: C{list} of L{Version}
+    """
+
+    def __init__(self):
+        self.versions = list()
+
+    @staticmethod
+    def attr_parser():
+        return {'versions': Version}
+
+
+@swagger.model()
+class Version(ModelBase):
+    def __init__(self, version=None, description=None):
+        self.version = version
+        self.description = description