c85c1d5b14ee9c39d7efee83f346cb596d1fc30f
[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         print self, self.__class__\r
28         for k in dicts.keys():\r
29             if k in excludes:\r
30                 del dicts[k]\r
31             elif dicts[k]:\r
32                 if hasattr(dicts[k], 'format'):\r
33                     dicts[k] = dicts[k].format()\r
34                 elif isinstance(dicts[k], list):\r
35                     hs = []\r
36                     for h in dicts[k]:\r
37                         hs.append(h.format())\r
38                     dicts[k] = hs\r
39                 elif not isinstance(dicts[k], (str, int, float, dict)):\r
40                     dicts[k] = str(dicts[k])\r
41         return dicts\r
42 \r
43     def format(self):\r
44         return self._format(['_id'])\r
45 \r
46     def format_http(self):\r
47         return self._format([])\r
48 \r
49     @staticmethod\r
50     def attr_parser():\r
51         return {}\r
52 \r
53     @classmethod\r
54     def from_dict(cls, a_dict):\r
55         if a_dict is None:\r
56             return None\r
57 \r
58         attr_parser = cls.attr_parser()\r
59         t = cls()\r
60         for k, v in a_dict.iteritems():\r
61             value = v\r
62             if isinstance(v, dict) and k in attr_parser:\r
63                 value = attr_parser[k].from_dict(v)\r
64             elif isinstance(v, list) and k in attr_parser:\r
65                 value = []\r
66                 for item in v:\r
67                     value.append(attr_parser[k].from_dict(item))\r
68 \r
69             t.__setattr__(k, value)\r
70 \r
71         return t\r
72 \r
73 \r
74 class CreateResponse(ModelBase):\r
75     def __init__(self, href=''):\r
76         self.href = href\r
77 \r
78 \r
79 @swagger.model()\r
80 class Versions(ModelBase):\r
81     """\r
82         @property versions:\r
83         @ptype versions: C{list} of L{Version}\r
84     """\r
85 \r
86     def __init__(self):\r
87         self.versions = list()\r
88 \r
89     @staticmethod\r
90     def attr_parser():\r
91         return {'versions': Version}\r
92 \r
93 \r
94 @swagger.model()\r
95 class Version(ModelBase):\r
96     def __init__(self, version=None, description=None):\r
97         self.version = version\r
98         self.description = description\r