def test_contains(self): config = Configuration({"a": {"b": 1}}) self.assertTrue("a" in config) self.assertFalse("foo" in config) view = config.get("a") self.assertTrue("b" in view) self.assertFalse("foo" in view)
def test_contains(self): config = Configuration({'a': {'b': 1}}) self.assertTrue('a' in config) self.assertFalse('foo' in config) view = config.get('a') self.assertTrue('b' in view) self.assertFalse('foo' in view)
def test_env_replacement(self): config = Configuration({ 'replace': 'prefix_$(env.FOO_BAR)_suffix', 'type_conversion': 'prefix_$(env.FOURTYTWO)', 'keep_int': '$(env.FOURTYTWO)', 'keep_dict': '$(env.DICT)', 'no_parens': '$env.FOO_BAR', 'no_namespace': '$(FOO_BAR)', 'nested': '$(var.nested.foo)', 'dashes': '$(var.dashed-name)', }, env={ 'FOO_BAR': '42', 'FOURTYTWO': 42, 'DICT': {}, }, var=Configuration({ 'dashed-name': True, 'nested': { 'foo': 1764, } })) self.assertEqual(config.get('replace'), 'prefix_42_suffix') self.assertEqual(config.get('type_conversion'), 'prefix_42') self.assertEqual(config.get('keep_int'), 42) self.assertEqual(config.get('keep_dict'), {}) self.assertEqual(config.get('no_parens'), '$env.FOO_BAR') self.assertEqual(config.get('no_namespace'), '$(FOO_BAR)') self.assertEqual(config.get('nested'), 1764) self.assertEqual(config.get('dashes'), True)
def test_setdefault_without_previous_value(self): config = Configuration({ 'nested': {} }) config.setdefault('foo', 1) self.assertEqual(config.get('foo'), 1) config.setdefault('nested.foo', 2) self.assertEqual(config.get('nested.foo'), 2)
class DisabledHealtcheckTest(WebServiceTestCase): service_class = DisabledHealtcheckInterface service_config = Configuration({'healthcheck': {'enabled': False}}) def test_health_404(self): response = self.client.get('/_health/') self.assertEqual(response.status_code, 404)
def test_get_missing_key(self): config = Configuration({'a': {'b': 1}, 'c': None}) self.assertIsNone(config.get('x')) self.assertEqual(config.get('x', 2), 2) self.assertIsNone(config.get('x.x'), None) self.assertEqual(config.get('x.x', 2), 2) self.assertIsNone(config.get('c.x'), None) self.assertEqual(config.get('c.x', 2), 2)
class RequestTraceIdPropagation(WebServiceTestCase): service_class = Web service_config = Configuration({ 'tracing': { 'request_header': 'X-Trace-Id' }, }) def test_trace_id_propagation(self): response = self.client.get('/test/', headers={'X-Trace-Id': 'forced'}) self.assertEqual(response.headers.get('X-Trace-Id'), 'forced')
class CustomHealthcheckEndpointTest(WebServiceTestCase): service_class = CustomHealthcheckEndpointInterface service_config = Configuration({'healthcheck': {'endpoint': '/_foo/'}}) def test_health_404(self): response = self.client.get('/_health/') self.assertEqual(response.status_code, 404) def test_custom_endpoint_200(self): response = self.client.get('/_foo/') self.assertEqual(response.status_code, 200)
def test_get_missing_key(self): config = Configuration({"a": {"b": 1}, "c": None}) self.assertIsNone(config.get("x")) self.assertEqual(config.get("x", 2), 2) self.assertIsNone(config.get("x.x"), None) self.assertEqual(config.get("x.x", 2), 2) self.assertIsNone(config.get("c.x"), None) self.assertEqual(config.get("c.x", 2), 2)
class GetInstanceTest(unittest.TestCase): config = Configuration( {"thing": { "class": "%s:ConfigurableThing" % __name__, }}) def test_creates_instance_based_on_configuration(self): instance = self.config.get_instance("thing") self.assertIsInstance(instance, ConfigurableThing) def test_returns_the_same_instance_on_multiple_invocations(self): instance_1 = self.config.get_instance("thing") instance_2 = self.config.get_instance("thing") self.assertIs(instance_1, instance_2)
class StorageInterfaceTest(StoreTestCase, RPCServiceTestCase): service_class = None # Define the interface here service_config = Configuration({ "store": { "class": "lymph.sqlalchemy.store:Store", "uri": "postgresql://postgres/lymph-test-sqlalchemy" } }) @classmethod def url(cls): return cls.service_config.get("store.uri") @classmethod def create_store(cls, connection=None): store = cls.service_config.get_instance('store') store.connection = connection return store
class GetDependencyTest(unittest.TestCase): config = Configuration({ "dependencies": { "thing": { "class": "%s:ConfigurableThing" % __name__ }, }, "key": { "client": "dep:thing", } }) def test_creates_instance_based_on_configuration(self): instance = self.config.get_instance("key.client") self.assertIsInstance(instance, ConfigurableThing) def test_returns_the_same_instance_on_multiple_invocations(self): instance_1 = self.config.get_instance("key.client") instance_2 = self.config.get_instance("key.client") self.assertIs(instance_1, instance_2)
class CreateInstanceTest(unittest.TestCase): config = Configuration({ "thing": { "class": "%s:ConfigurableThing" % __name__, "param": 41 }, "section": { "thing": { "class": "%s:ConfigurableThing" % __name__, "param": 42 }, } }) def test_create_instance(self): obj = self.config.create_instance('thing') self.assertIsInstance(obj, ConfigurableThing) self.assertEqual(obj.config['param'], 41) def test_create_instance_on_view(self): config = self.config.get('section') obj = config.create_instance('thing') self.assertIsInstance(obj, ConfigurableThing) self.assertEqual(obj.config['param'], 42)
def test_env_replacement(self): config = Configuration( { "replace": "prefix_$(env.FOO_BAR)_suffix", "type_conversion": "prefix_$(env.FOURTYTWO)", "keep_int": "$(env.FOURTYTWO)", "keep_dict": "$(env.DICT)", "no_parens": "$env.FOO_BAR", "no_namespace": "$(FOO_BAR)", "nested": "$(var.nested.foo)", "dashes": "$(var.dashed-name)", }, env={"FOO_BAR": "42", "FOURTYTWO": 42, "DICT": {}}, var=Configuration({"dashed-name": True, "nested": {"foo": 1764}}), ) self.assertEqual(config.get("replace"), "prefix_42_suffix") self.assertEqual(config.get("type_conversion"), "prefix_42") self.assertEqual(config.get("keep_int"), 42) self.assertEqual(config.get("keep_dict"), {}) self.assertEqual(config.get("no_parens"), "$env.FOO_BAR") self.assertEqual(config.get("no_namespace"), "$(FOO_BAR)") self.assertEqual(config.get("nested"), 1764) self.assertEqual(config.get("dashes"), True)
def test_update(self): config = Configuration({'a': 1, 'b': {'c': 2}}) config.update({'a': 2}) self.assertEqual(config.get('a'), 2) self.assertEqual(config.get('b.c'), 2)
def generate_from_config(config_file): """Generate schema from config file path.""" config = Configuration() config.load_file(config_file) return Schema(_get_interfaces(config))
def test_config_view_get(self): config = Configuration({"namespace": {"values": {"foo": 42}}}) config_view = config.get("namespace") self.assertEqual(config_view.get("values.foo"), 42)
def test_config_view_get(self): config = Configuration({'namespace': {'values': {'foo': 42}}}) config_view = config.get('namespace') self.assertEqual(config_view.get('values.foo'), 42)
def test_update(self): config = Configuration({"a": 1, "b": {"c": 2}}) config.update({"a": 2}) self.assertEqual(config.get("a"), 2) self.assertEqual(config.get("b.c"), 2)
def test_setdefault_with_previous_value(self): config = Configuration({"foo": 1, "nested": {"foo": 2}}) config.setdefault("foo", 0) self.assertEqual(config.get("foo"), 1) config.setdefault("nested.foo", 0) self.assertEqual(config.get("nested.foo"), 2)
def setup_config(args): import os import sys from lymph.config import Configuration from lymph.utils.sockets import guess_external_ip vars_file = args.get('--vars') or os.environ.get('LYMPH_VARS') env_vars = Configuration(raw=True) if vars_file: env_vars.load_file(vars_file) os.environ['LYMPH_VARS'] = vars_file config = Configuration({'container': {}}, env=os.environ, var=env_vars) if 'LYMPH_NODE_CONFIG' in os.environ: config.load_file(os.environ['LYMPH_NODE_CONFIG'], sections=[ 'container', 'registry', 'event_system', 'plugins', 'dependencies' ]) config_file = args.get('--config') or os.environ.get( 'LYMPH_CONFIG', '.lymph.yml') config.load_file(config_file) config.source = config_file config.setdefault('container.ip', os.environ.get('LYMPH_NODE_IP', '127.0.0.1')) ip = args.get('--ip') if args.get('--guess-external-ip'): if ip: sys.exit('Cannot combine --ip and --guess-external-ip') ip = guess_external_ip() if ip is None: sys.exit('Cannot guess external ip, aborting ...') if ip: config.set('container.ip', ip) port = args.get('--port') if port: config.set('container.port', port) return config
def load_yaml(self, yml): return Configuration(yaml.load(textwrap.dedent(yml)))
def setup_config(args): import os import sys from lymph.config import Configuration from lymph.utils.sockets import guess_external_ip vars_file = args.get('--vars') or os.environ.get('LYMPH_VARS') env_vars = Configuration(raw=True) if vars_file: env_vars.load_file(vars_file) os.environ['LYMPH_VARS'] = vars_file config = Configuration({'container': {}}, env=os.environ, var=env_vars) if 'LYMPH_NODE_CONFIG' in os.environ: config.load_file(os.environ['LYMPH_NODE_CONFIG'], sections=['container', 'registry', 'event_system', 'plugins', 'dependencies']) config_file = args.get('--config') or os.environ.get('LYMPH_CONFIG', '.lymph.yml') config.load_file(config_file) config.source = config_file config.setdefault('container.ip', os.environ.get('LYMPH_NODE_IP', '127.0.0.1')) ip = args.get('--ip') if args.get('--guess-external-ip'): if ip: sys.exit('Cannot combine --ip and --guess-external-ip') ip = guess_external_ip() if ip is None: sys.exit('Cannot guess external ip, aborting ...') if ip: config.set('container.ip', ip) port = args.get('--port') if port: config.set('container.port', port) return config
def setup_config(args): import os from lymph.config import Configuration from lymph.utils.sockets import guess_external_ip config = Configuration({ 'container': {} }) if 'IRIS_NODE_CONFIG' in os.environ: config.load_file(os.environ['IRIS_NODE_CONFIG'], sections=['registry', 'event_system', 'plugins']) config_file = args.get('--config') or '.lymph.yml' config.load_file(config_file) config.source = config_file config.setdefault('container.ip', os.environ.get('IRIS_NODE_IP', '127.0.0.1')) ip = args.get('--ip') if args.get('--guess-external-ip'): if ip: print('cannot combine --ip and --guess-external-ip') return 1 ip = guess_external_ip() if ip: config.set('container.ip', ip) port = args.get('--port') if port: config.set('container.port', port) return config
def setup_config(args): import os from lymph.config import Configuration from lymph.utils.sockets import guess_external_ip config = Configuration({'container': {}}) if 'IRIS_NODE_CONFIG' in os.environ: config.load_file(os.environ['IRIS_NODE_CONFIG'], sections=['registry', 'event_system', 'plugins']) config_file = args.get('--config') or '.lymph.yml' config.load_file(config_file) config.source = config_file config.setdefault('container.ip', os.environ.get('IRIS_NODE_IP', '127.0.0.1')) ip = args.get('--ip') if args.get('--guess-external-ip'): if ip: print('cannot combine --ip and --guess-external-ip') return 1 ip = guess_external_ip() if ip: config.set('container.ip', ip) port = args.get('--port') if port: config.set('container.port', port) return config