Example #1
0
def test_pipeline_propagate_attrs():
    a1 = Slicerator(list(range(10)))
    a1.attr1 = 10
    a2 = Slicerator(list(range(10, 20)))
    a2.attr1 = 20
    a2.attr2 = 30

    p1 = Pipeline(lambda x, y: x + y,
                  a1,
                  a2,
                  propagate_attrs={"attr1", "attr2"},
                  propagate_how=0)
    assert (p1.attr1 == 10)
    try:
        p1.attr2
    except AttributeError:
        pass
    else:
        raise AssertionError("attr2 should not exist")

    p2 = Pipeline(lambda x, y: x + y,
                  a1,
                  a2,
                  propagate_attrs={"attr1", "attr2"},
                  propagate_how=1)
    assert (p2.attr1 == 20)
    assert (p2.attr2 == 30)

    p3 = Pipeline(lambda x, y: x + y,
                  a1,
                  a2,
                  propagate_attrs={"attr1", "attr2"},
                  propagate_how="first")
    assert (p3.attr1 == 10)
    assert (p3.attr2 == 30)

    p4 = Pipeline(lambda x, y: x + y,
                  a1,
                  a2,
                  propagate_attrs={"attr1", "attr2"},
                  propagate_how="last")
    assert (p4.attr1 == 20)
    assert (p4.attr2 == 30)

    a1.attr3 = 40
    a1.attr4 = 50
    a1._propagate_attrs = {"attr3"}
    a1.propagate_attrs = {"attr4"}
    p5 = Pipeline(lambda x, y: x + y, a1, a2, propagate_how="first")
    assert (p5.attr3 == 40)
    assert (p5.attr4 == 50)
    try:
        p5.attr1
    except AttributeError:
        pass
    else:
        raise AssertionError("attr1 should not exist")
    try:
        p5.attr2
    except AttributeError:
        pass
    else:
        raise AssertionError("attr2 should not exist")