Skip to content

Commit c2d50a2

Browse files
Remove and replace ExtractImagesResponse
Assisted-by: Codex
1 parent 937c2d6 commit c2d50a2

5 files changed

Lines changed: 16 additions & 102 deletions

File tree

src/pdfrest/client.py

Lines changed: 10 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
)
6060
from .models import (
6161
ConvertToMarkdownResponse,
62-
ExtractImagesResponse,
6362
ExtractTextResponse,
6463
PdfRestErrorResponse,
6564
PdfRestFile,
@@ -2214,7 +2213,7 @@ def extract_images(
22142213
extra_headers: AnyMapping | None = None,
22152214
extra_body: Body | None = None,
22162215
timeout: TimeoutTypes | None = None,
2217-
) -> ExtractImagesResponse:
2216+
) -> PdfRestFileBasedResponse:
22182217
"""Extract embedded images from a PDF."""
22192218

22202219
payload: dict[str, Any] = {"files": file}
@@ -2223,40 +2222,15 @@ def extract_images(
22232222
if output is not None:
22242223
payload["output"] = output
22252224

2226-
validated_payload = ExtractImagesPayload.model_validate(payload)
2227-
request = self.prepare_request(
2228-
"POST",
2229-
"/extracted-images",
2230-
json_body=validated_payload.model_dump(
2231-
mode="json", by_alias=True, exclude_none=True, exclude_unset=True
2232-
),
2225+
return self._post_file_operation(
2226+
endpoint="/extracted-images",
2227+
payload=payload,
2228+
payload_model=ExtractImagesPayload,
22332229
extra_query=extra_query,
22342230
extra_headers=extra_headers,
22352231
extra_body=extra_body,
22362232
timeout=timeout,
22372233
)
2238-
raw_payload = self._send_request(request)
2239-
raw_response = PdfRestRawFileResponse.model_validate(raw_payload)
2240-
output_ids = raw_response.ids or []
2241-
output_files = [
2242-
self.fetch_file_info(
2243-
str(file_id),
2244-
extra_query=extra_query,
2245-
extra_headers=extra_headers,
2246-
timeout=timeout,
2247-
)
2248-
for file_id in output_ids
2249-
]
2250-
input_id = raw_response.input_id[0] if raw_response.input_id else ""
2251-
return ExtractImagesResponse.model_validate(
2252-
{
2253-
"input_id": input_id,
2254-
"output_files": [
2255-
file.model_dump(mode="json", by_alias=True) for file in output_files
2256-
],
2257-
"warning": raw_response.warning,
2258-
}
2259-
)
22602234

22612235
def extract_text(
22622236
self,
@@ -2954,7 +2928,7 @@ async def extract_images(
29542928
extra_headers: AnyMapping | None = None,
29552929
extra_body: Body | None = None,
29562930
timeout: TimeoutTypes | None = None,
2957-
) -> ExtractImagesResponse:
2931+
) -> PdfRestFileBasedResponse:
29582932
"""Extract embedded images from a PDF."""
29592933

29602934
payload: dict[str, Any] = {"files": file}
@@ -2963,47 +2937,15 @@ async def extract_images(
29632937
if output is not None:
29642938
payload["output"] = output
29652939

2966-
validated_payload = ExtractImagesPayload.model_validate(payload)
2967-
request = self.prepare_request(
2968-
"POST",
2969-
"/extracted-images",
2970-
json_body=validated_payload.model_dump(
2971-
mode="json", by_alias=True, exclude_none=True, exclude_unset=True
2972-
),
2940+
return await self._post_file_operation(
2941+
endpoint="/extracted-images",
2942+
payload=payload,
2943+
payload_model=ExtractImagesPayload,
29732944
extra_query=extra_query,
29742945
extra_headers=extra_headers,
29752946
extra_body=extra_body,
29762947
timeout=timeout,
29772948
)
2978-
raw_payload = await self._send_request(request)
2979-
raw_response = PdfRestRawFileResponse.model_validate(raw_payload)
2980-
output_ids = raw_response.ids or []
2981-
semaphore = asyncio.Semaphore(DEFAULT_FILE_INFO_CONCURRENCY)
2982-
2983-
async def fetch(file_id: str) -> PdfRestFile:
2984-
async with semaphore:
2985-
return await self.fetch_file_info(
2986-
file_id,
2987-
extra_query=extra_query,
2988-
extra_headers=extra_headers,
2989-
timeout=timeout,
2990-
)
2991-
2992-
output_files: list[PdfRestFile] = []
2993-
if output_ids:
2994-
output_files = list(
2995-
await asyncio.gather(*(fetch(fid) for fid in output_ids))
2996-
)
2997-
input_id = raw_response.input_id[0] if raw_response.input_id else ""
2998-
return ExtractImagesResponse.model_validate(
2999-
{
3000-
"input_id": input_id,
3001-
"output_files": [
3002-
file.model_dump(mode="json", by_alias=True) for file in output_files
3003-
],
3004-
"warning": raw_response.warning,
3005-
}
3006-
)
30072949

30082950
async def extract_text(
30092951
self,

src/pdfrest/models/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from .public import (
22
ConvertToMarkdownResponse,
3-
ExtractImagesResponse,
43
ExtractTextResponse,
54
PdfRestErrorResponse,
65
PdfRestFile,
@@ -14,7 +13,6 @@
1413

1514
__all__ = [
1615
"ConvertToMarkdownResponse",
17-
"ExtractImagesResponse",
1816
"ExtractTextResponse",
1917
"PdfRestErrorResponse",
2018
"PdfRestFile",

src/pdfrest/models/public.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
__all__ = (
2323
"ConvertToMarkdownResponse",
24-
"ExtractImagesResponse",
2524
"ExtractTextResponse",
2625
"PdfRestErrorResponse",
2726
"PdfRestFile",
@@ -379,31 +378,6 @@ class TranslatePdfTextResponse(BaseModel):
379378
] = None
380379

381380

382-
class ExtractImagesResponse(BaseModel):
383-
"""Response returned by the extracted-images tool."""
384-
385-
model_config = ConfigDict(extra="allow")
386-
387-
input_id: Annotated[
388-
PdfRestFileID,
389-
Field(
390-
validation_alias=AliasChoices("input_id", "inputId"),
391-
description="The id of the input file.",
392-
),
393-
]
394-
output_files: Annotated[
395-
list[PdfRestFile],
396-
Field(
397-
description="The list of extracted image files.",
398-
validation_alias=AliasChoices("output_files", "outputFiles"),
399-
),
400-
]
401-
warning: Annotated[
402-
str | None,
403-
Field(description="A warning that was generated during extraction."),
404-
] = None
405-
406-
407381
class ExtractTextResponse(BaseModel):
408382
"""Response returned by the extracted-text tool."""
409383

tests/live/test_live_extract_images.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import pytest
44

55
from pdfrest import PdfRestApiError, PdfRestClient
6-
from pdfrest.models import ExtractImagesResponse
6+
from pdfrest.models import PdfRestFileBasedResponse
77

88
from ..resources import get_test_resource_path
99

@@ -20,7 +20,7 @@ def test_live_extract_images_success(
2020
uploaded = client.files.create_from_paths([resource])[0]
2121
response = client.extract_images(uploaded)
2222

23-
assert isinstance(response, ExtractImagesResponse)
23+
assert isinstance(response, PdfRestFileBasedResponse)
2424
assert response.output_files
2525
assert response.input_id == uploaded.id
2626

tests/test_extract_images.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from pydantic import ValidationError
88

99
from pdfrest import AsyncPdfRestClient, PdfRestClient
10-
from pdfrest.models import ExtractImagesResponse, PdfRestFile, PdfRestFileID
10+
from pdfrest.models import PdfRestFile, PdfRestFileBasedResponse, PdfRestFileID
1111
from pdfrest.models._internal import ExtractImagesPayload
1212

1313
from .graphics_test_helpers import ASYNC_API_KEY, VALID_API_KEY, make_pdf_file
@@ -98,7 +98,7 @@ def handler(request: httpx.Request) -> httpx.Response:
9898
response = client.extract_images(input_file, pages=["1-3"], output="images")
9999

100100
assert seen == {"post": 1, "get": 2}
101-
assert isinstance(response, ExtractImagesResponse)
101+
assert isinstance(response, PdfRestFileBasedResponse)
102102
assert len(response.output_files) == 2
103103
assert response.input_id == input_file.id
104104

@@ -152,7 +152,7 @@ def handler(request: httpx.Request) -> httpx.Response:
152152
timeout=0.3,
153153
)
154154

155-
assert isinstance(response, ExtractImagesResponse)
155+
assert isinstance(response, PdfRestFileBasedResponse)
156156
assert len(response.output_files) == 1
157157
timeout_value = captured_timeout["value"]
158158
assert timeout_value is not None
@@ -206,6 +206,6 @@ def handler(request: httpx.Request) -> httpx.Response:
206206
response = await client.extract_images(input_file)
207207

208208
assert seen == {"post": 1, "get": 1}
209-
assert isinstance(response, ExtractImagesResponse)
209+
assert isinstance(response, PdfRestFileBasedResponse)
210210
assert len(response.output_files) == 1
211211
assert response.input_id == input_file.id

0 commit comments

Comments
 (0)