diff --git a/image_prediction/config.py b/image_prediction/config.py index f37658f..4696191 100644 --- a/image_prediction/config.py +++ b/image_prediction/config.py @@ -18,12 +18,12 @@ class DotIndexable: def __getattr__(self, item): return _get_item_and_maybe_make_dotindexable(self.x, item) - def __setitem__(self, key, value): - self.x[key] = value - def __repr__(self): return self.x.__repr__() + def __getitem__(self, item): + return self.__getattr__(item) + class Config: def __init__(self, config_path): diff --git a/test/unit_tests/config_test.py b/test/unit_tests/config_test.py new file mode 100644 index 0000000..8c16cf8 --- /dev/null +++ b/test/unit_tests/config_test.py @@ -0,0 +1,38 @@ +import tempfile + +import pytest +import yaml + +from image_prediction.config import Config + + +@pytest.fixture +def config_file_content(): + return {"A": [{"B": [1, 2]}, {"C": 3}, 4], "D": {"E": {"F": True}}} + + +@pytest.fixture +def config(config_file_content): + with tempfile.NamedTemporaryFile(suffix=".yaml", mode="w") as f: + yaml.dump(config_file_content, f, default_flow_style=False) + yield Config(f.name) + + +def test_dot_access_key_exists(config): + assert config.A == [{"B": [1, 2]}, {"C": 3}, 4] + assert config.D.E["F"] + + +def test_access_key_exists(config): + assert config["A"] == [{"B": [1, 2]}, {"C": 3}, 4] + assert config["A"][0] == {"B": [1, 2]} + assert config["A"][0]["B"] == [1, 2] + assert config["A"][0]["B"][0] == 1 + + +def test_dot_access_key_does_not_exists(config): + assert config.B is None + + +def test_access_key_does_not_exists(config): + assert config["B"] is None