Advertisement
Guest User

Untitled

a guest
Feb 24th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.63 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3.  
  4.  
  5. import unittest
  6.  
  7.  
  8. class dotted_dict(dict):
  9.     def __getattr__(self, key):
  10.         # import ipdb; ipdb.set_trace()
  11.         if key in self.__dict__:
  12.             return super(self, dict).__getattr__(self, key)
  13.         if key not in self.keys():
  14.             self[key] = dotted_dict()
  15.         return self[key]
  16.  
  17.     def __setattr__(self, key, val):
  18.         # import ipdb; ipdb.set_trace()
  19.         if key in self.__dict__:
  20.             return super(self, dict).__setattr__(self, key, val)
  21.         else:
  22.             self[key] = val
  23.  
  24.  
  25. def dot_to_dict(dotted):
  26.     the_d = dotted_dict()
  27.     for k, v in dotted.iteritems():
  28.         exec("the_d.{} = {}".format(k, v))
  29.     return the_d
  30.  
  31.  
  32. def dotted_to_dict(incoming):
  33.     """ Because incoming is a list of dicts, and no benefit can be gained from
  34.    doing a global transformation, let's do it dict by dict."""
  35.     return [dot_to_dict(i) for i in incoming]
  36.  
  37.  
  38. class TestDottedToDict(unittest.TestCase):
  39.     def setUp(self):
  40.         self.dotted = [{'a': 1, 'b.e.f': 2, 'b.e.g': 9, 'c.a': 5, 'c.d': 10},
  41.                        {'a': 6, 'b.f.f': 8, 'b.f.g': 0, 'c.a': None,
  42.                         'c.d': 15},
  43.                        ]
  44.  
  45.         self.expected = [{'a': 1, 'b': {'e': {'f': 2, 'g': 9}},
  46.                           'c': {'a': 5, 'd': 10}},
  47.                          {'a': 6, 'b': {'f': {'f': 8, 'g': 0}},
  48.                           'c': {'a': None, 'd': 15}},
  49.                          ]
  50.  
  51.     def testClasses(self):
  52.         """
  53.        """
  54.         got = dotted_to_dict(self.dotted)
  55.         self.assertEquals(got, self.expected)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement