Skip to content

Commit eebae4a

Browse files
Add Add Attachment
Assisted-by: Codex
1 parent ce5e2de commit eebae4a

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

src/pdfrest/client.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
GifPdfRestPayload,
8282
JpegPdfRestPayload,
8383
OcrPdfPayload,
84+
PdfAddAttachmentPayload,
8485
PdfCompressPayload,
8586
PdfFlattenAnnotationsPayload,
8687
PdfFlattenFormsPayload,
@@ -2717,6 +2718,33 @@ def compress_pdf(
27172718
timeout=timeout,
27182719
)
27192720

2721+
def add_attachment_to_pdf(
2722+
self,
2723+
file: PdfRestFile | Sequence[PdfRestFile],
2724+
*,
2725+
attachment: PdfRestFile | Sequence[PdfRestFile],
2726+
output: str | None = None,
2727+
extra_query: Query | None = None,
2728+
extra_headers: AnyMapping | None = None,
2729+
extra_body: Body | None = None,
2730+
timeout: TimeoutTypes | None = None,
2731+
) -> PdfRestFileBasedResponse:
2732+
"""Attach an uploaded file to a PDF."""
2733+
2734+
payload: dict[str, Any] = {"files": file, "attachment": attachment}
2735+
if output is not None:
2736+
payload["output"] = output
2737+
2738+
return self._post_file_operation(
2739+
endpoint="/pdf-with-added-attachment",
2740+
payload=payload,
2741+
payload_model=PdfAddAttachmentPayload,
2742+
extra_query=extra_query,
2743+
extra_headers=extra_headers,
2744+
extra_body=extra_body,
2745+
timeout=timeout,
2746+
)
2747+
27202748
def flatten_transparencies(
27212749
self,
27222750
file: PdfRestFile | Sequence[PdfRestFile],
@@ -3759,6 +3787,33 @@ async def compress_pdf(
37593787
timeout=timeout,
37603788
)
37613789

3790+
async def add_attachment_to_pdf(
3791+
self,
3792+
file: PdfRestFile | Sequence[PdfRestFile],
3793+
*,
3794+
attachment: PdfRestFile | Sequence[PdfRestFile],
3795+
output: str | None = None,
3796+
extra_query: Query | None = None,
3797+
extra_headers: AnyMapping | None = None,
3798+
extra_body: Body | None = None,
3799+
timeout: TimeoutTypes | None = None,
3800+
) -> PdfRestFileBasedResponse:
3801+
"""Asynchronously attach an uploaded file to a PDF."""
3802+
3803+
payload: dict[str, Any] = {"files": file, "attachment": attachment}
3804+
if output is not None:
3805+
payload["output"] = output
3806+
3807+
return await self._post_file_operation(
3808+
endpoint="/pdf-with-added-attachment",
3809+
payload=payload,
3810+
payload_model=PdfAddAttachmentPayload,
3811+
extra_query=extra_query,
3812+
extra_headers=extra_headers,
3813+
extra_body=extra_body,
3814+
timeout=timeout,
3815+
)
3816+
37623817
async def flatten_transparencies(
37633818
self,
37643819
file: PdfRestFile | Sequence[PdfRestFile],

src/pdfrest/models/_internal.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,46 @@ class PdfFlattenAnnotationsPayload(BaseModel):
11421142
] = None
11431143

11441144

1145+
class PdfAddAttachmentPayload(BaseModel):
1146+
"""Adapt caller options into a pdfRest-ready add-attachment request payload."""
1147+
1148+
files: Annotated[
1149+
list[PdfRestFile],
1150+
Field(
1151+
min_length=1,
1152+
max_length=1,
1153+
validation_alias=AliasChoices("file", "files"),
1154+
serialization_alias="id",
1155+
),
1156+
BeforeValidator(_ensure_list),
1157+
AfterValidator(
1158+
_allowed_mime_types("application/pdf", error_msg="Must be a PDF file")
1159+
),
1160+
PlainSerializer(_serialize_as_first_file_id),
1161+
]
1162+
attachments: Annotated[
1163+
list[PdfRestFile],
1164+
Field(
1165+
min_length=1,
1166+
max_length=1,
1167+
validation_alias=AliasChoices(
1168+
"attachment",
1169+
"attachments",
1170+
"file_to_attach",
1171+
"files_to_attach",
1172+
),
1173+
serialization_alias="id_to_attach",
1174+
),
1175+
BeforeValidator(_ensure_list),
1176+
PlainSerializer(_serialize_as_first_file_id),
1177+
]
1178+
output: Annotated[
1179+
str | None,
1180+
Field(serialization_alias="output", min_length=1, default=None),
1181+
AfterValidator(_validate_output_prefix),
1182+
] = None
1183+
1184+
11451185
class BmpPdfRestPayload(BasePdfRestGraphicPayload[Literal["rgb", "gray"]]):
11461186
"""Adapt caller options into a pdfRest-ready BMP request payload."""
11471187

0 commit comments

Comments
 (0)