Example #1
0
def test_json():
    tmpdir = tempfile.mkdtemp()
    try:
        root_data = dict(a=1, x=2, nest={'a': 1, 'x': 2})
        with open(os.path.join(tmpdir, 'foo.json'), 'w') as f:
            json.dump(root_data, f)
        # also make a foo.d/ directory with multiple json files
        os.makedirs(os.path.join(tmpdir, 'foo.d'))
        with open(os.path.join(tmpdir, 'foo.d', 'a.json'), 'w') as f:
            json.dump(dict(a=2, b=1, nest={'a': 2, 'b': 1}), f)
        with open(os.path.join(tmpdir, 'foo.d', 'b.json'), 'w') as f:
            json.dump(
                dict(a=3,
                     b=2,
                     c=3,
                     nest={
                         'a': 3,
                         'b': 2,
                         'c': 3
                     },
                     only_in_b={'x': 1}), f)
        manager = BaseJSONConfigManager(config_dir=tmpdir,
                                        read_directory=False)
        data = manager.get('foo')
        assert 'a' in data
        assert 'x' in data
        assert 'b' not in data
        assert 'c' not in data
        assert data['a'] == 1
        assert 'x' in data['nest']
        # if we write it out, it also shouldn't pick up the subdirectoy
        manager.set('foo', data)
        data = manager.get('foo')
        assert data == root_data

        manager = BaseJSONConfigManager(config_dir=tmpdir, read_directory=True)
        data = manager.get('foo')
        assert 'a' in data
        assert 'b' in data
        assert 'c' in data
        # files should be read in order foo.d/a.json foo.d/b.json foo.json
        assert data['a'] == 1
        assert data['b'] == 2
        assert data['c'] == 3
        assert data['nest']['a'] == 1
        assert data['nest']['b'] == 2
        assert data['nest']['c'] == 3
        assert data['nest']['x'] == 2

        # when writing out, we don't want foo.d/*.json data to be included in the root foo.json
        manager.set('foo', data)
        manager = BaseJSONConfigManager(config_dir=tmpdir,
                                        read_directory=False)
        data = manager.get('foo')
        assert data == root_data

    finally:
        shutil.rmtree(tmpdir)
def test_json(tmp_path):
    tmpdir = str(tmp_path)

    root_data = dict(a=1, x=2, nest={"a": 1, "x": 2})
    with open(os.path.join(tmpdir, "foo.json"), "w") as f:
        json.dump(root_data, f)
    # also make a foo.d/ directory with multiple json files
    os.makedirs(os.path.join(tmpdir, "foo.d"))
    with open(os.path.join(tmpdir, "foo.d", "a.json"), "w") as f:
        json.dump(dict(a=2, b=1, nest={"a": 2, "b": 1}), f)
    with open(os.path.join(tmpdir, "foo.d", "b.json"), "w") as f:
        json.dump(
            dict(a=3,
                 b=2,
                 c=3,
                 nest={
                     "a": 3,
                     "b": 2,
                     "c": 3
                 },
                 only_in_b={"x": 1}), f)
    manager = BaseJSONConfigManager(config_dir=tmpdir, read_directory=False)
    data = manager.get("foo")
    assert "a" in data
    assert "x" in data
    assert "b" not in data
    assert "c" not in data
    assert data["a"] == 1
    assert "x" in data["nest"]
    # if we write it out, it also shouldn't pick up the subdirectoy
    manager.set("foo", data)
    data = manager.get("foo")
    assert data == root_data

    manager = BaseJSONConfigManager(config_dir=tmpdir, read_directory=True)
    data = manager.get("foo")
    assert "a" in data
    assert "b" in data
    assert "c" in data
    # files should be read in order foo.d/a.json foo.d/b.json foo.json
    assert data["a"] == 1
    assert data["b"] == 2
    assert data["c"] == 3
    assert data["nest"]["a"] == 1
    assert data["nest"]["b"] == 2
    assert data["nest"]["c"] == 3
    assert data["nest"]["x"] == 2

    # when writing out, we don't want foo.d/*.json data to be included in the root foo.json
    manager.set("foo", data)
    manager = BaseJSONConfigManager(config_dir=tmpdir, read_directory=False)
    data = manager.get("foo")
    assert data == root_data