Skip to content

Commit 6f4d8e3

Browse files
Add Import Form Data tool
Assisted-by: Codex
1 parent 3d1c459 commit 6f4d8e3

2 files changed

Lines changed: 101 additions & 0 deletions

File tree

src/pdfrest/client.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
PdfFlattenAnnotationsPayload,
8989
PdfFlattenFormsPayload,
9090
PdfFlattenTransparenciesPayload,
91+
PdfImportFormDataPayload,
9192
PdfInfoPayload,
9293
PdfLinearizePayload,
9394
PdfMergePayload,
@@ -2706,6 +2707,33 @@ def convert_to_word(
27062707
timeout=timeout,
27072708
)
27082709

2710+
def import_form_data(
2711+
self,
2712+
file: PdfRestFile | Sequence[PdfRestFile],
2713+
data_file: PdfRestFile | Sequence[PdfRestFile],
2714+
*,
2715+
output: str | None = None,
2716+
extra_query: Query | None = None,
2717+
extra_headers: AnyMapping | None = None,
2718+
extra_body: Body | None = None,
2719+
timeout: TimeoutTypes | None = None,
2720+
) -> PdfRestFileBasedResponse:
2721+
"""Import form data from a data file into an existing PDF with form fields."""
2722+
2723+
payload: dict[str, Any] = {"files": file, "data_file": data_file}
2724+
if output is not None:
2725+
payload["output"] = output
2726+
2727+
return self._post_file_operation(
2728+
endpoint="/pdf-with-imported-form-data",
2729+
payload=payload,
2730+
payload_model=PdfImportFormDataPayload,
2731+
extra_query=extra_query,
2732+
extra_headers=extra_headers,
2733+
extra_body=extra_body,
2734+
timeout=timeout,
2735+
)
2736+
27092737
def flatten_pdf_forms(
27102738
self,
27112739
file: PdfRestFile | Sequence[PdfRestFile],
@@ -3993,6 +4021,33 @@ async def convert_to_word(
39934021
timeout=timeout,
39944022
)
39954023

4024+
async def import_form_data(
4025+
self,
4026+
file: PdfRestFile | Sequence[PdfRestFile],
4027+
data_file: PdfRestFile | Sequence[PdfRestFile],
4028+
*,
4029+
output: str | None = None,
4030+
extra_query: Query | None = None,
4031+
extra_headers: AnyMapping | None = None,
4032+
extra_body: Body | None = None,
4033+
timeout: TimeoutTypes | None = None,
4034+
) -> PdfRestFileBasedResponse:
4035+
"""Asynchronously import form data from a data file into a PDF."""
4036+
4037+
payload: dict[str, Any] = {"files": file, "data_file": data_file}
4038+
if output is not None:
4039+
payload["output"] = output
4040+
4041+
return await self._post_file_operation(
4042+
endpoint="/pdf-with-imported-form-data",
4043+
payload=payload,
4044+
payload_model=PdfImportFormDataPayload,
4045+
extra_query=extra_query,
4046+
extra_headers=extra_headers,
4047+
extra_body=extra_body,
4048+
timeout=timeout,
4049+
)
4050+
39964051
async def flatten_pdf_forms(
39974052
self,
39984053
file: PdfRestFile | Sequence[PdfRestFile],

src/pdfrest/models/_internal.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,52 @@ class PdfFlattenFormsPayload(BaseModel):
963963
] = None
964964

965965

966+
class PdfImportFormDataPayload(BaseModel):
967+
"""Adapt caller options into a pdfRest-ready import-form-data request payload."""
968+
969+
files: Annotated[
970+
list[PdfRestFile],
971+
Field(
972+
min_length=1,
973+
max_length=1,
974+
validation_alias=AliasChoices("file", "files"),
975+
serialization_alias="id",
976+
),
977+
BeforeValidator(_ensure_list),
978+
AfterValidator(
979+
_allowed_mime_types("application/pdf", error_msg="Must be a PDF file")
980+
),
981+
PlainSerializer(_serialize_as_first_file_id),
982+
]
983+
data_file: Annotated[
984+
list[PdfRestFile],
985+
Field(
986+
min_length=1,
987+
max_length=1,
988+
validation_alias=AliasChoices("data_file", "data_files"),
989+
serialization_alias="data_file_id",
990+
),
991+
BeforeValidator(_ensure_list),
992+
AfterValidator(
993+
_allowed_mime_types(
994+
"application/xml",
995+
"text/xml",
996+
"application/vnd.fdf",
997+
"application/vnd.adobe.xfdf",
998+
"application/vnd.adobe.xdp+xml",
999+
"application/vnd.adobe.xfd+xml",
1000+
error_msg="Data file must be an XFDF, XDP, XFD, FDF, or XML file",
1001+
)
1002+
),
1003+
PlainSerializer(_serialize_as_first_file_id),
1004+
]
1005+
output: Annotated[
1006+
str | None,
1007+
Field(serialization_alias="output", min_length=1, default=None),
1008+
AfterValidator(_validate_output_prefix),
1009+
] = None
1010+
1011+
9661012
class PdfCompressPayload(BaseModel):
9671013
"""Adapt caller options into a pdfRest-ready compress request payload."""
9681014

0 commit comments

Comments
 (0)