250078e735ab4b72238a9e24094f640923155279
[invirt/packages/invirt-base.git] / files / usr / share / python-support / sipb-xen-base / invirt / common.py
1 import unittest
2
3 class struct(object):
4     'A simple namespace object.'
5     def __init__(self, d = {}):
6         'd is the dictionary to update my __dict__ with.'
7         self.__dict__.update(d)
8
9 def dicts2struct(x):
10     """
11     Given a tree of lists/dicts, perform a deep traversal to transform all the
12     dicts to structs.
13     """
14     if type(x) == dict:
15         return struct((k, dicts2struct(v)) for k,v in x.iteritems())
16     elif type(x) == list:
17         return [dicts2struct(v) for v in x]
18     else:
19         return x
20
21 def wrap(rsrc, func):
22     "Utility to that emulates with Python 2.5's `with closing(rsrc)`."
23     try: return func(rsrc)
24     finally: rsrc.close()
25
26 class common_tests(unittest.TestCase):
27     def test_dicts2structs(self):
28         dicts = {
29                 'atom': 0,
30                 'dict': { 'atom': 'atom', 'list': [1,2,3] },
31                 'list': [ 'atom', {'key': 'value'} ]
32                 }
33         structs = dicts2struct(dicts)
34         self.assertEqual(structs.atom,        dicts['atom'])
35         self.assertEqual(structs.dict.atom,   dicts['dict']['atom'])
36         self.assertEqual(structs.dict.list,   dicts['dict']['list'])
37         self.assertEqual(structs.list[0],     dicts['list'][0])
38         self.assertEqual(structs.list[1].key, dicts['list'][1]['key'])
39
40 if __name__ == '__main__':
41     unittest.main()