Skip to content

Commit 4bc2d1d

Browse files
Add Unzip tool
Assisted-by: Codex
1 parent fbb7407 commit 4bc2d1d

2 files changed

Lines changed: 78 additions & 2 deletions

File tree

src/pdfrest/client.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
SummarizePdfTextPayload,
109109
TiffPdfRestPayload,
110110
TranslatePdfTextPayload,
111+
UnzipPayload,
111112
UploadURLs,
112113
ZipPayload,
113114
)
@@ -2629,6 +2630,32 @@ def zip_files(
26292630
timeout=timeout,
26302631
)
26312632

2633+
def unzip_file(
2634+
self,
2635+
file: PdfRestFile | Sequence[PdfRestFile],
2636+
*,
2637+
password: str | None = None,
2638+
extra_query: Query | None = None,
2639+
extra_headers: AnyMapping | None = None,
2640+
extra_body: Body | None = None,
2641+
timeout: TimeoutTypes | None = None,
2642+
) -> PdfRestFileBasedResponse:
2643+
"""Extract files from a zip archive."""
2644+
2645+
payload: dict[str, Any] = {"files": file}
2646+
if password is not None:
2647+
payload["password"] = password
2648+
2649+
return self._post_file_operation(
2650+
endpoint="/unzip",
2651+
payload=payload,
2652+
payload_model=UnzipPayload,
2653+
extra_query=extra_query,
2654+
extra_headers=extra_headers,
2655+
extra_body=extra_body,
2656+
timeout=timeout,
2657+
)
2658+
26322659
def convert_to_excel(
26332660
self,
26342661
file: PdfRestFile | Sequence[PdfRestFile],
@@ -3942,6 +3969,32 @@ async def zip_files(
39423969
timeout=timeout,
39433970
)
39443971

3972+
async def unzip_file(
3973+
self,
3974+
file: PdfRestFile | Sequence[PdfRestFile],
3975+
*,
3976+
password: str | None = None,
3977+
extra_query: Query | None = None,
3978+
extra_headers: AnyMapping | None = None,
3979+
extra_body: Body | None = None,
3980+
timeout: TimeoutTypes | None = None,
3981+
) -> PdfRestFileBasedResponse:
3982+
"""Asynchronously extract files from a zip archive."""
3983+
3984+
payload: dict[str, Any] = {"files": file}
3985+
if password is not None:
3986+
payload["password"] = password
3987+
3988+
return await self._post_file_operation(
3989+
endpoint="/unzip",
3990+
payload=payload,
3991+
payload_model=UnzipPayload,
3992+
extra_query=extra_query,
3993+
extra_headers=extra_headers,
3994+
extra_body=extra_body,
3995+
timeout=timeout,
3996+
)
3997+
39453998
async def convert_to_excel(
39463999
self,
39474000
file: PdfRestFile | Sequence[PdfRestFile],

src/pdfrest/models/_internal.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,29 @@ class ZipPayload(BaseModel):
263263
] = None
264264

265265

266+
class UnzipPayload(BaseModel):
267+
"""Adapt caller options into a pdfRest-ready unzip request payload."""
268+
269+
files: Annotated[
270+
list[PdfRestFile],
271+
Field(
272+
min_length=1,
273+
max_length=1,
274+
validation_alias=AliasChoices("file", "files"),
275+
serialization_alias="id",
276+
),
277+
BeforeValidator(_ensure_list),
278+
AfterValidator(
279+
_allowed_mime_types("application/zip", error_msg="Must be a ZIP file")
280+
),
281+
PlainSerializer(_serialize_as_first_file_id),
282+
]
283+
password: Annotated[
284+
str | None,
285+
Field(default=None, min_length=1),
286+
] = None
287+
288+
266289
PageNumber = Annotated[int, Field(ge=1), PlainSerializer(lambda x: str(x))]
267290

268291

@@ -1389,7 +1412,7 @@ class PdfRestRawUploadedFile(BaseModel):
13891412
name: Annotated[str, Field(description="The name of the file")]
13901413
id: Annotated[PdfRestFileID, Field(description="The id of the file")]
13911414
output_url: Annotated[
1392-
str | None,
1415+
list[HttpUrl] | HttpUrl | None,
13931416
Field(description="The url of the unzipped file", alias="outputUrl"),
13941417
BeforeValidator(_ensure_list),
13951418
] = None
@@ -1408,7 +1431,7 @@ class PdfRestRawFileResponse(BaseModel):
14081431
BeforeValidator(_ensure_list),
14091432
]
14101433
output_urls: Annotated[
1411-
list[HttpUrl] | None,
1434+
list[HttpUrl] | HttpUrl | None,
14121435
Field(alias="outputUrl", description="The url of the file"),
14131436
BeforeValidator(_ensure_list),
14141437
] = None

0 commit comments

Comments
 (0)