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
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