Skip to content

Commit e341323

Browse files
♻️ move V2 API-specific internals to their own file
1 parent 0cde5fe commit e341323

2 files changed

Lines changed: 60 additions & 43 deletions

File tree

mindee/v2/client.py

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,15 @@
11
from time import sleep
22
from typing import TypeVar
33

4-
import requests
5-
64
from mindee.client_mixin import ClientMixin
75
from mindee.client_options.polling_options import PollingOptions
86
from mindee.error.mindee_error import MindeeError
97
from mindee.input import URLInputSource
108
from mindee.input.local_input_source import LocalInputSource
119
from mindee.logger import logger
12-
from mindee.parsing.common import StringDict
1310
from mindee.parsing.common.common_response import CommonStatus
1411
from mindee.v2.client_options.base_parameters import BaseParameters
15-
from mindee.v2.error.mindee_http_error_v2 import (
16-
MindeeHTTPUnknownErrorV2,
17-
handle_error_v2,
18-
)
1912
from mindee.v2.mindee_http.mindee_api_v2 import MindeeAPIV2
20-
from mindee.v2.mindee_http.response_validation_v2 import (
21-
is_valid_get_response,
22-
is_valid_post_response,
23-
)
2413
from mindee.v2.parsing.inference.base_response import BaseResponse
2514
from mindee.v2.parsing.job.job_response import JobResponse
2615
from mindee.v2.parsing.search.search_response import SearchResponse
@@ -29,15 +18,6 @@
2918
TypeBaseResponse = TypeVar("TypeBaseResponse", bound=BaseResponse)
3019

3120

32-
def _response_json(response: requests.Response) -> StringDict:
33-
try:
34-
return response.json()
35-
except ValueError as exc:
36-
raise MindeeHTTPUnknownErrorV2(
37-
f"HTTP {response.status_code} response is not valid JSON: {response.text}"
38-
) from exc
39-
40-
4121
class Client(ClientMixin):
4222
"""
4323
Mindee API Client.
@@ -71,14 +51,7 @@ def enqueue(
7151
:return: A valid inference response.
7252
"""
7353
logger.debug("Enqueuing inference using model: %s", params.model_id)
74-
response = self.mindee_api.req_post_inference_enqueue(
75-
input_source=input_source, params=params, slug=params.get_enqueue_slug()
76-
)
77-
dict_response = _response_json(response)
78-
79-
if not is_valid_post_response(response):
80-
handle_error_v2(dict_response)
81-
return JobResponse(dict_response)
54+
return self.mindee_api.enqueue(input_source, params)
8255

8356
def get_job(self, job_id: str) -> JobResponse:
8457
"""
@@ -91,11 +64,7 @@ def get_job(self, job_id: str) -> JobResponse:
9164
"""
9265
logger.debug("Fetching job: %s", job_id)
9366

94-
response = self.mindee_api.req_get_job(job_id)
95-
dict_response = _response_json(response)
96-
if not is_valid_get_response(response):
97-
handle_error_v2(dict_response)
98-
return JobResponse(dict_response)
67+
return self.mindee_api.get_job(job_id)
9968

10069
def get_result(
10170
self,
@@ -113,13 +82,7 @@ def get_result(
11382
"""
11483
logger.debug("Fetching result: %s", inference_id)
11584

116-
response = self.mindee_api.req_get_inference(
117-
inference_id, response_type.get_result_slug()
118-
)
119-
dict_response = _response_json(response)
120-
if not is_valid_get_response(response):
121-
handle_error_v2(dict_response)
122-
return response_type(dict_response)
85+
return self.mindee_api.get_result(response_type, inference_id)
12386

12487
def enqueue_and_get_result(
12588
self,
@@ -178,7 +141,9 @@ def enqueue_and_get_result(
178141

179142
raise MindeeError(f"Couldn't retrieve document after {try_counter + 1} tries.")
180143

181-
def search_models(self, name: str | None, model_type: str | None) -> SearchResponse:
144+
def search_models(
145+
self, name: str | None = None, model_type: str | None = None
146+
) -> SearchResponse:
182147
"""
183148
Get a list of models matching the provided name and type.
184149

mindee/v2/mindee_http/mindee_api_v2.py

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@
1414
MindeeHTTPUnknownErrorV2,
1515
handle_error_v2,
1616
)
17-
from mindee.v2.mindee_http.response_validation_v2 import is_valid_get_response
17+
from mindee.v2.mindee_http.response_validation_v2 import (
18+
is_valid_get_response,
19+
is_valid_post_response,
20+
)
21+
from mindee.v2.parsing.job.job_response import JobResponse
1822
from mindee.v2.parsing.search.search_response import SearchResponse
1923

2024
API_KEY_V2_ENV_NAME = "MINDEE_V2_API_KEY"
@@ -152,14 +156,62 @@ def req_get_search_models(
152156
:param model_type: Type of model to search for (exact match).
153157
:return: Response object containing search results.
154158
"""
155-
url = f"{self.url_root}/search/models"
159+
url = f"{self.url_root}/v2/search/models"
156160
return requests.get(
157161
url,
158162
headers=self.base_headers,
159163
params={"name": model_name, "model_type": model_type},
160164
timeout=self.request_timeout,
161165
)
162166

167+
def enqueue(
168+
self, input_source: LocalInputSource | URLInputSource, params: BaseParameters
169+
) -> JobResponse:
170+
"""
171+
Enqueues a document to a given model.
172+
:param input_source: Input object.
173+
:param params: Parameters
174+
:return: A valid inference Response.
175+
"""
176+
177+
response = self.req_post_inference_enqueue(
178+
input_source=input_source, params=params, slug=params.get_enqueue_slug()
179+
)
180+
dict_response = self._response_json(response)
181+
182+
if not is_valid_post_response(response):
183+
handle_error_v2(dict_response)
184+
return JobResponse(dict_response)
185+
186+
def get_job(self, job_id: str) -> JobResponse:
187+
"""
188+
Get the status of an inference that was previously enqueued.
189+
190+
Can be used for polling.
191+
192+
:param job_id: UUID of the job to retrieve.
193+
:return: A job response.
194+
"""
195+
response = self.req_get_job(job_id)
196+
dict_response = self._response_json(response)
197+
if not is_valid_get_response(response):
198+
handle_error_v2(dict_response)
199+
return JobResponse(dict_response)
200+
201+
def get_result(self, response_type, inference_id: str):
202+
"""
203+
Get the result of an inference that was previously enqueued.
204+
205+
:param response_type: Type of the response to return.
206+
:param inference_id: UUID of the inference to retrieve.
207+
:return: The result of the inference.
208+
"""
209+
response = self.req_get_inference(inference_id, response_type.get_result_slug())
210+
dict_response = self._response_json(response)
211+
if not is_valid_get_response(response):
212+
handle_error_v2(dict_response)
213+
return response_type(dict_response)
214+
163215
def get_models(self, name: str | None, model_type: str | None):
164216
"""
165217
Get a list of models matching the provided name and type.

0 commit comments

Comments
 (0)