def test_to_dict_simple(): a = [{"a": 1, PATH_KEY: "x"}] loader = Dicts.from_dicts(a) out = loader.map_by(key="a", default="_") assert isinstance(out, dict), "to_dict returns a dict" assert len(out) == 1 assert out[a[0]["a"]] == a[0]
def test_to_dict_transform(): a = [{"a": "aa", "b": "bb", PATH_KEY: "x"}] loader = Dicts.from_dicts(a) pick_b = lambda d: {"b": d["b"]} out = loader.items_as(pick_b).map_by(key="b", default="_") assert isinstance(out, dict), "to_dict returns a dict" assert len(out) == 1 assert out == {"bb": {"b": "bb"}}
def test_filter(): loader = Dicts.from_dicts([ { "animal": "cat", "size": 100 }, { "animal": "dog", "size": 100 }, { "animal": "rat", "size": 1 }, ]) animal = loader.filter(lambda d: d["animal"] == "rat").map_by( "animal", "_") assert animal == {"rat": {"animal": "rat", "size": 1}}
def test_cast_then_key(): data = [ { "animal": "cat", "size": "100" }, { "animal": "dog", "size": "100" }, { "animal": "rat", "size": "1" }, { "animal": "bat", "size": "5", "disabled": True }, ] def animal_size(animal: Animal): return animal.size result = Dicts.from_dicts(data).items_as(Animal).key_by(animal_size, "_") assert result["1"] == [Animal({"animal": "rat", "size": "1"})] assert result["100"] == [ Animal({ "animal": "cat", "size": "100" }), Animal({ "animal": "dog", "size": "100" }), ]
def test_group_by_file(): a = [ { "name": 1, PATH_KEY: "x" }, { "name": 1, PATH_KEY: "y" }, { "name": 2, PATH_KEY: "y" }, { "name": 2 }, ] loader = Dicts.from_dicts(a) out = dict(loader.key_by_file()) assert out == { "x": [{ "name": 1, PATH_KEY: "x" }], "y": [{ "name": 1, PATH_KEY: "y" }, { "name": 2, PATH_KEY: "y" }], DEFAULT_PATH_KEY: [{ "name": 2 }], }
def test_duplicate(): a = [{"name": 1, PATH_KEY: "x"}, {"name": 1, PATH_KEY: "y"}] loader = Dicts.from_dicts(a) with pytest.raises(ValueError): loader.map_by(key="name", default="_")
def test_group_by_unordered(): a = [{PATH_KEY: "a"}, {PATH_KEY: "c"}, {PATH_KEY: "b"}, {PATH_KEY: "a"}] loader = Dicts.from_dicts(a) out = loader.key_by_file() assert len(out["a"]) == 2