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
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"
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
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')
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
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'
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)
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