Revision 4c14965f
b/Makefile.am | ||
---|---|---|
231 | 231 |
test/ganeti.hooks_unittest.py \ |
232 | 232 |
test/ganeti.http_unittest.py \ |
233 | 233 |
test/ganeti.locking_unittest.py \ |
234 |
test/ganeti.objects_unittest.py \ |
|
234 | 235 |
test/ganeti.rapi.resources_unittest.py \ |
235 | 236 |
test/ganeti.serializer_unittest.py \ |
236 | 237 |
test/ganeti.ssh_unittest.py \ |
b/lib/objects.py | ||
---|---|---|
104 | 104 |
raise KeyError(key) |
105 | 105 |
setattr(self, key, value) |
106 | 106 |
|
107 |
def __getstate__(self): |
|
108 |
state = {} |
|
109 |
for name in self.__slots__: |
|
110 |
if hasattr(self, name): |
|
111 |
state[name] = getattr(self, name) |
|
112 |
return state |
|
113 |
|
|
114 | 107 |
def __setstate__(self, state): |
115 | 108 |
for name in state: |
116 | 109 |
if name in self.__slots__: |
... | ... | |
126 | 119 |
make sure all objects returned are only standard python types. |
127 | 120 |
|
128 | 121 |
""" |
129 |
return dict([(k, getattr(self, k, None)) for k in self.__slots__]) |
|
122 |
result = {} |
|
123 |
for name in self.__slots__: |
|
124 |
value = getattr(self, name, None) |
|
125 |
if value is not None: |
|
126 |
result[name] = value |
|
127 |
return result |
|
128 |
|
|
129 |
__getstate__ = ToDict |
|
130 | 130 |
|
131 | 131 |
@classmethod |
132 | 132 |
def FromDict(cls, val): |
b/test/ganeti.objects_unittest.py | ||
---|---|---|
1 |
#!/usr/bin/python |
|
2 |
# |
|
3 |
|
|
4 |
# Copyright (C) 2006, 2007, 2008 Google Inc. |
|
5 |
# |
|
6 |
# This program is free software; you can redistribute it and/or modify |
|
7 |
# it under the terms of the GNU General Public License as published by |
|
8 |
# the Free Software Foundation; either version 2 of the License, or |
|
9 |
# (at your option) any later version. |
|
10 |
# |
|
11 |
# This program is distributed in the hope that it will be useful, but |
|
12 |
# WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
14 |
# General Public License for more details. |
|
15 |
# |
|
16 |
# You should have received a copy of the GNU General Public License |
|
17 |
# along with this program; if not, write to the Free Software |
|
18 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
19 |
# 0.0510-1301, USA. |
|
20 |
|
|
21 |
|
|
22 |
"""Script for unittesting the objects module""" |
|
23 |
|
|
24 |
|
|
25 |
import unittest |
|
26 |
|
|
27 |
from ganeti import objects |
|
28 |
|
|
29 |
class SimpleObject(objects.ConfigObject): |
|
30 |
__slots__ = ['a', 'b'] |
|
31 |
|
|
32 |
class TestDictState(unittest.TestCase): |
|
33 |
"""Simple dict tansformation tests""" |
|
34 |
|
|
35 |
def testSimpleObjectToDict(self): |
|
36 |
o1 = SimpleObject(a='1') |
|
37 |
self.assertEquals(o1.ToDict(), {'a': '1'}) |
|
38 |
self.assertEquals(o1.__getstate__(), {'a': '1'}) |
|
39 |
self.assertEquals(o1.__getstate__(), o1.ToDict()) |
|
40 |
o1.a = 2 |
|
41 |
o1.b = 5 |
|
42 |
self.assertEquals(o1.ToDict(), {'a': 2, 'b': 5}) |
|
43 |
o2 = SimpleObject.FromDict(o1.ToDict()) |
|
44 |
self.assertEquals(o1.ToDict(), {'a': 2, 'b': 5}) |
|
45 |
|
|
46 |
|
|
47 |
if __name__ == '__main__': |
|
48 |
unittest.main() |
Also available in: Unified diff