# 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