Beispiel #1
0
def full_relation():
    has_email = treehorn.GoDown(condition=treehorn.HasKey('email'))
    has_city = treehorn.GoDown(condition=treehorn.HasKey('city'))
    has_email + 'email'
    has_city + 'city'
    sample_relation = treehorn.Relation('sample')
    sample_relation == (has_email + 'email')['email'] > (has_city + 'city')['city']
    return sample_relation
Beispiel #2
0
def test_not_list(sample_traced_object):
    obj = treehorn.GoDown(condition=~treehorn.IsList(), label='sample')
    result = list(obj(sample_traced_object))
    result = []
    for i in obj(sample_traced_object):
        result.append(copy.deepcopy(i))
    objects_in = [
        sample_traced_object["bar"],
        sample_traced_object["bar"],
        sample_traced_object["baz"],
        sample_traced_object["a"],
        sample_traced_object["a1"],
        sample_traced_object["a1"]["b1"],
        sample_traced_object["a1"]["b1"]["c1"],
        sample_traced_object["a1"]["b1"]["e"],
    ]

    objects_out = [
        sample_traced_object["qux"],
        sample_traced_object["a1"]["b1"]["some_list"],
    ]
    result_values = [i['sample'] for i in result]
    for obj in objects_in:
        assert obj in result_values
    for obj in objects_out:
        assert obj not in result_values
Beispiel #3
0
def test_has_key_in_conjunction_finds_node(sample_traced_object):
    obj = treehorn.GoDown(condition=treehorn.HasKey("c1") & treehorn.HasKey("e"), label='sample')
    result = list(obj(sample_traced_object))
    assert result[0] == treehorn.splitter(
            {'sample': {"c1": "d1", "some_list": [10, 20, 40], "e": "whatever"}}
    )
    assert len(result) == 1
Beispiel #4
0
def test_has_descendant_dictionary(sample_traced_object):
    obj = treehorn.GoDown(condition=treehorn.HasDescendant(treehorn.IsDictionary()))
    obj(sample_traced_object)
    result = list(obj._generator)
    assert sample_traced_object["qux"] in result
    assert sample_traced_object["a1"] in result
    assert sample_traced_object["a"] in result
    assert len(result) == 3
    print(result)
Beispiel #5
0
def test_has_key_in_disjunction_negation_finds_node(sample_traced_object):
    obj = treehorn.GoDown(
        condition=treehorn.HasKey("c1") & (~treehorn.HasKey("nonexistent")), label='sample'
    )
    result = list(obj(sample_traced_object))
    # result = list(obj._generator)
    assert result[0] == treehorn.splitter(
            {'sample': {"c1": "d1", "some_list": [10, 20, 40], "e": "whatever"}}
    )
    assert len(result) == 1
Beispiel #6
0
def p_traversal(p):
    """traversal : START AT condition
                 | GO DOWN UNTIL condition
                 | GO UP UNTIL condition
                 | traversal AS LABEL
    """
    if len(p) == 4 and p[1] == "START" and p[2] == "AT":
        p[0] = treehorn.GoDown(condition=p[3])
    elif len(p) == 5 and p[1] == "GO" and p[2] == "DOWN" and p[3] == "UNTIL":
        p[0] = treehorn.GoDown(condition=p[4])
    elif len(p) == 5 and p[1] == "GO" and p[2] == "UP" and p[3] == "UNTIL":
        p[0] = treehorn.GoUp(condition=p[4])
    elif len(p) == 4 and p[2] == "AS":
        p[0] = p[1]
        (p[0] + p[3])  ###### [p[3]]
    elif len(p) == 2:
        p[0] = p[1]
    else:
        raise Exception("This should never happen.")
Beispiel #7
0
def city_condition():
    has_city_key = treehorn.GoDown(condition=treehorn.HasKey('city'))
    has_city_key + 'city'
    return has_city_key
Beispiel #8
0
def email_condition():
    has_email_key = treehorn.GoDown(condition=treehorn.HasKey('email'))
    return has_email_key
Beispiel #9
0
def test_has_key_correctly_finds_nothing(sample_traced_object):
    obj = treehorn.GoDown(condition=treehorn.HasKey("nonexistent"))
    result = list(obj(sample_traced_object))
    assert len(result) == 0
Beispiel #10
0
def test_traversal_creates_generator(sample_traced_object):
    obj = treehorn.GoDown(condition=treehorn.HasKey("a1"), label='sample')
    assert obj(sample_traced_object) is not None
Beispiel #11
0
def test_instantiate_downward_traversal():
    obj = treehorn.GoDown()
    assert isinstance(obj, (treehorn.GoDown,))
Beispiel #12
0
def test_and(sample_traced_object):
    obj = treehorn.GoDown(condition=treehorn.HasKey("c1") & treehorn.HasKey("e"), label='sample')
    result = list(obj(sample_traced_object))
    assert len(result) == 1