def test_attribute_access(self): """access ConfigDict keys as attributes""" cd = ConfigDict() cd['x'] = 1 self.assertEquals(cd.x, 1) cd.y = 2 self.assertEquals(cd['y'], 2)
def setUp(self): self.cd = ConfigDict() self.conf_file1 = NamedTemporaryFile(suffix='.ini') self.conf_filename1 = self.conf_file1.name self.conf_file2 = NamedTemporaryFile(suffix='.ini') self.conf_filename2 = self.conf_file2.name self.conf_file1.write( textwrap.dedent(""" [whoa] foo = bar """)) self.conf_file2.write( textwrap.dedent(""" [whoa] foo = BAZ! """)) self.conf_file1.flush() self.conf_file2.flush()
def test_schema(self): """test/merge a schema to loaded configuration""" # schema for what the 'some_service' configuration # ought to look like. schema = Schema({ 'some_service': { 'host': basestring, 'port': Coerce(int), Required('pool_size', default=5): All(Coerce(int), Range(min=1, max=20)), 'credentials': { 'username': basestring, 'password': basestring } } }) cd = ConfigDict() cd.register_trigger(SchemaTrigger(schema)) cd.merge_dict({ 'some_service': { 'host': 'xyz', 'port': 123, 'credentials': { 'username': '******', 'password': '******' } } }) cd.configure() self.assertEquals(cd.some_service.host, 'xyz') self.assertEquals(cd.some_service.port, 123) self.assertEquals(cd.some_service.pool_size, 5) self.assertEquals(cd.some_service.credentials.username, 'foo') self.assertEquals(cd.some_service.credentials.password, 'bar') # integer coersion should take care of '123' instead of 123 cd = ConfigDict() cd.register_trigger(SchemaTrigger(schema)) cd.merge_dict({ 'some_service': { 'host': 'xyz', 'port': '123', 'credentials': { 'username': '******', 'password': '******' } } }) cd.configure() self.assertEquals(cd.some_service.host, 'xyz') self.assertEquals(cd.some_service.port, 123) self.assertEquals(cd.some_service.pool_size, 5) self.assertEquals(cd.some_service.credentials.username, 'foo') self.assertEquals(cd.some_service.credentials.password, 'bar') cd = ConfigDict() cd.register_trigger(SchemaTrigger(schema)) cd.merge_dict({ 'some_service': { 'host': 'xyz', 'port': 123, 'pool_size': 21, 'credentials': { 'username': '******', 'password': '******' } } }) # not valid -- pool_size out of range with self.assertRaises(MultipleInvalid): cd.configure()