def test_integration(self): os.environ["BOOL"] = "true" os.environ["BOOLSTRING"] = "\"false\"" os.environ["DICT"] = "{ \"dict\": \"value\", \"list-in-dict\": [ \"nested-list1\", \"nested-list2\" ] }" os.environ["FLOAT"] = "1.23" os.environ["INT"] = "123" os.environ["KEY"] = "value" os.environ["LIST"] = "[ \"list1\", \"list2\", { \"dict-in-list\": \"value\" } ]" os.environ["STRING_WITH_SPECIALS"] = "Test!@#$%^&*()-_=+[]{};:,<.>/?\\\'\"`~" os.environ["TUPLE"] = "(123, \"string\")" os.environ["COMPLEX"] = "1+2j" Pconf.env( whitelist=[ 'KEY', 'INT', 'FLOAT', 'COMPLEX', 'LIST', 'DICT', 'TUPLE', 'BOOL', 'BOOLSTRING', 'STRING_WITH_SPECIALS' ], parse_values=True, to_lower=True, convert_underscores=True ) config = Pconf.get() self.assertEqual(config, IntegrationBase.result)
def test_integration_yaml(self): self.maxDiff = None IntegrationBase.result.pop('complex') IntegrationBase.result.pop('tuple') Pconf.file('./tests/integration/example.yaml', encoding='yaml') config = Pconf.get() self.assertEqual(config, IntegrationBase.result)
def test_env_optional_params(self): separator = "separator" match = "match" whitelist = ["whitelist"] parse_values = True to_lower = True convert_underscores = True docker_secrets = ["secret_FILE"] Pconf.env( separator, match, whitelist, parse_values, to_lower, convert_underscores, docker_secrets, ) pconf.store.env.Env.assert_called_once_with( separator, match, whitelist, parse_values, to_lower, convert_underscores, docker_secrets, ) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_argv(self): arg_name = TEST_ARGV["name"] Pconf.argv(arg_name) pconf.store.argv.Argv.assert_called_once_with(arg_name, None, None, None) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_file_optional_params(self): encoding = "custom" mock_parser = MagicMock() Pconf.file(path=TEST_FILE_PATH, encoding=encoding, parser=mock_parser) pconf.store.file.File.assert_called_once_with(TEST_FILE_PATH, encoding, mock_parser) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_integration_yaml(self): self.maxDiff = None IntegrationBase.result.pop("complex") IntegrationBase.result.pop("tuple") IntegrationBase.result.pop("secret") Pconf.file("./tests/integration/example.yaml", encoding="yaml") config = Pconf.get() self.assertEqual(config, IntegrationBase.result)
def test_integration_json(self): self.maxDiff = None # Remove values that are not json encodeable IntegrationBase.result.pop('complex') IntegrationBase.result.pop('tuple') Pconf.file('./tests/integration/example.json', encoding='json') config = Pconf.get() self.assertEqual(config, IntegrationBase.result)
def test_integration_json(self): self.maxDiff = None # Remove values that are not json encodeable IntegrationBase.result.pop("complex") IntegrationBase.result.pop("tuple") IntegrationBase.result.pop("secret") Pconf.file("./tests/integration/example.json", encoding="json") config = Pconf.get() self.assertEqual(config, IntegrationBase.result)
def test_argv_type_optional(self): arg_name = TEST_ARGV["name"] arg_short_name = TEST_ARGV["short_name"] arg_type = TEST_ARGV["type"] arg_help = TEST_ARGV["help"] Pconf.argv(arg_name, arg_short_name, arg_type, arg_help) pconf.store.argv.Argv.assert_called_once_with(arg_name, arg_short_name, arg_type, arg_help) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_env_get(self, mock_env): mocked_env = MagicMock() mocked_env.get.return_value = TEST_ENV_RESULT mock_env.return_value = mocked_env Pconf.env() results = Pconf.get() mocked_env.get.assert_called_once() for key in TEST_ENV_RESULT: self.assertTrue(key in results) self.assertEqual(results[key], TEST_ENV_RESULT[key])
def test_argv_get(self, mock_argv): mocked_argv = MagicMock() mocked_argv.get.return_value = TEST_ARGV_RESULT mock_argv.return_value = mocked_argv arg_name = TEST_ARGV["name"] Pconf.argv(arg_name) results = Pconf.get() for key in TEST_ARGV_RESULT: self.assertTrue(key in results) self.assertEqual(results[key], TEST_ARGV_RESULT[key])
def test_file_get(self, mock_file): mocked_file = MagicMock() mocked_file.get.return_value = TEST_FILE_RESULT mock_file.return_value = mocked_file Pconf.file(path=TEST_FILE_PATH) results = Pconf.get() mocked_file.get.assert_called_once() for key in TEST_FILE_RESULT: self.assertTrue(key in results) self.assertEqual(results[key], TEST_FILE_RESULT[key])
def setUp(self): Pconf.clear() self.TEST_FILE_PATH = "test" self.TEST_FILE_RESULT = { "file": "result", "overlapping": "file", "deep": {"stillhere": "stillhere", "overlapping": "file"}, } self.TEST_ENV_RESULT = { "env": "result", "overlapping": "env", "deep": {"overlapping": "env"}, }
def setUp(self): Pconf.clear() IntegrationBase.result = { 'tuple': (123, 'string'), 'int': 123, 'float': 1.23, 'list': ['list1', 'list2', {'dict-in-list': 'value'}], 'complex': (1+2j), 'bool': True, 'key': 'value', 'boolstring': 'false', 'string-with-specials': 'Test!@#$%^&*()-_=+[]{};:,<.>/?\\\'"\\`~', 'dict': {'dict': 'value', 'list-in-dict': ['nested-list1', 'nested-list2']} }
def test_env_optional_params(self): separator = 'separator' match = 'match' whitelist = 'whitelist' parse_values = True to_lower = True convert_underscores = True Pconf.env(separator, match, whitelist, parse_values, to_lower, convert_underscores) pconf.store.env.Env.assert_called_once_with(separator, match, whitelist, parse_values, to_lower, convert_underscores) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def setUp(self): Pconf.clear() self.TEST_FILE_PATH = 'test' self.TEST_FILE_RESULT = { 'file': 'result', 'overlapping': 'file', 'deep': { 'stillhere': 'stillhere', 'overlapping': 'file' } } self.TEST_ENV_RESULT = { 'env': 'result', 'overlapping': 'env', 'deep': { 'overlapping': 'env' } }
def setUp(self): Pconf.clear() IntegrationBase.result = { "tuple": (123, "string"), "int": 123, "float": 1.23, "list": ["list1", "list2", { "dict-in-list": "value" }], "complex": (1 + 2j), "bool": True, "key": "value", "boolstring": "false", "string-with-specials": "Test!@#$%^&*()-_=+[]{};:,<.>/?\\'\"`~", "dict": { "dict": "value", "list-in-dict": ["nested-list1", "nested-list2"] }, "secret": "secret", }
def test_backward(self, mock_file, mock_env): mocked_env = MagicMock() mocked_env.get.return_value = self.TEST_ENV_RESULT mock_env.return_value = mocked_env mocked_file = MagicMock() mocked_file.get.return_value = self.TEST_FILE_RESULT mock_file.return_value = mocked_file Pconf.file(self.TEST_FILE_PATH) Pconf.env() results = Pconf.get() expected = { "file": "result", "env": "result", "overlapping": "file", "deep": {"stillhere": "stillhere", "overlapping": "file"}, } self.assertEqual(expected, results)
def test_integration(self): os.environ["BOOL"] = "true" os.environ["BOOLSTRING"] = '"false"' os.environ[ "DICT" ] = '{ "dict": "value", "list-in-dict": [ "nested-list1", "nested-list2" ] }' os.environ["FLOAT"] = "1.23" os.environ["INT"] = "123" os.environ["KEY"] = "value" os.environ["LIST"] = '[ "list1", "list2", { "dict-in-list": "value" } ]' os.environ["STRING_WITH_SPECIALS"] = "Test!@#$%^&*()-_=+[]{};:,<.>/?\\'\"`~" os.environ["TUPLE"] = '(123, "string")' os.environ["COMPLEX"] = "1+2j" os.environ["SECRET_FILE"] = "./tests/integration/example_secret" Pconf.env( whitelist=[ "KEY", "INT", "FLOAT", "COMPLEX", "LIST", "DICT", "TUPLE", "BOOL", "BOOLSTRING", "STRING_WITH_SPECIALS", "SECRET_FILE", ], parse_values=True, to_lower=True, convert_underscores=True, docker_secrets=["SECRET_FILE"], ) config = Pconf.get() self.assertEqual(config, IntegrationBase.result)
def test_backward(self, mock_file, mock_env): mocked_env = MagicMock() mocked_env.get.return_value = self.TEST_ENV_RESULT mock_env.return_value = mocked_env mocked_file = MagicMock() mocked_file.get.return_value = self.TEST_FILE_RESULT mock_file.return_value = mocked_file Pconf.file(self.TEST_FILE_PATH) Pconf.env() results = Pconf.get() expected = { 'file': 'result', 'env': 'result', 'overlapping': 'file', 'deep': { 'stillhere': 'stillhere', 'overlapping': 'file' } } self.assertEqual(expected, results)
def _init(self, logger): """Read the configuration data from files and profile""" if not self.is_init: if self.pconf_obj: self.pconf_obj.clear() Pconf.clear() Pconf.env() dir = self.get_dir() env_name = self.profile if (len(self.profile)) else os.getenv( 'PY_ENV', 'production') logger.debug('Configuration dir %s with env %s', dir, env_name) if path.isdir(dir): env_file = '' if env_name == 'production': env_file = '%s/production_config.json' % dir elif env_name == 'development': env_file = '%s/development_conf.json' % dir elif env_name == 'integration': env_file = '%s/integration_config.json' % dir elif env_name == 'test': env_file = '%s/test_config.json' % dir elif env_name == 'test_e2e': env_file = '%s/test_e2e_config.json' % dir else: raise ConfigLoadError('Unknown configuration profile: %s' % env_name) if not os.path.exists(env_file): raise ConfigLoadError('Missing configuration file: %s' % env_file) Pconf.file(env_file, encoding='json') base_cfg_file = '%s/config.json' % dir if not os.path.exists(base_cfg_file): raise ConfigLoadError('Missing configuration file: %s' % base_cfg_file) Pconf.file('%s/config.json' % dir, encoding='json') else: raise ConfigLoadError('Missing directory: %s' % dir) self.is_init = True self.pconf_obj = Pconf.get()
def test_env(self): Pconf.env() pconf.store.env.Env.assert_called_once_with(None, None, None, None, None, None, None) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_file(self): Pconf.file(path=TEST_FILE_PATH) pconf.store.file.File.assert_called_once_with(TEST_FILE_PATH, None, None) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_get_empty_dict_by_default(self): self.assertEqual(Pconf.get(), {})
def setUp(self): Pconf.clear()
def test_clear(self): Pconf.defaults(TEST_OVERRIDES) self.assertEqual(Pconf.get(), TEST_OVERRIDES) Pconf.clear() self.assertEqual(Pconf.get(), {})
def test_defaults(self): Pconf.defaults(TEST_DEFAULTS) pconf.store.memory.Memory.assert_called_once_with(TEST_DEFAULTS) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)
def test_overrides_get(self): Pconf.defaults(TEST_OVERRIDES) self.assertEqual(Pconf.get(), TEST_OVERRIDES)
def test_defaults_get(self): Pconf.defaults(TEST_DEFAULTS) self.assertEqual(Pconf.get(), TEST_DEFAULTS)
def test_overrides(self): Pconf.overrides(TEST_OVERRIDES) pconf.store.memory.Memory.assert_called_once_with(TEST_OVERRIDES) self.assertEqual(len(Pconf._Pconf__hierarchy), 1)