@classmethod
def _merge_recursive(cls, config_a, config_b, path=None):
    """Merge second configuration into first configuration.
        https://stackoverflow.com/a/7205107
        """
    if path is None:
        path = []
    for key in config_b:
        if key in config_a:
            if isinstance(config_a[key], dict) and isinstance(config_b[key],
                dict):
                cls._merge_recursive(config_a[key], config_b[key], path + [
                    str(key)])
            elif config_a[key] == config_b[key]:
                pass
            elif config_b[key] is None:
                pass
            else:
                dpath = '.'.join(path + [str(key)])
                raise Exception(f'configuration conflict at {dpath}')
        else:
            config_a[key] = config_b[key]
    return config_a
