a281c66d8b81f333c6f3fbdbf917921b96e9bca4
[releng.git] / utils / test / testapi / opnfv_testapi / resources / models.py
1 ##############################################################################\r
2 # Copyright (c) 2015 Orange\r
3 # guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com\r
4 # All rights reserved. This program and the accompanying materials\r
5 # are made available under the terms of the Apache License, Version 2.0\r
6 # which accompanies this distribution, and is available at\r
7 # http://www.apache.org/licenses/LICENSE-2.0\r
8 # feng.xiaowei@zte.com.cn  mv Pod to pod_models.py                 5-18-2016\r
9 # feng.xiaowei@zte.com.cn  add MetaCreateResponse/MetaGetResponse  5-18-2016\r
10 # feng.xiaowei@zte.com.cn  mv TestProject to project_models.py     5-19-2016\r
11 # feng.xiaowei@zte.com.cn  delete meta class                       5-19-2016\r
12 # feng.xiaowei@zte.com.cn  add CreateResponse                      5-19-2016\r
13 # feng.xiaowei@zte.com.cn  mv TestCase to testcase_models.py       5-20-2016\r
14 # feng.xiaowei@zte.com.cn  mv TestResut to result_models.py        5-23-2016\r
15 # feng.xiaowei@zte.com.cn  add ModelBase                           12-20-2016\r
16 ##############################################################################\r
17 import copy\r
18 \r
19 from opnfv_testapi.tornado_swagger import swagger\r
20 \r
21 \r
22 class ModelBase(object):\r
23 \r
24     def _format(self, excludes):\r
25         new_obj = copy.deepcopy(self)\r
26         dicts = new_obj.__dict__\r
27         for k in dicts.keys():\r
28             if k in excludes:\r
29                 del dicts[k]\r
30             elif dicts[k]:\r
31                 if hasattr(dicts[k], 'format'):\r
32                     dicts[k] = dicts[k].format()\r
33                 elif isinstance(dicts[k], list):\r
34                     hs = list()\r
35                     [hs.append(h.format() if hasattr(h, 'format') else str(h))\r
36                      for h in dicts[k]]\r
37                     dicts[k] = hs\r
38                 elif not isinstance(dicts[k], (str, int, float, dict)):\r
39                     dicts[k] = str(dicts[k])\r
40         return dicts\r
41 \r
42     def format(self):\r
43         return self._format(['_id'])\r
44 \r
45     def format_http(self):\r
46         return self._format([])\r
47 \r
48     @staticmethod\r
49     def attr_parser():\r
50         return {}\r
51 \r
52     @classmethod\r
53     def from_dict(cls, a_dict):\r
54         if a_dict is None:\r
55             return None\r
56 \r
57         attr_parser = cls.attr_parser()\r
58         t = cls()\r
59         for k, v in a_dict.iteritems():\r
60             value = v\r
61             if isinstance(v, dict) and k in attr_parser:\r
62                 value = attr_parser[k].from_dict(v)\r
63             elif isinstance(v, list) and k in attr_parser:\r
64                 value = []\r
65                 for item in v:\r
66                     value.append(attr_parser[k].from_dict(item))\r
67 \r
68             t.__setattr__(k, value)\r
69 \r
70         return t\r
71 \r
72 \r
73 class CreateResponse(ModelBase):\r
74     def __init__(self, href=''):\r
75         self.href = href\r
76 \r
77 \r
78 @swagger.model()\r
79 class Versions(ModelBase):\r
80     """\r
81         @property versions:\r
82         @ptype versions: C{list} of L{Version}\r
83     """\r
84 \r
85     def __init__(self):\r
86         self.versions = list()\r
87 \r
88     @staticmethod\r
89     def attr_parser():\r
90         return {'versions': Version}\r
91 \r
92 \r
93 @swagger.model()\r
94 class Version(ModelBase):\r
95     def __init__(self, version=None, description=None):\r
96         self.version = version\r
97         self.description = description\r