Example #1
0
    def test_override(self):
        """
        Overrides work as expected.
        """

        default = {
            'value1': 'foo',
            'list': [ 'foo' ],
            'dict': {
                'value2': 'foo',
                'value3': 'foo'
                },
            }

        override = {
            'value1': 'bar',
            'list': [ 'bar' ],
            'dict': {
                'value2': 'bar',
                'value4': 'bar'
                },
            }

        merged = merge(default, override)

        # primitive values are replaced
        self.assertEqual('bar', merged['value1'])

        # lists are replaced
        self.assertEqual(['bar'], merged['list'])

        # dictionaries are recursively merged
        self.assertEqual('bar', merged['dict']['value2'])
        self.assertEqual('foo', merged['dict']['value3'])
        self.assertEqual('bar', merged['dict']['value4'])
Example #2
0
    def test_override(self):
        """
        Overrides work as expected.
        """

        default = {
            'value1': 'foo',
            'list': ['foo'],
            'dict': {
                'value2': 'foo',
                'value3': 'foo'
            },
        }

        override = {
            'value1': 'bar',
            'list': ['bar'],
            'dict': {
                'value2': 'bar',
                'value4': 'bar'
            },
        }

        merged = merge(default, override)

        # primitive values are replaced
        self.assertEqual('bar', merged['value1'])

        # lists are replaced
        self.assertEqual(['bar'], merged['list'])

        # dictionaries are recursively merged
        self.assertEqual('bar', merged['dict']['value2'])
        self.assertEqual('foo', merged['dict']['value3'])
        self.assertEqual('bar', merged['dict']['value4'])
Example #3
0
    def test_no_inputs(self):
        """
        Sane results if no inputs are provided.
        """

        merged = merge()

        self.assertEquals(merged, {})
Example #4
0
    def test_no_inputs(self):
        """
        Sane results if no inputs are provided.
        """

        merged = merge()

        self.assertEquals(merged, {})
Example #5
0
    def test_no_overrride(self):
        """
        Sane results if no overrides are provided.
        """

        default = {'foo': 'bar'}

        merged = merge(default)

        self.assertEquals(merged, default)
Example #6
0
    def test_no_overrride(self):
        """
        Sane results if no overrides are provided.
        """

        default = {
            'foo' : 'bar'
            }

        merged = merge(default)

        self.assertEquals(merged, default)
Example #7
0
    def test_override_custom(self):
        """
        Custom append() and prepend() lists append and prepend to
        the origin using N-ary merge.
        """

        default = {'list': ['two']}

        override1 = {'list': append('three', 'four')}

        override2 = {'list': prepend('one')}

        merged = merge(default, override1, override2)

        self.assertEquals(merged['list'], ['one', 'two', 'three', 'four'])
Example #8
0
    def __call__(self, componentdef):
        """
        Load the data for the current configuration.

        :param component: a component definition.
        """
        is_not_none = lambda x: x is not None

        module_names = filter(is_not_none, self._list_modules(componentdef))

        load_module = lambda module_name: import_configuration(module_name, self.data_dir)

        module_dicts = map(load_module, module_names)

        confab_data = dict(confab=dict(environment=componentdef.environment,
                                       host=componentdef.host,
                                       component=componentdef.name))

        return merge(confab_data, *module_dicts)
Example #9
0
    def test_override_custom(self):
        """
        Custom append() and prepend() lists append and prepend to
        the origin using N-ary merge.
        """

        default = {
            'list': [ 'two' ]
            }

        override1 = {
            'list': append('three', 'four')
            }

        override2 = {
            'list': prepend('one')
            }

        merged = merge(default, override1, override2)

        self.assertEquals(merged['list'], ['one', 'two', 'three', 'four'])
Example #10
0
    def __call__(self, componentdef):
        """
        Load the data for the current configuration.

        :param component: a component definition.
        """
        def load_modules():
            for scope, module_name in self._list_modules(componentdef):
                yield import_configuration(module_name, *self.data_dirs, scope=scope)

                if not self._ignore_hooks:
                    for hook in hooks.for_scope(scope):
                        if hook.filter(componentdef):
                            yield hook(module_name)

        confab_data = dict(confab=dict(environment=componentdef.environment,
                                       host=componentdef.host,
                                       role=componentdef.role,
                                       component=componentdef.name))

        return merge(confab_data, *load_modules())
Example #11
0
def load_data_from_dir(data_dir):
    """
    Load and merge configuration data.
    
    Configuration data is loaded from python files by type,
    where type is defined to include defaults, per-environment values,
    per-role values and per-host values.
    """

    is_not_none = lambda x: x is not None

    module_names = filter(is_not_none,
                          [ 'default',
                            _get_environment_module(),
                            _get_role_module(),
                            _get_host_module() ])

    load_module = lambda module_name: import_configuration(module_name, data_dir)

    module_dicts = filter(is_not_none, map(load_module, module_names))

    return merge(*module_dicts)
Example #12
0
File: data.py Project: disko/confab
    def __call__(self, component):
        """
        Load the data for the given component.

        :param component: a component path, i.e. `{role}/{sub-component}/{component}`.
        """
        is_not_none = lambda x: x is not None

        module_names = filter(is_not_none,
                              chain(['default'],
                                    _get_component_modules(component),
                                    [_get_environment_module(),
                                     _get_host_module()]))

        load_module = lambda module_name: import_configuration(module_name, self.data_dir)

        module_dicts = filter(is_not_none, map(load_module, module_names))

        confab_data = dict(confab=dict(environment=options.get_environmentname(),
                                       host=options.get_hostname(),
                                       component=component))

        return merge(confab_data, *module_dicts)
Example #13
0
    def __call__(self, componentdef):
        """
        Load the data for the current configuration.

        :param component: a component definition.
        """
        def load_modules():
            for scope, module_name in self._list_modules(componentdef):
                yield import_configuration(module_name,
                                           *self.data_dirs,
                                           scope=scope)

                if not self._ignore_hooks:
                    for hook in hooks.for_scope(scope):
                        if hook.filter(componentdef):
                            yield hook(module_name)

        confab_data = dict(confab=dict(environment=componentdef.environment,
                                       host=componentdef.host,
                                       role=componentdef.role,
                                       component=componentdef.name))

        return merge(confab_data, *load_modules())
Example #14
0
    def check_override(self, default, override, expected=None):

        merged = merge(default, override)

        self.assertEqual(merged, expected or default)
Example #15
0
    def check_override(self, default, override, expected=None):

        merged = merge(default, override)

        self.assertEqual(merged, expected or default)