Skip to content

Commit ce5d126

Browse files
Revise and rename extract_text to extract_pdf_text_to_file
- Fix `output_type` to "file" - Use `PdfRestFileBasedResponse` - Remove `ExtractTextResponse` Assisted-by: Codex
1 parent 6f080ec commit ce5d126

3 files changed

Lines changed: 126 additions & 86 deletions

File tree

src/pdfrest/client.py

Lines changed: 30 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
)
6262
from .models import (
6363
ConvertToMarkdownResponse,
64-
ExtractTextResponse,
6564
PdfRestDeletionResponse,
6665
PdfRestErrorResponse,
6766
PdfRestFile,
@@ -2395,7 +2394,7 @@ def extract_images(
23952394
timeout=timeout,
23962395
)
23972396

2398-
def extract_text(
2397+
def extract_pdf_text_to_file(
23992398
self,
24002399
file: PdfRestFile | Sequence[PdfRestFile],
24012400
*,
@@ -2404,40 +2403,36 @@ def extract_text(
24042403
preserve_line_breaks: Literal["off", "on"] = "off",
24052404
word_style: Literal["off", "on"] = "off",
24062405
word_coordinates: Literal["off", "on"] = "off",
2407-
output_type: Literal["json", "file"] = "json",
24082406
output: str | None = None,
24092407
extra_query: Query | None = None,
24102408
extra_headers: AnyMapping | None = None,
24112409
extra_body: Body | None = None,
24122410
timeout: TimeoutTypes | None = None,
2413-
) -> ExtractTextResponse:
2414-
"""Extract text content from a PDF."""
2411+
) -> PdfRestFileBasedResponse:
2412+
"""Extract text content from a PDF and return a file-based response."""
24152413

2416-
payload: dict[str, Any] = {"files": file}
2414+
payload: dict[str, Any] = {
2415+
"files": file,
2416+
"full_text": full_text,
2417+
"preserve_line_breaks": preserve_line_breaks,
2418+
"word_style": word_style,
2419+
"word_coordinates": word_coordinates,
2420+
"output_type": "file",
2421+
}
24172422
if pages is not None:
24182423
payload["pages"] = pages
2419-
payload["full_text"] = full_text
2420-
payload["preserve_line_breaks"] = preserve_line_breaks
2421-
payload["word_style"] = word_style
2422-
payload["word_coordinates"] = word_coordinates
2423-
payload["output_type"] = output_type
24242424
if output is not None:
24252425
payload["output"] = output
24262426

2427-
validated_payload = ExtractTextPayload.model_validate(payload)
2428-
request = self.prepare_request(
2429-
"POST",
2430-
"/extracted-text",
2431-
json_body=validated_payload.model_dump(
2432-
mode="json", by_alias=True, exclude_none=True, exclude_unset=True
2433-
),
2427+
return self._post_file_operation(
2428+
endpoint="/extracted-text",
2429+
payload=payload,
2430+
payload_model=ExtractTextPayload,
24342431
extra_query=extra_query,
24352432
extra_headers=extra_headers,
24362433
extra_body=extra_body,
24372434
timeout=timeout,
24382435
)
2439-
raw_payload = self._send_request(request)
2440-
return ExtractTextResponse.model_validate(raw_payload)
24412436

24422437
def preview_redactions(
24432438
self,
@@ -3385,7 +3380,7 @@ async def extract_images(
33853380
timeout=timeout,
33863381
)
33873382

3388-
async def extract_text(
3383+
async def extract_pdf_text_to_file(
33893384
self,
33903385
file: PdfRestFile | Sequence[PdfRestFile],
33913386
*,
@@ -3394,40 +3389,36 @@ async def extract_text(
33943389
preserve_line_breaks: Literal["off", "on"] = "off",
33953390
word_style: Literal["off", "on"] = "off",
33963391
word_coordinates: Literal["off", "on"] = "off",
3397-
output_type: Literal["json", "file"] = "json",
33983392
output: str | None = None,
33993393
extra_query: Query | None = None,
34003394
extra_headers: AnyMapping | None = None,
34013395
extra_body: Body | None = None,
34023396
timeout: TimeoutTypes | None = None,
3403-
) -> ExtractTextResponse:
3404-
"""Extract text content from a PDF."""
3397+
) -> PdfRestFileBasedResponse:
3398+
"""Extract text content from a PDF and return a file-based response."""
34053399

3406-
payload: dict[str, Any] = {"files": file}
3400+
payload: dict[str, Any] = {
3401+
"files": file,
3402+
"full_text": full_text,
3403+
"preserve_line_breaks": preserve_line_breaks,
3404+
"word_style": word_style,
3405+
"word_coordinates": word_coordinates,
3406+
"output_type": "file",
3407+
}
34073408
if pages is not None:
34083409
payload["pages"] = pages
3409-
payload["full_text"] = full_text
3410-
payload["preserve_line_breaks"] = preserve_line_breaks
3411-
payload["word_style"] = word_style
3412-
payload["word_coordinates"] = word_coordinates
3413-
payload["output_type"] = output_type
34143410
if output is not None:
34153411
payload["output"] = output
34163412

3417-
validated_payload = ExtractTextPayload.model_validate(payload)
3418-
request = self.prepare_request(
3419-
"POST",
3420-
"/extracted-text",
3421-
json_body=validated_payload.model_dump(
3422-
mode="json", by_alias=True, exclude_none=True, exclude_unset=True
3423-
),
3413+
return await self._post_file_operation(
3414+
endpoint="/extracted-text",
3415+
payload=payload,
3416+
payload_model=ExtractTextPayload,
34243417
extra_query=extra_query,
34253418
extra_headers=extra_headers,
34263419
extra_body=extra_body,
34273420
timeout=timeout,
34283421
)
3429-
raw_payload = await self._send_request(request)
3430-
return ExtractTextResponse.model_validate(raw_payload)
34313422

34323423
async def preview_redactions(
34333424
self,

tests/live/test_live_extract_text.py renamed to tests/live/test_live_extract_pdf_text_to_file.py

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

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

88
from ..resources import get_test_resource_path
99

1010

11-
def test_live_extract_text_success(
11+
def test_live_extract_pdf_text_to_file_success(
1212
pdfrest_api_key: str,
1313
pdfrest_live_base_url: str,
1414
) -> None:
@@ -18,21 +18,20 @@ def test_live_extract_text_success(
1818
base_url=pdfrest_live_base_url,
1919
) as client:
2020
uploaded = client.files.create_from_paths([resource])[0]
21-
response = client.extract_text(
21+
response = client.extract_pdf_text_to_file(
2222
uploaded,
23-
output_type="json",
2423
full_text="document",
2524
preserve_line_breaks="on",
2625
word_style="off",
2726
word_coordinates="off",
2827
)
2928

30-
assert isinstance(response, ExtractTextResponse)
31-
assert response.full_text
29+
assert isinstance(response, PdfRestFileBasedResponse)
30+
assert response.output_files
3231
assert response.input_id == uploaded.id
3332

3433

35-
def test_live_extract_text_invalid_pages(
34+
def test_live_extract_pdf_text_to_file_invalid_pages(
3635
pdfrest_api_key: str,
3736
pdfrest_live_base_url: str,
3837
) -> None:
@@ -43,8 +42,7 @@ def test_live_extract_text_invalid_pages(
4342
) as client:
4443
uploaded = client.files.create_from_paths([resource])[0]
4544
with pytest.raises(PdfRestApiError):
46-
client.extract_text(
45+
client.extract_pdf_text_to_file(
4746
uploaded,
4847
extra_body={"pages": "last-1"},
49-
output_type="json",
5048
)

0 commit comments

Comments
 (0)