Skip to content

Commit 19aaaa7

Browse files
authored
🐛 fix typing of extraction response when chained (#402)
1 parent 85a7d52 commit 19aaaa7

9 files changed

Lines changed: 58 additions & 71 deletions

File tree

mindee/v2/product/classification/classification_classifier.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Optional
2+
13
from mindee.parsing.common.string_dict import StringDict
24
from mindee.parsing.v2.inference_response import InferenceResponse
35

@@ -8,7 +10,7 @@ class ClassificationClassifier:
810
document_type: str
911
"""The document type, as identified on given classification values."""
1012

11-
extraction_response: InferenceResponse
13+
extraction_response: Optional[InferenceResponse] = None
1214
"""The extraction response associated with the classification."""
1315

1416
def __init__(self, server_response: StringDict):

mindee/v2/product/crop/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from mindee.v2.product.crop.crop_box import CropBox
22
from mindee.v2.product.crop.crop_inference import CropInference
3+
from mindee.v2.product.crop.crop_item import CropItem
34
from mindee.v2.product.crop.crop_parameters import CropParameters
45
from mindee.v2.product.crop.crop_response import CropResponse
56
from mindee.v2.product.crop.crop_result import CropResult
67

78
__all__ = [
89
"CropBox",
10+
"CropItem",
911
"CropInference",
1012
"CropParameters",
1113
"CropResponse",

mindee/v2/product/crop/crop_box.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
from mindee.parsing.v2.inference_response import InferenceResponse
1+
from typing import Optional
2+
23
from mindee.extraction import ExtractedImage, extract_multiple_images_from_source
3-
from mindee.input.sources.local_input_source import LocalInputSource
4+
from mindee.input import LocalInputSource
45
from mindee.parsing.common.string_dict import StringDict
5-
from mindee.parsing.v2.field.field_location import FieldLocation
6+
from mindee.parsing.v2.field import FieldLocation
7+
from mindee.parsing.v2.inference_response import InferenceResponse
68

79

810
class CropBox:
9-
"""Crop inference result."""
11+
"""Deprecated class. Use CropItem instead."""
1012

1113
location: FieldLocation
1214
"""Location which includes cropping coordinates for the detected object, within the source document."""
15+
1316
object_type: str
1417
"""Type or classification of the detected object."""
15-
extraction_response: InferenceResponse
18+
19+
extraction_response: Optional[InferenceResponse] = None
1620
"""The extraction response associated with the crop."""
1721

1822
def __init__(self, server_response: StringDict):

mindee/v2/product/crop/crop_inference.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class CropInference(BaseInference):
88

99
result: CropResult
1010
"""Result of a crop inference."""
11+
1112
_slug: str = "crop"
1213
"""Slug of the endpoint."""
1314

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from mindee.v2.product.crop.crop_box import CropBox
2+
3+
4+
class CropItem(CropBox):
5+
"""Result of a cropped document region."""

mindee/v2/product/crop/crop_result.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
from typing import List
22

33
from mindee.parsing.common.string_dict import StringDict
4-
from mindee.v2.product.crop.crop_box import CropBox
4+
from mindee.v2.product.crop.crop_item import CropItem
55

66

77
class CropResult:
88
"""Crop result info."""
99

10-
crops: List[CropBox]
10+
crops: List[CropItem]
1111

1212
def __init__(self, raw_response: StringDict) -> None:
13-
self.crops = [CropBox(crop) for crop in raw_response["crops"]]
13+
self.crops = [CropItem(crop) for crop in raw_response["crops"]]
1414

1515
def __str__(self) -> str:
1616
crops = "\n"

mindee/v2/product/split/split_inference.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class SplitInference(BaseInference):
88

99
result: SplitResult
1010
"""Result of a split inference."""
11+
1112
_slug: str = "split"
1213
"""Slug of the endpoint."""
1314

mindee/v2/product/split/split_range.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import List
1+
from typing import List, Optional
22

33
from mindee.parsing.v2.inference_response import InferenceResponse
44
from mindee.extraction.pdf_extractor.extracted_pdf import ExtractedPdf
@@ -15,9 +15,11 @@ class SplitRange:
1515
0-based page indexes, where the first integer indicates the start page and the
1616
second integer indicates the end page.
1717
"""
18+
1819
document_type: str
1920
"""The document type, as identified on given classification values."""
20-
extraction_response: InferenceResponse
21+
22+
extraction_response: Optional[InferenceResponse] = None
2123
"""The extraction response associated with the split."""
2224

2325
def __init__(self, server_response: StringDict):

tests/v2/product/ocr/test_ocr_response.py

Lines changed: 30 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,20 @@ def test_ocr_single():
1313
json_sample, _ = get_product_samples(product="ocr", file_name="ocr_single")
1414
response = OCRResponse(json_sample)
1515
assert isinstance(response.inference, OCRInference)
16-
assert response.inference.result.pages
17-
assert len(response.inference.result.pages) == 1
18-
assert response.inference.result.pages[0].words[0].content == "Shipper:"
19-
assert (
20-
response.inference.result.pages[0].words[0].polygon[0][0] == 0.09742441209406495
21-
)
22-
assert (
23-
response.inference.result.pages[0].words[0].polygon[0][1] == 0.07007125890736342
24-
)
25-
assert (
26-
response.inference.result.pages[0].words[0].polygon[1][0] == 0.15621500559910415
27-
)
28-
assert (
29-
response.inference.result.pages[0].words[0].polygon[1][1] == 0.07046714172604909
30-
)
31-
assert (
32-
response.inference.result.pages[0].words[0].polygon[2][0] == 0.15621500559910415
33-
)
34-
assert (
35-
response.inference.result.pages[0].words[0].polygon[2][1] == 0.08155186064924783
36-
)
37-
assert (
38-
response.inference.result.pages[0].words[0].polygon[3][0] == 0.09742441209406495
39-
)
40-
assert (
41-
response.inference.result.pages[0].words[0].polygon[3][1] == 0.08155186064924783
42-
)
43-
assert len(response.inference.result.pages[0].words) == 305
44-
assert response.inference.result.pages[0].content == (
16+
pages = response.inference.result.pages
17+
assert pages
18+
assert len(pages) == 1
19+
assert pages[0].words[0].content == "Shipper:"
20+
assert pages[0].words[0].polygon[0][0] == 0.09742441209406495
21+
assert pages[0].words[0].polygon[0][1] == 0.07007125890736342
22+
assert pages[0].words[0].polygon[1][0] == 0.15621500559910415
23+
assert pages[0].words[0].polygon[1][1] == 0.07046714172604909
24+
assert pages[0].words[0].polygon[2][0] == 0.15621500559910415
25+
assert pages[0].words[0].polygon[2][1] == 0.08155186064924783
26+
assert pages[0].words[0].polygon[3][0] == 0.09742441209406495
27+
assert pages[0].words[0].polygon[3][1] == 0.08155186064924783
28+
assert len(pages[0].words) == 305
29+
assert pages[0].content == (
4530
"Shipper: GLOBAL FREIGHT SOLUTIONS INC. 123 OCEAN DRIVE SHANGHAI, CHINA TEL: "
4631
"86-21-12345678 FAX: 86-21-87654321\nConsignee: PACIFIC TRADING CO. 789 TRADE "
4732
"STREET SINGAPORE 567890 SINGAPORE TEL: 65-65432100 FAX: 65-65432101\nNotify "
@@ -81,37 +66,22 @@ def test_ocr_multiple():
8166
assert isinstance(response.inference, OCRInference)
8267
assert isinstance(response.inference.result, OCRResult)
8368
assert isinstance(response.inference.result.pages[0], OCRPage)
84-
assert len(response.inference.result.pages) == 3
69+
pages = response.inference.result.pages
70+
assert len(pages) == 3
8571

86-
assert len(response.inference.result.pages[0].words) == 295
87-
assert response.inference.result.pages[0].words[0].content == "FICTIOCORP"
88-
assert (
89-
response.inference.result.pages[0].words[0].polygon[0][0] == 0.06649402824332337
90-
)
91-
assert (
92-
response.inference.result.pages[0].words[0].polygon[0][1] == 0.03957449719523875
93-
)
94-
assert (
95-
response.inference.result.pages[0].words[0].polygon[1][0] == 0.23219061218068954
96-
)
97-
assert (
98-
response.inference.result.pages[0].words[0].polygon[1][1] == 0.03960015049938432
99-
)
100-
assert (
101-
response.inference.result.pages[0].words[0].polygon[2][0] == 0.23219061218068954
102-
)
103-
assert (
104-
response.inference.result.pages[0].words[0].polygon[2][1] == 0.06770762074155151
105-
)
106-
assert (
107-
response.inference.result.pages[0].words[0].polygon[3][0] == 0.06649402824332337
108-
)
109-
assert (
110-
response.inference.result.pages[0].words[0].polygon[3][1] == 0.06770762074155151
111-
)
72+
assert len(pages[0].words) == 295
73+
assert pages[0].words[0].content == "FICTIOCORP"
74+
assert pages[0].words[0].polygon[0][0] == 0.06649402824332337
75+
assert pages[0].words[0].polygon[0][1] == 0.03957449719523875
76+
assert pages[0].words[0].polygon[1][0] == 0.23219061218068954
77+
assert pages[0].words[0].polygon[1][1] == 0.03960015049938432
78+
assert pages[0].words[0].polygon[2][0] == 0.23219061218068954
79+
assert pages[0].words[0].polygon[2][1] == 0.06770762074155151
80+
assert pages[0].words[0].polygon[3][0] == 0.06649402824332337
81+
assert pages[0].words[0].polygon[3][1] == 0.06770762074155151
11282

113-
assert len(response.inference.result.pages[1].words) == 450
114-
assert response.inference.result.pages[1].words[0].content == "KEOLIO"
83+
assert len(pages[1].words) == 450
84+
assert pages[1].words[0].content == "KEOLIO"
11585

116-
assert len(response.inference.result.pages[2].words) == 355
117-
assert response.inference.result.pages[2].words[0].content == "KEOLIO"
86+
assert len(pages[2].words) == 355
87+
assert pages[2].words[0].content == "KEOLIO"

0 commit comments

Comments
 (0)