Skip to content

Commit c688142

Browse files
Add Unzip tool
Assisted-by: Codex
1 parent 4ba6eba commit c688142

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
@@ -103,6 +103,7 @@
103103
SummarizePdfTextPayload,
104104
TiffPdfRestPayload,
105105
TranslatePdfTextPayload,
106+
UnzipPayload,
106107
UploadURLs,
107108
ZipPayload,
108109
)
@@ -2581,6 +2582,32 @@ def zip_files(
25812582
timeout=timeout,
25822583
)
25832584

2585+
def unzip_file(
2586+
self,
2587+
file: PdfRestFile | Sequence[PdfRestFile],
2588+
*,
2589+
password: str | None = None,
2590+
extra_query: Query | None = None,
2591+
extra_headers: AnyMapping | None = None,
2592+
extra_body: Body | None = None,
2593+
timeout: TimeoutTypes | None = None,
2594+
) -> PdfRestFileBasedResponse:
2595+
"""Extract files from a zip archive."""
2596+
2597+
payload: dict[str, Any] = {"files": file}
2598+
if password is not None:
2599+
payload["password"] = password
2600+
2601+
return self._post_file_operation(
2602+
endpoint="/unzip",
2603+
payload=payload,
2604+
payload_model=UnzipPayload,
2605+
extra_query=extra_query,
2606+
extra_headers=extra_headers,
2607+
extra_body=extra_body,
2608+
timeout=timeout,
2609+
)
2610+
25842611
def convert_to_excel(
25852612
self,
25862613
file: PdfRestFile | Sequence[PdfRestFile],
@@ -3649,6 +3676,32 @@ async def zip_files(
36493676
timeout=timeout,
36503677
)
36513678

3679+
async def unzip_file(
3680+
self,
3681+
file: PdfRestFile | Sequence[PdfRestFile],
3682+
*,
3683+
password: str | None = None,
3684+
extra_query: Query | None = None,
3685+
extra_headers: AnyMapping | None = None,
3686+
extra_body: Body | None = None,
3687+
timeout: TimeoutTypes | None = None,
3688+
) -> PdfRestFileBasedResponse:
3689+
"""Asynchronously extract files from a zip archive."""
3690+
3691+
payload: dict[str, Any] = {"files": file}
3692+
if password is not None:
3693+
payload["password"] = password
3694+
3695+
return await self._post_file_operation(
3696+
endpoint="/unzip",
3697+
payload=payload,
3698+
payload_model=UnzipPayload,
3699+
extra_query=extra_query,
3700+
extra_headers=extra_headers,
3701+
extra_body=extra_body,
3702+
timeout=timeout,
3703+
)
3704+
36523705
async def convert_to_excel(
36533706
self,
36543707
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

@@ -1202,7 +1225,7 @@ class PdfRestRawUploadedFile(BaseModel):
12021225
name: Annotated[str, Field(description="The name of the file")]
12031226
id: Annotated[PdfRestFileID, Field(description="The id of the file")]
12041227
output_url: Annotated[
1205-
str | None,
1228+
list[HttpUrl] | HttpUrl | None,
12061229
Field(description="The url of the unzipped file", alias="outputUrl"),
12071230
BeforeValidator(_ensure_list),
12081231
] = None
@@ -1221,7 +1244,7 @@ class PdfRestRawFileResponse(BaseModel):
12211244
BeforeValidator(_ensure_list),
12221245
]
12231246
output_urls: Annotated[
1224-
list[HttpUrl] | None,
1247+
list[HttpUrl] | HttpUrl | None,
12251248
Field(alias="outputUrl", description="The url of the file"),
12261249
BeforeValidator(_ensure_list),
12271250
] = None

0 commit comments

Comments
 (0)