Skip to content

Commit 1a05ec1

Browse files
authored
♻️ rework product base classes (#456)
1 parent 809bab1 commit 1a05ec1

23 files changed

Lines changed: 78 additions & 63 deletions

mindee/v2/client.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
from mindee.logger import logger
1212
from mindee.mindee_http.cancellation_token import CancellationToken
1313
from mindee.parsing.common.common_response import CommonStatus
14-
from mindee.v2.client_options.base_parameters import BaseParameters
14+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
1515
from mindee.v2.mindee_http.mindee_api_v2 import MindeeAPIV2
16-
from mindee.v2.parsing.inference.base_response import BaseResponse
16+
from mindee.v2.parsing.inference.base_inference_response import BaseInferenceResponse
1717
from mindee.v2.parsing.job.job_response import JobResponse
1818
from mindee.v2.parsing.search.search_response import SearchResponse
1919

20-
TypeBaseResponse = TypeVar("TypeBaseResponse", bound=BaseResponse)
20+
TypeBaseInferenceResponse = TypeVar(
21+
"TypeBaseInferenceResponse", bound=BaseInferenceResponse
22+
)
2123

2224

2325
class Client(ClientMixin):
@@ -44,7 +46,7 @@ def __init__(
4446
def enqueue(
4547
self,
4648
input_source: LocalInputSource | URLInputSource,
47-
params: BaseParameters,
49+
params: BaseProductParameters,
4850
) -> JobResponse:
4951
"""
5052
Enqueues a document to a given model.
@@ -72,9 +74,9 @@ def get_job(self, job_id: str) -> JobResponse:
7274

7375
def get_result(
7476
self,
75-
response_type: type[TypeBaseResponse],
77+
response_type: type[TypeBaseInferenceResponse],
7678
inference_id: str,
77-
) -> TypeBaseResponse:
79+
) -> TypeBaseInferenceResponse:
7880
"""
7981
Get the result of an inference that was previously enqueued.
8082
@@ -89,8 +91,8 @@ def get_result(
8991
return self.mindee_api.get_result(response_type, inference_id)
9092

9193
def get_result_from_url(
92-
self, response_type: type[TypeBaseResponse], url: str
93-
) -> TypeBaseResponse:
94+
self, response_type: type[TypeBaseInferenceResponse], url: str
95+
) -> TypeBaseInferenceResponse:
9496
"""
9597
Get the result of an inference that was previously enqueued by its URL.
9698
@@ -102,11 +104,11 @@ def get_result_from_url(
102104

103105
def enqueue_and_get_result(
104106
self,
105-
response_type: type[TypeBaseResponse],
107+
response_type: type[TypeBaseInferenceResponse],
106108
input_source: LocalInputSource | URLInputSource,
107-
params: BaseParameters,
109+
params: BaseProductParameters,
108110
cancellation_token: CancellationToken | None = None,
109-
) -> TypeBaseResponse:
111+
) -> TypeBaseInferenceResponse:
110112
"""
111113
Enqueues to an asynchronous endpoint and automatically polls for a response.
112114

mindee/v2/client_options/base_parameters.py renamed to mindee/v2/client_options/base_product_parameters.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,35 @@
66

77

88
@dataclass
9-
class BaseParameters(ABC):
10-
"""Base class for parameters accepted by all V2 endpoints."""
9+
class BaseProductParameters(ABC):
10+
"""Base parameters for sending a document to a product."""
1111

1212
model_id: str
13-
"""ID of the model, required."""
13+
"""Model ID to use for the inference. Required."""
14+
1415
alias: str | None = None
15-
"""Use an alias to link the file to your own DB. If empty, no alias will be used."""
16+
"""
17+
Optional: a free-form string to tag the request with your own identifier.
18+
For example, an internal document ID, reference number, or database key.
19+
If set, it will be included in the job and result responses.
20+
"""
21+
1622
webhook_ids: list[str] | None = None
17-
"""IDs of webhooks to propagate the API response to."""
23+
"""
24+
Webhook IDs to call after all processing is finished.
25+
If empty, no webhooks will be used.
26+
"""
27+
1828
polling_options: PollingOptions | None = None
1929
"""Options for polling. Set only if having timeout issues."""
30+
2031
close_file: bool = True
2132
"""Whether to close the file after product."""
2233

2334
_slug: ClassVar[str]
2435
"""Slug of the endpoint."""
2536

26-
def get_form_data(self) -> dict[str, str | list[str]]:
37+
def get_request_parameters(self) -> dict[str, str | list[str]]:
2738
"""
2839
Return the parameters as a config dictionary.
2940

mindee/v2/commands/base_inference_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
)
1212
from mindee.input import PathInput, URLInputSource
1313
from mindee.v2.client import Client
14-
from mindee.v2.client_options.base_parameters import BaseParameters
14+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
1515
from mindee.v2.commands.output_type import OutputType
1616

1717

@@ -137,7 +137,7 @@ def build_parameters(
137137
model_id: str,
138138
alias: str | None,
139139
webhook_ids: list[str] | None,
140-
) -> BaseParameters:
140+
) -> BaseProductParameters:
141141
"""Build the V2 inference parameters for this product."""
142142

143143
@abstractmethod

mindee/v2/commands/classification_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from argparse import Namespace
22

33
from mindee import ClassificationParameters, ClassificationResponse
4-
from mindee.v2.client_options.base_parameters import BaseParameters
4+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
55
from mindee.v2.commands.base_inference_command import BaseInferenceCommand
66

77

@@ -20,7 +20,7 @@ def build_parameters(
2020
model_id: str,
2121
alias: str | None,
2222
webhook_ids: list[str] | None,
23-
) -> BaseParameters:
23+
) -> BaseProductParameters:
2424
del parsed_args
2525
return ClassificationParameters(
2626
model_id=model_id, alias=alias, webhook_ids=webhook_ids

mindee/v2/commands/crop_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from argparse import Namespace
22

33
from mindee import CropParameters, CropResponse
4-
from mindee.v2.client_options.base_parameters import BaseParameters
4+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
55
from mindee.v2.commands.base_inference_command import BaseInferenceCommand
66

77

@@ -20,6 +20,6 @@ def build_parameters(
2020
model_id: str,
2121
alias: str | None,
2222
webhook_ids: list[str] | None,
23-
) -> BaseParameters:
23+
) -> BaseProductParameters:
2424
del parsed_args
2525
return CropParameters(model_id=model_id, alias=alias, webhook_ids=webhook_ids)

mindee/v2/commands/extraction_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from argparse import ArgumentParser, Namespace
22

33
from mindee import ExtractionParameters, ExtractionResponse
4-
from mindee.v2.client_options.base_parameters import BaseParameters
4+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
55
from mindee.v2.commands.base_inference_command import BaseInferenceCommand
66

77

@@ -65,7 +65,7 @@ def build_parameters(
6565
model_id: str,
6666
alias: str | None,
6767
webhook_ids: list[str] | None,
68-
) -> BaseParameters:
68+
) -> BaseProductParameters:
6969
return ExtractionParameters(
7070
model_id=model_id,
7171
alias=alias,

mindee/v2/commands/ocr_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from argparse import Namespace
22

33
from mindee import OCRParameters, OCRResponse
4-
from mindee.v2.client_options.base_parameters import BaseParameters
4+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
55
from mindee.v2.commands.base_inference_command import BaseInferenceCommand
66

77

@@ -20,6 +20,6 @@ def build_parameters(
2020
model_id: str,
2121
alias: str | None,
2222
webhook_ids: list[str] | None,
23-
) -> BaseParameters:
23+
) -> BaseProductParameters:
2424
del parsed_args
2525
return OCRParameters(model_id=model_id, alias=alias, webhook_ids=webhook_ids)

mindee/v2/commands/split_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from argparse import Namespace
22

33
from mindee import SplitParameters, SplitResponse
4-
from mindee.v2.client_options.base_parameters import BaseParameters
4+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
55
from mindee.v2.commands.base_inference_command import BaseInferenceCommand
66

77

@@ -20,6 +20,6 @@ def build_parameters(
2020
model_id: str,
2121
alias: str | None,
2222
webhook_ids: list[str] | None,
23-
) -> BaseParameters:
23+
) -> BaseProductParameters:
2424
del parsed_args
2525
return SplitParameters(model_id=model_id, alias=alias, webhook_ids=webhook_ids)

mindee/v2/mindee_http/mindee_api_v2.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from mindee.mindee_http.settings_mixin import SettingsMixin
1212
from mindee.parsing.common.string_dict import StringDict
1313
from mindee.v1.mindee_http.base_settings import USER_AGENT
14-
from mindee.v2.client_options.base_parameters import BaseParameters
14+
from mindee.v2.client_options.base_product_parameters import BaseProductParameters
1515
from mindee.v2.error.mindee_api_v2_error import MindeeAPIV2Error
1616
from mindee.v2.error.mindee_http_error_v2 import (
1717
MindeeHTTPUnknownErrorV2,
@@ -21,7 +21,7 @@
2121
is_valid_get_response,
2222
is_valid_post_response,
2323
)
24-
from mindee.v2.parsing import BaseResponse
24+
from mindee.v2.parsing import BaseInferenceResponse
2525
from mindee.v2.parsing.job.job_response import JobResponse
2626
from mindee.v2.parsing.search.search_response import SearchResponse
2727

@@ -34,7 +34,7 @@
3434
REQUEST_TIMEOUT_ENV_NAME = "MINDEE_REQUEST_TIMEOUT"
3535
TIMEOUT_DEFAULT = 120
3636

37-
ResponseT = TypeVar("ResponseT", bound=BaseResponse)
37+
ResponseT = TypeVar("ResponseT", bound=BaseInferenceResponse)
3838

3939

4040
class MindeeAPIV2(SettingsMixin):
@@ -92,7 +92,7 @@ def set_from_env(self) -> None:
9292
def req_post_inference_enqueue(
9393
self,
9494
input_source: LocalInputSource | URLInputSource,
95-
params: BaseParameters,
95+
params: BaseProductParameters,
9696
slug: str,
9797
) -> httpx.Response:
9898
"""
@@ -103,7 +103,7 @@ def req_post_inference_enqueue(
103103
:param slug: Slug to use for the enqueueing, defaults to 'inferences'.
104104
:return: httpx response.
105105
"""
106-
data = params.get_form_data()
106+
data = params.get_request_parameters()
107107
url = f"{self.url_root}/v2/{slug}/enqueue"
108108
post_kwargs: StringDict = {}
109109
if isinstance(input_source, LocalInputSource):
@@ -219,7 +219,9 @@ def req_get_search_models(
219219
)
220220

221221
def enqueue(
222-
self, input_source: LocalInputSource | URLInputSource, params: BaseParameters
222+
self,
223+
input_source: LocalInputSource | URLInputSource,
224+
params: BaseProductParameters,
223225
) -> JobResponse:
224226
"""
225227
Enqueues a document to a given model.

mindee/v2/parsing/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from mindee.v2.parsing.error.error_item import ErrorItem
22
from mindee.v2.parsing.error.error_response import ErrorResponse
33
from mindee.v2.parsing.inference.base_inference import BaseInference
4-
from mindee.v2.parsing.inference.base_response import BaseResponse
4+
from mindee.v2.parsing.inference.base_inference_response import BaseInferenceResponse
55
from mindee.v2.parsing.inference.failed_inference_response import (
66
FailedInferenceResponse,
77
)
@@ -15,7 +15,7 @@
1515

1616
__all__ = [
1717
"BaseInference",
18-
"BaseResponse",
18+
"BaseInferenceResponse",
1919
"ErrorItem",
2020
"ErrorResponse",
2121
"ExtractionInference",

0 commit comments

Comments
 (0)