Skip to content

Commit 2ca989d

Browse files
committed
✨ add list field typed accessors
1 parent 7f28c6f commit 2ca989d

File tree

2 files changed

+56
-10
lines changed

2 files changed

+56
-10
lines changed

mindee/parsing/v2/field/list_field.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
FieldType,
88
get_field_type,
99
)
10+
from mindee.parsing.v2.field.object_field import ObjectField
11+
from mindee.parsing.v2.field.simple_field import SimpleField
1012

1113

1214
class ListField(BaseField):
@@ -22,6 +24,28 @@ def __init__(self, raw_response: StringDict, indent_level: int = 0):
2224
for item in raw_response["items"]:
2325
self.items.append(get_field_type(item))
2426

27+
@property
28+
def simple_items(self) -> List[SimpleField]:
29+
"""List of items as ``SimpleField``."""
30+
simple_items = []
31+
for item in self.items:
32+
if isinstance(item, SimpleField):
33+
simple_items.append(item)
34+
else:
35+
raise ValueError("List item is not a simple field.")
36+
return simple_items
37+
38+
@property
39+
def object_items(self) -> List[ObjectField]:
40+
"""List of items as ``ObjectField``."""
41+
object_items = []
42+
for item in self.items:
43+
if isinstance(item, ObjectField):
44+
object_items.append(item)
45+
else:
46+
raise ValueError("List item is not an object field.")
47+
return object_items
48+
2549
def __str__(self) -> str:
2650
out_str = ""
2751
indent = " " * self._indent_level

tests/v2/test_inference_response.py

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,35 @@ def test_standard_field_types():
129129
assert isinstance(
130130
inference_result.inference.result.fields["field_object"], ObjectField
131131
)
132-
assert isinstance(
133-
inference_result.inference.result.fields["field_simple_list"], ListField
134-
)
135-
assert isinstance(
136-
inference_result.inference.result.fields["field_object_list"], ListField
137-
)
138132
assert rst_sample == str(inference_result)
139133

140134

135+
@pytest.mark.v2
136+
def test_standard_field_object_list():
137+
json_sample, _ = _get_inference_samples("standard_field_types")
138+
inference_result = InferenceResponse(json_sample)
139+
assert isinstance(inference_result.inference, Inference)
140+
141+
field_object_list = inference_result.inference.result.fields["field_object_list"]
142+
assert isinstance(field_object_list, ListField)
143+
assert len(field_object_list.items) == 2
144+
for object_field in field_object_list.object_items:
145+
assert isinstance(object_field, ObjectField)
146+
147+
148+
@pytest.mark.v2
149+
def test_standard_field_simple_list():
150+
json_sample, _ = _get_inference_samples("standard_field_types")
151+
inference_result = InferenceResponse(json_sample)
152+
assert isinstance(inference_result.inference, Inference)
153+
154+
field_simple_list = inference_result.inference.result.fields["field_simple_list"]
155+
assert isinstance(field_simple_list, ListField)
156+
assert len(field_simple_list.simple_items) == 2
157+
for object_field in field_simple_list.simple_items:
158+
assert isinstance(object_field, SimpleField)
159+
160+
141161
@pytest.mark.v2
142162
def test_raw_texts():
143163
json_sample, rst_sample = _get_inference_samples("raw_texts")
@@ -159,18 +179,20 @@ def test_full_inference_response():
159179

160180
assert isinstance(inference_result.inference, Inference)
161181
assert inference_result.inference.id == "12345678-1234-1234-1234-123456789abc"
162-
assert isinstance(inference_result.inference.result.fields.date, SimpleField)
182+
assert isinstance(inference_result.inference.result.fields["date"], SimpleField)
163183
assert inference_result.inference.result.fields["date"].value == "2019-11-02"
164-
assert isinstance(inference_result.inference.result.fields.taxes, ListField)
184+
assert isinstance(inference_result.inference.result.fields["taxes"], ListField)
165185
assert isinstance(
166186
inference_result.inference.result.fields["taxes"].items[0], ObjectField
167187
)
168188
assert (
169-
inference_result.inference.result.fields["customer_address"].fields.city.value
189+
inference_result.inference.result.fields["customer_address"]
190+
.fields["city"]
191+
.value
170192
== "New York"
171193
)
172194
assert (
173-
inference_result.inference.result.fields.taxes.items[0].fields["base"].value
195+
inference_result.inference.result.fields["taxes"].items[0].fields["base"].value
174196
== 31.5
175197
)
176198

0 commit comments

Comments
 (0)