Exemple #1
0
 def test_merge_incompatible(self):
     """Ensure that the merged items are of the same types"""
     a = DotDict(foo=42)
     b = DotDict(foo='42')
     self.assertRaises(TypeError, merge_dicts, a, b)
     b = DotDict(foo={})
     self.assertRaises(TypeError, merge_dicts, a, b)
Exemple #2
0
 def test_create(self):
     """Ensure that we support all dict creation methods"""
     by_attr = DotDict(one=1, two=2)
     by_dict = DotDict({'one': 1, 'two': 2})
     by_list = DotDict([['one', 1], ['two', 2]])
     self.assertEqual(by_attr, by_dict)
     self.assertEqual(by_attr, by_list)
Exemple #3
0
 def test_replacement(self):
     """Ensure that the new entries in B replace equivalents in A"""
     a = DotDict(a=1, b=1)
     b = DotDict(b=2)
     c = merge_dicts(a, b)
     self.assertEqual(c.a, 1)
     self.assertEqual(c.b, 2)
Exemple #4
0
 def test_merge(self):
     """Ensure that the new entries in B are merged into A"""
     a = DotDict(a=1, b=1)
     b = DotDict(c=1)
     c = merge_dicts(a, b)
     self.assertEqual(c.a, 1)
     self.assertEqual(c.b, 1)
     self.assertEqual(c.c, 1)
Exemple #5
0
 def test_merge_lists(self):
     """Ensure that leaf lists are merged"""
     a = DotDict(a=1, sub=[1, 2])
     b = DotDict(b=2, sub=[3, 4])
     c = merge_dicts(a, b)
     self.assertEqual(c.a, 1)
     self.assertEqual(c.b, 2)
     self.assertEqual(c.sub, [1, 2, 3, 4])
Exemple #6
0
 def test_replace_missing_with_dict(self):
     """Ensure that a subtree from B replaces a MissingValue in A"""
     a = DotDict(a=1, sub=MissingValue('sub'))
     b = DotDict(b=2, sub={'c': 2})
     c = merge_dicts(a, b)
     self.assertEqual(c.a, 1)
     self.assertEqual(c.b, 2)
     self.assertEqual(c.sub.c, 2)
Exemple #7
0
 def test_sub_replacement(self):
     """Ensure that a subtree from B is merged with the same subtree in A"""
     a = DotDict(a=1, sub={'c': 1})
     b = DotDict(b=2, sub={'c': 2})
     c = merge_dicts(a, b)
     self.assertEqual(c.a, 1)
     self.assertEqual(c.b, 2)
     self.assertEqual(c.sub.c, 2)
Exemple #8
0
 def test_update(self):
     """Ensure that update works"""
     tree = DotDict({'foo': 'bar'})
     tree.update({'foo': {}})
     self.assertIsInstance(tree.foo, DotDict)
     tree.update(bar={})
     self.assertIsInstance(tree.bar, DotDict)
     tree.update([['baz', {}]])
     self.assertIsInstance(tree.baz, DotDict)
Exemple #9
0
def smush_config(sources, initial=None):
    """Merge the configuration sources and return the resulting DotDict."""
    if initial is None:
        initial = {}
    config = DotDict(initial)

    for fn in sources:
        log.debug('Merging %s', fn)
        mod = get_config_module(fn)
        config = mod.update(config)
        log.debug('Current config:\n%s',
                  json.dumps(config, indent=4, cls=LenientJSONEncoder))
    return config
Exemple #10
0
def read_config(app_dir):
    path = os.path.join(app_dir, 'configuration.json')
    with open(path, 'r') as f:
        return DotDict(json.load(f))
Exemple #11
0
 def test_unnamed_missing_value(self):
     """Ensure that missing values get a name assigned"""
     a = DotDict()
     b = DotDict(foo=MissingValue())
     c = merge_dicts(a, b)
     self.assertEqual(c.foo.name, 'foo')
Exemple #12
0
 def test_unnamed_missing_value_in_new_tree(self):
     """Ensure that missing values in new sub-trees get a name assigned"""
     a = DotDict()
     b = DotDict(foo={'bar': MissingValue()})
     c = merge_dicts(a, b)
     self.assertEqual(c.foo.bar.name, 'foo.bar')
Exemple #13
0
 def test_filter(self):
     """Ensure that the subset of A is filtered out using keys"""
     a = DotDict(a=1, b=1)
     keys = ['a']
     b = filter_dict(a, keys)
     self.assertEqual(b, {'a': 1})
Exemple #14
0
 def test_replace_none(self):
     """Ensure that None can be replaced with another type"""
     a = DotDict(foo=None)
     b = DotDict(foo='foo')
     c = merge_dicts(a, b)
     self.assertEqual(c, {'foo': 'foo'})
Exemple #15
0
 def test_attribute_access(self):
     d = DotDict(foo=MissingValue('foo'))
     self.assertRaises(AttributeError, lambda x: x.foo.bar, d)
Exemple #16
0
 def test_list_of_dicts(self):
     """Ensure that nested dicts insied lists are converted to DotDicts"""
     tree = DotDict({'foo': [{'bar': True}]})
     self.assertIsInstance(tree['foo'][0], DotDict)
Exemple #17
0
 def test_set_dotted(self):
     """Ensure that DotDict can set values using a dotted key"""
     tree = DotDict()
     tree['foo.bar.baz'] = 'huzzah'
     self.assertEqual(tree['foo.bar.baz'], 'huzzah')
Exemple #18
0
 def test_get_dotted(self):
     """Ensure that DotDict can get values using a dotted key"""
     tree = DotDict({'foo': {'bar': {'baz': 'huzzah'}}})
     self.assertEqual(tree['foo.bar.baz'], 'huzzah')
Exemple #19
0
 def test_deepcopy(self):
     """Ensure that DotDict can be deepcopied"""
     tree = DotDict({'foo': 'bar'})
     self.assertEqual(tree, copy.deepcopy(tree))
Exemple #20
0
 def test_deltedvalue(self):
     """Ensure that deletedvalue deletes values"""
     a = DotDict(foo=42)
     b = DotDict(foo=DeletedValue())
     c = merge_dicts(a, b)
     self.assertEqual(c, {})
Exemple #21
0
 def test_setdefault(self):
     """Ensure that the setdefault works"""
     tree = DotDict({'foo': 'bar'})
     tree.setdefault('baz', {})
     self.assertIsInstance(tree.baz, DotDict)
Exemple #22
0
 def test_mutablity(self):
     """Ensure that the whole tree is mutable"""
     tree = DotDict({'foo': {'bar': True}})
     self.assertTrue(tree.foo.bar)
     tree.foo.bar = False
     self.assertFalse(tree.foo.bar)
Exemple #23
0
def filter_config(config, deploy_config):
    """Return a config subset using the filter defined in the deploy config."""
    if not os.path.isfile(deploy_config):
        return DotDict()
    config_module = get_config_module(deploy_config)
    return config_module.filter(config)
Exemple #24
0
 def test_dict_access(self):
     d = DotDict(foo=MissingValue('foo'))
     self.assertRaises(KeyError, d.foo.get, 'bar')
     self.assertRaises(KeyError, lambda x: x.foo['bar'], d)
Exemple #25
0
 def test_create_tree(self):
     """Ensure that nested dicts are converted to DotDicts"""
     tree = DotDict({'foo': {'bar': True}})
     self.assertIsInstance(tree['foo'], DotDict)