示例#1
0
def test_item_attr_caching():
    result = c({
        "item": c.item(0).pipe(c.item(0, default=None)),
        "item2": c.item(0).pipe(c.item(0, 1, default=None)),
        "item3": c.item(0, default=-1).item(0, default=-2),
        "item4": c.item(2, default=-1).item(0, default=-2),
        "attr": c.item(1).pipe(c.attr("year", default=None)),
        "attr2": c.item(1).pipe(c.attr("year", "month", default=None)),
        "attr3": c.item(1, default=-1).attr("year", default=-2),
        "attr4": c.item(2, default=-1).attr("year", default=-2),
    }).execute([[1], date(1970, 1, 1)])
    assert result == {
        "item": 1,
        "item2": None,
        "item3": 1,
        "item4": -2,
        "attr": 1970,
        "attr2": None,
        "attr3": 1970,
        "attr4": -2,
    }

    converter = (c.this.or_(None).item(
        c.item("key"), default=c.item("default")).gen_converter())
    assert converter({"key": "abc", "abc": 1, "default": -1}) == 1
    assert converter({"key": "abc", "default": -1}) == -1
示例#2
0
def test_naive_conversion_attr():
    TestType = namedtuple("TestType", ["field_a", "field_b"])
    obj = TestType(1, 2)

    assert c.naive(obj).attr("field_b").gen_converter()(100) == 2
    assert c.naive(obj).attr("field_b", "real").gen_converter()(100) == 2
    with pytest.raises(AttributeError):
        c.naive(obj).attr("field_c").gen_converter()(100)

    assert c.attr(c.naive(["field_a"]).item(0)).gen_converter()(obj) == 1