Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion mindee/client_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
from typing import BinaryIO, Union

from mindee.error import MindeeClientError
from mindee.input import Base64Input, BytesInput, FileInput, PathInput, UrlInputSource
from mindee.input.sources.base_64_input import Base64Input
from mindee.input.sources.bytes_input import BytesInput
from mindee.input.sources.file_input import FileInput
from mindee.input.sources.path_input import PathInput
from mindee.input.sources.url_input_source import UrlInputSource


class ClientMixin:
Expand Down
2 changes: 1 addition & 1 deletion mindee/client_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
is_valid_post_response,
)
from mindee.parsing.v2.common_response import CommonStatus
from mindee.v2.parsing.inference.base_response import BaseResponse
from mindee.parsing.v2.base_response import BaseResponse
from mindee.parsing.v2.inference_response import InferenceResponse
from mindee.parsing.v2.job_response import JobResponse

Expand Down
29 changes: 29 additions & 0 deletions mindee/parsing/v2/base_inference.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from abc import ABC
from typing import TypeVar

from mindee.parsing.common.string_dict import StringDict
from mindee.parsing.v2.inference_file import InferenceFile
from mindee.parsing.v2.inference_job import InferenceJob
from mindee.parsing.v2.inference_model import InferenceModel


class BaseInference(ABC):
"""Base class for V2 inference objects."""

job: InferenceJob
"""Job the inference belongs to."""
model: InferenceModel
"""Model info for the inference."""
file: InferenceFile
"""File info for the inference."""
id: str
"""ID of the inference."""

def __init__(self, raw_response: StringDict):
self.id = raw_response["id"]
self.job = InferenceJob(raw_response["job"])
self.model = InferenceModel(raw_response["model"])
self.file = InferenceFile(raw_response["file"])


TypeBaseInference = TypeVar("TypeBaseInference", bound=BaseInference)
21 changes: 21 additions & 0 deletions mindee/parsing/v2/base_response.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from abc import ABC

from mindee.parsing.v2.base_inference import BaseInference
from mindee.parsing.v2.common_response import CommonResponse


class BaseResponse(ABC, CommonResponse):
"""Base class for V2 inference responses."""

inference: BaseInference
"""The inference result for a split utility request"""
_slug: str
"""Slug of the inference."""

def __str__(self) -> str:
return str(self.inference)

@classmethod
def get_result_slug(cls) -> str:
"""Getter for the inference slug."""
return cls._slug
2 changes: 1 addition & 1 deletion mindee/parsing/v2/inference.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference import BaseInference
from mindee.parsing.v2.base_inference import BaseInference
from mindee.parsing.v2.inference_active_options import InferenceActiveOptions
from mindee.parsing.v2.inference_result import InferenceResult

Expand Down
14 changes: 14 additions & 0 deletions mindee/parsing/v2/inference_job.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from mindee.parsing.common.string_dict import StringDict


class InferenceJob:
"""Inference Job info."""

id: str
"""UUID of the Job."""

def __init__(self, raw_response: StringDict) -> None:
self.id = raw_response["id"]

def __str__(self) -> str:
return f"Job\n===\n:ID: {self.id}"
4 changes: 1 addition & 3 deletions mindee/parsing/v2/inference_response.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.parsing.v2.base_response import BaseResponse
from mindee.parsing.v2.inference import Inference
from mindee.v2.parsing.inference.base_response import (
BaseResponse,
)


class InferenceResponse(BaseResponse):
Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/commands/cli_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from mindee.input import BaseParameters

from mindee.input.sources import PathInput, UrlInputSource
from mindee.v2.parsing import BaseResponse
from mindee.parsing.v2.base_response import BaseResponse


@dataclass
Expand Down
4 changes: 2 additions & 2 deletions mindee/v2/parsing/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.v2.parsing.inference.base_inference import BaseInference
from mindee.v2.parsing.inference.base_response import BaseResponse
from mindee.parsing.v2.base_inference import BaseInference
from mindee.parsing.v2.base_response import BaseResponse

__all__ = [
"BaseInference",
Expand Down
6 changes: 2 additions & 4 deletions mindee/v2/parsing/inference/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
from mindee.v2.parsing.inference.base_inference import BaseInference
from mindee.v2.parsing.inference.base_response import (
BaseResponse,
)
from mindee.parsing.v2.base_inference import BaseInference
from mindee.parsing.v2.base_response import BaseResponse

__all__ = [
"BaseInference",
Expand Down
30 changes: 2 additions & 28 deletions mindee/v2/parsing/inference/base_inference.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,3 @@
from abc import ABC
from typing import TypeVar
from mindee.parsing.v2.base_inference import BaseInference, TypeBaseInference

from mindee.parsing.common.string_dict import StringDict
from mindee.parsing.v2.inference_file import InferenceFile
from mindee.parsing.v2.inference_model import InferenceModel
from mindee.v2.parsing.inference.inference_job import InferenceJob


class BaseInference(ABC):
"""Base class for V2 inference objects."""

job: InferenceJob
"""Job the inference belongs to."""
model: InferenceModel
"""Model info for the inference."""
file: InferenceFile
"""File info for the inference."""
id: str
"""ID of the inference."""

def __init__(self, raw_response: StringDict):
self.id = raw_response["id"]
self.job = InferenceJob(raw_response["job"])
self.model = InferenceModel(raw_response["model"])
self.file = InferenceFile(raw_response["file"])


TypeBaseInference = TypeVar("TypeBaseInference", bound=BaseInference)
__all__ = ["BaseInference", "TypeBaseInference"]
23 changes: 2 additions & 21 deletions mindee/v2/parsing/inference/base_response.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,3 @@
from abc import ABC
from mindee.parsing.v2.base_response import BaseResponse

from mindee.v2.parsing.inference.base_inference import BaseInference

from mindee.parsing.v2.common_response import CommonResponse


class BaseResponse(ABC, CommonResponse):
"""Base class for V2 inference responses."""

inference: BaseInference
"""The inference result for a split utility request"""
_slug: str
"""Slug of the inference."""

def __str__(self) -> str:
return str(self.inference)

@classmethod
def get_result_slug(cls) -> str:
"""Getter for the inference slug."""
return cls._slug
__all__ = ["BaseResponse"]
15 changes: 2 additions & 13 deletions mindee/v2/parsing/inference/inference_job.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,3 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.parsing.v2.inference_job import InferenceJob


class InferenceJob:
"""Inference Job info."""

id: str
"""UUID of the Job."""

def __init__(self, raw_response: StringDict) -> None:
self.id = raw_response["id"]

def __str__(self) -> str:
return f"Job\n===\n:ID: {self.id}"
__all__ = ["InferenceJob"]
8 changes: 8 additions & 0 deletions mindee/v2/product/classification/classification_classifier.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.parsing.v2.inference_response import InferenceResponse


class ClassificationClassifier:
Expand All @@ -7,8 +8,15 @@ class ClassificationClassifier:
document_type: str
"""The document type, as identified on given classification values."""

extraction_response: InferenceResponse
"""The extraction response associated with the classification."""

def __init__(self, server_response: StringDict):
self.document_type = server_response["document_type"]
if server_response.get("extraction_response") is not None:
self.extraction_response = InferenceResponse(
server_response["extraction_response"]
)

def __str__(self) -> str:
return f":Document Type: {self.document_type}"
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference.base_inference import BaseInference
from mindee.parsing.v2.base_inference import BaseInference
from mindee.v2.product.classification.classification_result import ClassificationResult


Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference import BaseResponse
from mindee.parsing.v2.base_response import BaseResponse
from mindee.v2.product.classification.classification_inference import (
ClassificationInference,
)
Expand Down
7 changes: 7 additions & 0 deletions mindee/v2/product/crop/crop_box.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from mindee.parsing.v2.inference_response import InferenceResponse
from mindee.extraction import ExtractedImage, extract_multiple_images_from_source
from mindee.input.sources.local_input_source import LocalInputSource
from mindee.parsing.common.string_dict import StringDict
Expand All @@ -11,10 +12,16 @@ class CropBox:
"""Location which includes cropping coordinates for the detected object, within the source document."""
object_type: str
"""Type or classification of the detected object."""
extraction_response: InferenceResponse
"""The extraction response associated with the crop."""

def __init__(self, server_response: StringDict):
self.location = FieldLocation(server_response["location"])
self.object_type = server_response["object_type"]
if server_response.get("extraction_response") is not None:
self.extraction_response = InferenceResponse(
server_response["extraction_response"]
)

def __str__(self) -> str:
return f"* :Location: {self.location}\n :Object Type: {self.object_type}"
Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/product/crop/crop_inference.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference.base_inference import BaseInference
from mindee.parsing.v2.base_inference import BaseInference
from mindee.v2.product.crop.crop_result import CropResult


Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/product/crop/crop_response.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from mindee.input.sources.local_input_source import LocalInputSource
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.file_operations.crop_files import CropFiles
from mindee.v2.parsing.inference import BaseResponse
from mindee.parsing.v2.base_response import BaseResponse
from mindee.v2.product.crop.crop_inference import CropInference


Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/product/ocr/ocr_inference.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference.base_inference import BaseInference
from mindee.parsing.v2.base_inference import BaseInference
from mindee.v2.product.ocr.ocr_result import OCRResult


Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/product/ocr/ocr_response.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference import BaseResponse
from mindee.parsing.v2.base_response import BaseResponse
from mindee.v2.product.ocr.ocr_inference import OCRInference


Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/product/split/split_inference.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from mindee.parsing.common.string_dict import StringDict
from mindee.v2.parsing.inference.base_inference import BaseInference
from mindee.parsing.v2.base_inference import BaseInference
from mindee.v2.product.split.split_result import SplitResult


Expand Down
7 changes: 7 additions & 0 deletions mindee/v2/product/split/split_range.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from typing import List

from mindee.parsing.v2.inference_response import InferenceResponse
from mindee.extraction.pdf_extractor.extracted_pdf import ExtractedPdf
from mindee.input.sources.local_input_source import LocalInputSource
from mindee.parsing.common.string_dict import StringDict
Expand All @@ -16,10 +17,16 @@ class SplitRange:
"""
document_type: str
"""The document type, as identified on given classification values."""
extraction_response: InferenceResponse
"""The extraction response associated with the split."""

def __init__(self, server_response: StringDict):
self.page_range = server_response["page_range"]
self.document_type = server_response["document_type"]
if server_response.get("extraction_response") is not None:
self.extraction_response = InferenceResponse(
server_response["extraction_response"]
)

def __str__(self) -> str:
page_range = ",".join([str(page_index) for page_index in self.page_range])
Expand Down
2 changes: 1 addition & 1 deletion mindee/v2/product/split/split_response.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from mindee.input.sources.local_input_source import LocalInputSource
from mindee.parsing.common.string_dict import StringDict
from mindee.parsing.v2.base_response import BaseResponse
from mindee.v2.file_operations.split_files import SplitFiles
from mindee.v2.parsing.inference import BaseResponse
from mindee.v2.product.split.split_inference import SplitInference


Expand Down
2 changes: 1 addition & 1 deletion tests/input/test_apply_page_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import pypdfium2 as pdfium
import pytest

from mindee.error import MindeeError
from mindee.error.mindee_error import MindeeError
from mindee.input.page_options import KEEP_ONLY, REMOVE, PageOptions
from mindee.input.sources import (
Base64Input,
Expand Down
4 changes: 2 additions & 2 deletions tests/v2/file_operations/test_crop_operation_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ def test_image_should_extract_crops():
)
check_findoc_return(invoice_0)
extracted_images.save_all_to_disk(OUTPUT_DIR)
assert os.path.getsize(OUTPUT_DIR / "crop_001.jpg") == 198887
assert os.path.getsize(OUTPUT_DIR / "crop_002.jpg") == 197443
assert os.path.getsize(OUTPUT_DIR / "crop_001.jpg") == 187601
assert os.path.getsize(OUTPUT_DIR / "crop_002.jpg") == 197978


@pytest.fixture(scope="module", autouse=True)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ def test_classification_default_sample(
v2_client: ClientV2, classification_model_id: str
):
input_source = PathInput(
V2_PRODUCT_DATA_DIR / "classification" / "default_invoice.jpg"
V2_PRODUCT_DATA_DIR / "classification" / "default_sample.jpg"
)
response = v2_client.enqueue_and_get_result(
ClassificationResponse,
input_source,
ClassificationParameters(classification_model_id),
)
assert response.inference is not None
assert response.inference.file.name == "default_invoice.jpg"
assert response.inference.file.name == "default_sample.jpg"
assert response.inference.result.classification
assert response.inference.result.classification.document_type == "invoice"
Loading
Loading