def test_deepcopy(self): """ """ from max.utils.dicts import deepcopy from max.models import User actor = User.from_object(None, {'username': '******', 'displayName': 'Sheldon'}) old_dict = { 'level1_key': { 'level2_key': { 'level3_key': {}, 'level3_value': 54 }, 'level2_value': [ {'inner': 'item'} ] }, 'actor': actor } dict_copy = deepcopy(old_dict) # Dicts and lists get copied self.assertNotEqual(id(old_dict), id(dict_copy)) self.assertNotEqual(id(old_dict['level1_key']), id(dict_copy['level1_key'])) self.assertNotEqual(id(old_dict['level1_key']['level2_key']), id(dict_copy['level1_key']['level2_key'])) self.assertNotEqual(id(old_dict['level1_key']['level2_value']), id(dict_copy['level1_key']['level2_value'])) self.assertNotEqual(id(old_dict['level1_key']['level2_key']['level3_key']), id(dict_copy['level1_key']['level2_key']['level3_key'])) self.assertNotEqual(id(old_dict['level1_key']['level2_value'][0]), id(dict_copy['level1_key']['level2_value'][0])) # Primitives and objects remain referenced self.assertEqual(id(old_dict['actor']), id(dict_copy['actor'])) self.assertEqual(id(old_dict['level1_key']['level2_key']['level3_value']), id(dict_copy['level1_key']['level2_key']['level3_value'])) self.assertEqual(id(old_dict['level1_key']['level2_value'][0]['inner']), id(dict_copy['level1_key']['level2_value'][0]['inner']))
def test_recursive_update_dict(self): """ """ from max.utils.dicts import RUDict from max.models import User actor = User.from_object(None, {'username': '******', 'displayName': 'Sheldon'}) old_dict = { 'level1_key': { 'level2_key': { 'level3_key': {}, 'level3_value': 54 }, 'level2_value': [] }, 'actor': {} } new_dict = { 'level1_key': { 'level2_key': { 'level3_key': { 'new_value': 'new' }, }, 'level2_key2': {'value': 3} }, 'actor': actor } rdict = RUDict(old_dict) rdict.update(new_dict) self.assertIsInstance(rdict['actor'], User) self.assertEqual(rdict['level1_key']['level2_value'], []) self.assertEqual(rdict['level1_key']['level2_key']['level3_value'], 54) self.assertEqual(rdict['level1_key']['level2_key']['level3_key']['new_value'], 'new') self.assertEqual(rdict['level1_key']['level2_key2']['value'], 3) self.assertNotEqual(id(rdict['level1_key']), id(new_dict['level1_key']['level2_key'])) self.assertNotEqual(id(rdict['level1_key']['level2_key']), id(new_dict['level1_key']['level2_key'])) self.assertNotEqual(id(rdict['level1_key']['level2_key2']), id(new_dict['level1_key']['level2_key2'])) self.assertEqual(id(rdict['level1_key']['level2_key']['level3_key']['new_value']), id(new_dict['level1_key']['level2_key']['level3_key']['new_value'])) self.assertEqual(id(rdict['actor']), id(new_dict['actor']))