def test_modify_simplified_item(json0, build_first, simplify_first): data = json0 class User(Item): uid = Field(JSONExtractor("id")) username = Field(JSONExtractor("name"), name="name") gender = Field(JSONExtractor("gender"), default=None) complex_extractor = User(JSONExtractor("data.users[*]")) if not simplify_first and build_first: complex_extractor.build() extractor = complex_extractor.simplify() if simplify_first and build_first: extractor.build() assert complex_extractor.extractor.expr == extractor.expr extractor.expr = "data.users[0]" assert complex_extractor.extractor.expr != extractor.expr assert isinstance(extractor, JSONExtractor) assert is_simple_extractor(extractor) assert not is_complex_extractor(extractor) assert repr(extractor) == "UserSimplified('data.users[0]')" assert extractor.extract_first(data) == { "uid": 0, "name": "Vang Stout", "gender": "female", } assert extractor.extract(data) == [{ "uid": 0, "name": "Vang Stout", "gender": "female" }]
def test_simplified_item_extractor_is_none(json0, build_first, simplify_first): data = json0["data"]["users"][0] class User(Item): uid = Field(JSONExtractor("id")) username = Field(JSONExtractor("name"), name="name") gender = Field(JSONExtractor("gender"), default=None) complex_extractor = User() if not simplify_first and build_first: complex_extractor.build() extractor = complex_extractor.simplify() if simplify_first and build_first: extractor.build() assert not isinstance(extractor, JSONExtractor) assert is_simple_extractor(extractor) assert not is_complex_extractor(extractor) assert repr(extractor) == "UserSimplified(None)" assert extractor.extract_first([data]) == { "uid": 0, "name": "Vang Stout", "gender": "female", } assert extractor.extract([data]) == [{ "uid": 0, "name": "Vang Stout", "gender": "female" }]
def test_simplify(json0, build_first, simplify_first): data = json0 class User(Item): uid = Field(JSONExtractor("id")) username = Field(JSONExtractor("name"), name="name") gender = Field(JSONExtractor("gender"), default=None) item = User(JSONExtractor("data.users[*]")) if not simplify_first and build_first: item.build() extractor = item.simplify() if simplify_first and build_first: extractor.build() users_result = [ {"uid": 0, "name": "Vang Stout", "gender": "female"}, {"uid": 1, "name": "Jeannie Gaines", "gender": "male"}, {"uid": 2, "name": "Guzman Hunter", "gender": "female"}, {"uid": 3, "name": "Janine Gross", "gender": None}, {"uid": 4, "name": "Clarke Patrick", "gender": "male"}, {"uid": 5, "name": "Whitney Mcfadden", "gender": None}, ] assert isinstance(extractor, JSONExtractor) assert is_simple_extractor(extractor) assert not is_complex_extractor(extractor) assert repr(extractor) == "UserSimplified('data.users[*]')" assert extractor.expr == "data.users[*]" assert extractor.extract_first(data) == users_result[0] assert extractor.extract(data) == users_result
def test_is_not_simple_extractor(complex_extractor): assert not is_simple_extractor(complex_extractor)
def test_is_simple_extractor(simple_extractor): assert is_simple_extractor(simple_extractor)