コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    def test_merge_dict(self):
        """merge configuration from dict"""
        cd = ConfigDict.from_dict({
            'a': 1,
            'b': {
                'c': 2,
                'd': 3,
                'e': {'h': 4},
                'f': [5,6],
                'g': [7,8]
            }
        })

        cd.merge_dict({
            'a': 11,
            'z': 99,
            'b': {
                'c': 22,
                'e': {'y': 999},
                'g': [77,88],
            }
        })

        self.assertEquals(cd.a,11)
        self.assertEquals(cd.b.c, 22)
        self.assertEquals(cd.b.d, 3)
        self.assertEquals(cd.b.e.h, 4)
        self.assertEquals(cd.b.e.y, 999)
        self.assertEquals(cd.b.f, [5,6])
        self.assertEquals(cd.b.g, [77, 88])
        self.assertEquals(cd.z,99)
コード例 #4
0
    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()
コード例 #5
0
    def test_merge_dict(self):
        """merge configuration from dict"""
        cd = ConfigDict.from_dict({
            'a': 1,
            'b': {
                'c': 2,
                'd': 3,
                'e': {
                    'h': 4
                },
                'f': [5, 6],
                'g': [7, 8]
            }
        })

        cd.merge_dict({
            'a': 11,
            'z': 99,
            'b': {
                'c': 22,
                'e': {
                    'y': 999
                },
                'g': [77, 88],
            }
        })

        self.assertEquals(cd.a, 11)
        self.assertEquals(cd.b.c, 22)
        self.assertEquals(cd.b.d, 3)
        self.assertEquals(cd.b.e.h, 4)
        self.assertEquals(cd.b.e.y, 999)
        self.assertEquals(cd.b.f, [5, 6])
        self.assertEquals(cd.b.g, [77, 88])
        self.assertEquals(cd.z, 99)
コード例 #6
0
    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()
コード例 #7
0
    def test_from_dict(self):
        """create ConfigDict from dict"""
        cd = ConfigDict.from_dict({
            'x': 1,
            'y': {
                'z': 2,
                'w': [1,2, {'v': 22}]
            }
        })

        self.assertEquals(cd.x, 1)
        self.assertEquals(cd['x'], 1)
        self.assertEquals(cd.y.z, 2)
        self.assertEquals(cd['y']['z'], 2)
        self.assertEquals(cd.y.w[2].v, 22)
        self.assertEquals(cd['y']['w'][2]['v'], 22)
コード例 #8
0
    def test_from_dict(self):
        """create ConfigDict from dict"""
        cd = ConfigDict.from_dict({
            'x': 1,
            'y': {
                'z': 2,
                'w': [1, 2, {
                    'v': 22
                }]
            }
        })

        self.assertEquals(cd.x, 1)
        self.assertEquals(cd['x'], 1)
        self.assertEquals(cd.y.z, 2)
        self.assertEquals(cd['y']['z'], 2)
        self.assertEquals(cd.y.w[2].v, 22)
        self.assertEquals(cd['y']['w'][2]['v'], 22)
コード例 #9
0
    def test_merge_configparser(self):
        """merge configuration from ini"""
        cd = ConfigDict.from_dict({
            'a': 1,
            'b': {
                'c': 2,
                'd': 3,
            }
        })

        schema = Schema({
            'a': Coerce(int),
            'z': basestring,
            'b': {
                'c': Coerce(int)
            }
        }, extra=True)
        cd.register_trigger(
            SchemaTrigger(schema)
        )

        cfg = ConfigParser()
        cfg.read_string(u"""
        [main]
        a = 11
        z = 99

        [b]
        c = 22
        """)

        cd.merge_configparser(cfg)
        cd.configure()

        self.assertEquals(cd.a,11)
        self.assertEquals(cd.z, '99')
        self.assertEquals(cd.b.c, 22)
        self.assertEquals(cd.b.d, 3)
コード例 #10
0
    def test_merge_json(self):
        """merge configuration from json"""
        cd = ConfigDict.from_dict({
            'a': 1,
            'b': {
                'c': 2,
                'd': 3,
                'e': {
                    'h': 4
                },
                'f': [5, 6],
                'g': [7, 8]
            }
        })

        cd.merge_json("""{
            "a": 11,
            "z": 99, /* here is a comment */
            "b": {
                "c": 22,
                "e": {"y": 999},
                // another sort of comment
                "g": [77,88]
            }
            /*
            this might be a rather long
            type of comment that spans several lines...
            */
        }""")

        self.assertEquals(cd.a, 11)
        self.assertEquals(cd.b.c, 22)
        self.assertEquals(cd.b.d, 3)
        self.assertEquals(cd.b.e.h, 4)
        self.assertEquals(cd.b.e.y, 999)
        self.assertEquals(cd.b.f, [5, 6])
        self.assertEquals(cd.b.g, [77, 88])
        self.assertEquals(cd.z, 99)
コード例 #11
0
    def test_merge_configparser(self):
        """merge configuration from ini"""
        cd = ConfigDict.from_dict({
            'a': 1,
            'b': {
                'c': 2,
                'd': 3,
            }
        })

        schema = Schema(
            {
                'a': Coerce(int),
                'z': basestring,
                'b': {
                    'c': Coerce(int)
                }
            },
            extra=True)
        cd.register_trigger(SchemaTrigger(schema))

        cfg = ConfigParser()
        cfg.read_string(u"""
        [main]
        a = 11
        z = 99

        [b]
        c = 22
        """)

        cd.merge_configparser(cfg)
        cd.configure()

        self.assertEquals(cd.a, 11)
        self.assertEquals(cd.z, '99')
        self.assertEquals(cd.b.c, 22)
        self.assertEquals(cd.b.d, 3)
コード例 #12
0
    def test_merge_json(self):
        """merge configuration from json"""
        cd = ConfigDict.from_dict({
            'a': 1,
            'b': {
                'c': 2,
                'd': 3,
                'e': {'h': 4},
                'f': [5,6],
                'g': [7,8]
            }
        })

        cd.merge_json("""{
            "a": 11,
            "z": 99, /* here is a comment */
            "b": {
                "c": 22,
                "e": {"y": 999},
                // another sort of comment
                "g": [77,88]
            }
            /*
            this might be a rather long
            type of comment that spans several lines...
            */
        }""")

        self.assertEquals(cd.a,11)
        self.assertEquals(cd.b.c, 22)
        self.assertEquals(cd.b.d, 3)
        self.assertEquals(cd.b.e.h, 4)
        self.assertEquals(cd.b.e.y, 999)
        self.assertEquals(cd.b.f, [5,6])
        self.assertEquals(cd.b.g, [77, 88])
        self.assertEquals(cd.z,99)
コード例 #13
0
class TestMergeFrom(TestCase):

    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 tearDown(self):
        self.conf_file1.close()
        self.conf_file2.close()

    def test_argv(self):
        with mock.patch('sys.argv', ['yo', 'foo', self.conf_filename1]):
            self.cd.merge_from(
                sources.Argv(2),
            )

        print self.cd
        with open(self.conf_filename1, 'r') as f:
            print f.read()

        assert self.cd.whoa.foo == 'bar'

    def test_envvar(self):
        os.environ['DIS_ENVVAR'] = self.conf_filename1

        self.cd.merge_from(
            sources.EnvVar('DIS_ENVVAR'),
        )

        assert self.cd.whoa.foo == 'bar'

    def test_filename(self):
        self.cd.merge_from(
            sources.Filename(self.conf_filename1),
        )

        assert self.cd.whoa.foo == 'bar'

    def test_precedence(self):
        os.environ['DIS_ENVVAR'] = self.conf_filename1

        self.cd.merge_from(
            sources.Argv(2),  # bad source
            sources.Filename(self.conf_filename2),
            sources.EnvVar('DIS_ENVVAR'),  # should not get here
        )

        assert self.cd.whoa.foo == 'BAZ!'
コード例 #14
0
    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()
コード例 #15
0
class TestMergeFrom(TestCase):
    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 tearDown(self):
        self.conf_file1.close()
        self.conf_file2.close()

    def test_argv(self):
        with mock.patch('sys.argv', ['yo', 'foo', self.conf_filename1]):
            self.cd.merge_from(sources.Argv(2), )

        print self.cd
        with open(self.conf_filename1, 'r') as f:
            print f.read()

        assert self.cd.whoa.foo == 'bar'

    def test_envvar(self):
        os.environ['DIS_ENVVAR'] = self.conf_filename1

        self.cd.merge_from(sources.EnvVar('DIS_ENVVAR'), )

        assert self.cd.whoa.foo == 'bar'

    def test_filename(self):
        self.cd.merge_from(sources.Filename(self.conf_filename1), )

        assert self.cd.whoa.foo == 'bar'

    def test_precedence(self):
        os.environ['DIS_ENVVAR'] = self.conf_filename1

        self.cd.merge_from(
            sources.Argv(2),  # bad source
            sources.Filename(self.conf_filename2),
            sources.EnvVar('DIS_ENVVAR'),  # should not get here
        )

        assert self.cd.whoa.foo == 'BAZ!'
コード例 #16
0
    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()