Esempio n. 1
0
def test_configuration_update_default_value(default_config):
    config_manager = ConfigManager(defaults=default_config)
    assert config_manager.get('absentkey3.absentkey3.absentkey3') is None
    config_manager.set('absentkey3.absentkey3.absentkey3', "value", default=True)
    config_manager.set('absentkey4', "value", default=True)

    assert config_manager.as_dict().get('absentkey3') is None
Esempio n. 2
0
def test_configuration_setting_raise_exception(sample_config):
    config_manager = ConfigManager()
    config_manager.set_many(sample_config)
    with pytest.raises(AttributeError):
        config_manager.set('nested_list.0.1', 'simple')

    config_manager.set('absentkey4', "value")
    with pytest.raises(AttributeError):
        assert config_manager.get('absentkey4.absentkey3.absentkey3') == "value"
Esempio n. 3
0
    def __init__(self, prefix, **kwargs):
        """
            Initialize the handler data store.
            :param prefix: environment prefix for configuration map
            :type key: string
        """
        super().__init__()
        configmanager = ConfigManager()
        for key, value in os.environ.items():
            if key.startswith(prefix + "_"):
                configmanager.set(
                    key.replace(prefix + "_", "").replace("_", ".").lower(),
                    value)

        self.in_memory_config = configmanager.as_dict()
        self.config = self.in_memory_config
Esempio n. 4
0
def test_configuration_setting_nested_keys(sample_config):
    config_manager = ConfigManager()
    config_manager.set_many(sample_config)
    config_manager.set('key1', 'simple')
    config_manager.set('key2.key2', 'simple')
    config_manager.set('key3.key3.key3', 'simple')

    assert 'simple' == config_manager.get('key1')
    assert 'simple' == config_manager.get('key2.key2')
    assert 'simple' == config_manager.get('key3.key3.key3')
Esempio n. 5
0
def test_configuration_trigger_commit(sample_config):
    config_manager = ConfigManager()

    config_manager.set_many(sample_config)
    config_manager.commit()
    assert sample_config['simple'] == config_manager.get('simple')

    config_manager.set('new_key', 'new_value')
    assert config_manager.handler.updated is False
    config_manager.set('new_key2', 'new_value2', trigger_commit=False)
    assert config_manager.handler.updated is True
    config_manager.commit()
    assert config_manager.handler.updated is False

    config_manager.set('new_key', 'new_value', trigger_commit=True)
    assert config_manager.handler.updated is False
Esempio n. 6
0
def test_nested_key():
    config_manager = ConfigManager()
    config_manager.set('key1.key2', 'value')
    assert config_manager.handler.config.get('key1') is not None
    assert config_manager.handler.config.get('key1').get('key2') == 'value'
Esempio n. 7
0
def test_configuration_setting(sample_config):
    config_manager = ConfigManager()
    for key, value in sample_config.items():
        config_manager.set(key, value)

    assert_configuration_content(config_manager, sample_config)
Esempio n. 8
0
    def create(*, project_name, encoding='utf-8', environment=None, defaults=None):
        if defaults is None:
            defaults = {}
        # load defaults from home directory
        config_file = Config._get_config_file_path(project_name, "default")
        found_config_file = False
        if os.path.exists(config_file):
            logging.getLogger(__name__).info("loading default configurations from %s", config_file)
            config = ConfigManager(path=config_file, encoding=encoding, defaults=defaults)
            found_config_file = True
        # load environment configurations from environment variables
        # fix prefix to be SC
        prefix = "SC"
        env_config = ConfigManager(prefix=prefix)

        key_env = "environment"
        if environment is None:
            environment = env_config.get(key_env)
            if environment is None:
                # use production configuration if not specified environment
                environment = "production"
                logging.getLogger(__name__).info("did not specify environment, using %s", environment)
        else:
            logging.getLogger(__name__).info("using environment: %s", environment)

        # load environment configurations from /var/opt/sc directory
        env_config_file = Config._get_config_file_path(project_name, environment)
        if os.path.exists(env_config_file):
            logging.getLogger(__name__).info("loading environmental configurations from %s", env_config_file)
            if not found_config_file:
                config = ConfigManager(path=env_config_file, encoding=encoding, defaults=defaults)
                found_config_file = True
            else:
                config.set_many(ConfigManager(path=env_config_file, encoding=encoding).as_dict())

        # load environment configurations from user directory
        user_config_file = Config._get_user_dir_config_file_path(project_name, environment)
        if os.path.exists(user_config_file):
            logging.getLogger(__name__).info("loading user directory configurations from %s", user_config_file)
            if not found_config_file:
                config = ConfigManager(path=user_config_file, encoding=encoding, defaults=defaults)
                found_config_file = True
            else:
                config.set_many(ConfigManager(path=user_config_file, encoding=encoding).as_dict())

        # load environment configurations from current directory
        current_dir_config_file = Config._get_cur_dir_config_file_path(environment)
        if os.path.exists(current_dir_config_file):
            logging.getLogger(__name__).info("loading current directory configurations from %s", current_dir_config_file)
            logging.getLogger(__name__).info(f"found_config_file: {found_config_file}")
            if not found_config_file:
                config = ConfigManager(path=current_dir_config_file, encoding=encoding, defaults=defaults)
                found_config_file = True
            else:
                config.set_many(ConfigManager(path=current_dir_config_file, encoding=encoding).as_dict())
        
        if not found_config_file:
            config = ConfigManager(defaults=defaults)
        config.set_many(env_config.as_dict())
        config.set(key_env, environment)
        return config