Skip to content

Commit 784a30b

Browse files
Add Import Form Data tool
Assisted-by: Codex
1 parent ce5e2de commit 784a30b

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
@@ -85,6 +85,7 @@
8585
PdfFlattenAnnotationsPayload,
8686
PdfFlattenFormsPayload,
8787
PdfFlattenTransparenciesPayload,
88+
PdfImportFormDataPayload,
8889
PdfInfoPayload,
8990
PdfLinearizePayload,
9091
PdfMergePayload,
@@ -2658,6 +2659,33 @@ def convert_to_word(
26582659
timeout=timeout,
26592660
)
26602661

2662+
def import_form_data(
2663+
self,
2664+
file: PdfRestFile | Sequence[PdfRestFile],
2665+
data_file: PdfRestFile | Sequence[PdfRestFile],
2666+
*,
2667+
output: str | None = None,
2668+
extra_query: Query | None = None,
2669+
extra_headers: AnyMapping | None = None,
2670+
extra_body: Body | None = None,
2671+
timeout: TimeoutTypes | None = None,
2672+
) -> PdfRestFileBasedResponse:
2673+
"""Import form data from a data file into an existing PDF with form fields."""
2674+
2675+
payload: dict[str, Any] = {"files": file, "data_file": data_file}
2676+
if output is not None:
2677+
payload["output"] = output
2678+
2679+
return self._post_file_operation(
2680+
endpoint="/pdf-with-imported-form-data",
2681+
payload=payload,
2682+
payload_model=PdfImportFormDataPayload,
2683+
extra_query=extra_query,
2684+
extra_headers=extra_headers,
2685+
extra_body=extra_body,
2686+
timeout=timeout,
2687+
)
2688+
26612689
def flatten_pdf_forms(
26622690
self,
26632691
file: PdfRestFile | Sequence[PdfRestFile],
@@ -3700,6 +3728,33 @@ async def convert_to_word(
37003728
timeout=timeout,
37013729
)
37023730

3731+
async def import_form_data(
3732+
self,
3733+
file: PdfRestFile | Sequence[PdfRestFile],
3734+
data_file: PdfRestFile | Sequence[PdfRestFile],
3735+
*,
3736+
output: str | None = None,
3737+
extra_query: Query | None = None,
3738+
extra_headers: AnyMapping | None = None,
3739+
extra_body: Body | None = None,
3740+
timeout: TimeoutTypes | None = None,
3741+
) -> PdfRestFileBasedResponse:
3742+
"""Asynchronously import form data from a data file into a PDF."""
3743+
3744+
payload: dict[str, Any] = {"files": file, "data_file": data_file}
3745+
if output is not None:
3746+
payload["output"] = output
3747+
3748+
return await self._post_file_operation(
3749+
endpoint="/pdf-with-imported-form-data",
3750+
payload=payload,
3751+
payload_model=PdfImportFormDataPayload,
3752+
extra_query=extra_query,
3753+
extra_headers=extra_headers,
3754+
extra_body=extra_body,
3755+
timeout=timeout,
3756+
)
3757+
37033758
async def flatten_pdf_forms(
37043759
self,
37053760
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)