Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # encoding: utf-8
- import unittest
- class dotted_dict(dict):
- def __getattr__(self, key):
- # import ipdb; ipdb.set_trace()
- if key in self.__dict__:
- return super(self, dict).__getattr__(self, key)
- if key not in self.keys():
- self[key] = dotted_dict()
- return self[key]
- def __setattr__(self, key, val):
- # import ipdb; ipdb.set_trace()
- if key in self.__dict__:
- return super(self, dict).__setattr__(self, key, val)
- else:
- self[key] = val
- def dot_to_dict(dotted):
- the_d = dotted_dict()
- for k, v in dotted.iteritems():
- exec("the_d.{} = {}".format(k, v))
- return the_d
- def dotted_to_dict(incoming):
- """ Because incoming is a list of dicts, and no benefit can be gained from
- doing a global transformation, let's do it dict by dict."""
- return [dot_to_dict(i) for i in incoming]
- class TestDottedToDict(unittest.TestCase):
- def setUp(self):
- self.dotted = [{'a': 1, 'b.e.f': 2, 'b.e.g': 9, 'c.a': 5, 'c.d': 10},
- {'a': 6, 'b.f.f': 8, 'b.f.g': 0, 'c.a': None,
- 'c.d': 15},
- ]
- self.expected = [{'a': 1, 'b': {'e': {'f': 2, 'g': 9}},
- 'c': {'a': 5, 'd': 10}},
- {'a': 6, 'b': {'f': {'f': 8, 'g': 0}},
- 'c': {'a': None, 'd': 15}},
- ]
- def testClasses(self):
- """
- """
- got = dotted_to_dict(self.dotted)
- self.assertEquals(got, self.expected)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement