File size: 1,690 Bytes
60eb8f0
 
6cd55ac
b4d68d5
 
 
6cd55ac
 
 
 
 
 
b4d68d5
6cd55ac
 
b4d68d5
 
 
 
6cd55ac
b4d68d5
 
6cd55ac
b4d68d5
 
6cd55ac
b4d68d5
 
6cd55ac
b4d68d5
 
 
6cd55ac
b4d68d5
 
6cd55ac
b4d68d5
 
 
 
6cd55ac
b4d68d5
 
 
 
 
 
 
 
6cd55ac
 
b4d68d5
 
 
 
6cd55ac
b4d68d5
 
6cd55ac
b4d68d5
 
6cd55ac
b4d68d5
 
 
6cd55ac
b4d68d5
60eb8f0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from sparky.utils.decompose import select, selecta, sliceable


def test_sliceable():
    from collections import namedtuple

    Foo = sliceable(namedtuple("Foo", "a,b,c,d"))

    foo = Foo(1, 2, 3, 4)
    assert (2,) == foo["b"]
    assert (1, 3) == foo["a c"]
    assert (1, 3) == foo[["a", "c"]]
    assert (1, 3) == foo[[0, 2]]
    assert (2, 3, 4) == foo["b:d"]
    assert foo == (1, 2, 3, 4)


def test_select():
    data = {"a": 1, "b": 2, "c": 3, "d": 4}

    # Single key access
    assert (2,) == select(data, "b")

    # Multiple keys with spaces
    assert (1, 3) == select(data, "a c")

    # Multiple keys as list
    assert (1, 3) == select(data, ["a", "c"])

    # Handles various string formats
    assert (1, 3) == select(data, "a,c")
    assert (1, 3) == select(data, "a, c")

    # Missing keys return None
    assert (1, None, 3) == select(data, "a x c")

    # Works with custom objects
    class Config:
        def get(self, key, default=None):
            return getattr(self, key, default)

    cfg = Config()
    cfg.host = "localhost"
    cfg.port = 5432
    assert ("localhost", 5432) == select(cfg, "host,port")


def test_selecta():
    from collections import namedtuple

    Foo = namedtuple("Foo", "a,b,c,d")
    data = Foo(1, 2, 3, 4)

    # Single key access
    assert (2,) == selecta(data, "b")

    # Multiple keys with spaces
    assert (1, 3) == selecta(data, "a c")

    # Multiple keys as list
    assert (1, 3) == selecta(data, ["a", "c"])

    # Handles various string formats
    assert (1, 3) == selecta(data, "a,c")
    assert (1, 3) == selecta(data, "a, c")

    # Missing keys return None
    assert (1, None, 3) == selecta(data, "a x c")