Skip to content

Commit 01214ea

Browse files
Add Add Attachment
Assisted-by: Codex
1 parent 3d1c459 commit 01214ea

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
@@ -82,6 +82,7 @@
8282
GifPdfRestPayload,
8383
JpegPdfRestPayload,
8484
OcrPdfPayload,
85+
PdfAddAttachmentPayload,
8586
PdfCompressPayload,
8687
PdfDecryptPayload,
8788
PdfEncryptPayload,
@@ -2973,6 +2974,33 @@ def compress_pdf(
29732974
timeout=timeout,
29742975
)
29752976

2977+
def add_attachment_to_pdf(
2978+
self,
2979+
file: PdfRestFile | Sequence[PdfRestFile],
2980+
*,
2981+
attachment: PdfRestFile | Sequence[PdfRestFile],
2982+
output: str | None = None,
2983+
extra_query: Query | None = None,
2984+
extra_headers: AnyMapping | None = None,
2985+
extra_body: Body | None = None,
2986+
timeout: TimeoutTypes | None = None,
2987+
) -> PdfRestFileBasedResponse:
2988+
"""Attach an uploaded file to a PDF."""
2989+
2990+
payload: dict[str, Any] = {"files": file, "attachment": attachment}
2991+
if output is not None:
2992+
payload["output"] = output
2993+
2994+
return self._post_file_operation(
2995+
endpoint="/pdf-with-added-attachment",
2996+
payload=payload,
2997+
payload_model=PdfAddAttachmentPayload,
2998+
extra_query=extra_query,
2999+
extra_headers=extra_headers,
3000+
extra_body=extra_body,
3001+
timeout=timeout,
3002+
)
3003+
29763004
def flatten_transparencies(
29773005
self,
29783006
file: PdfRestFile | Sequence[PdfRestFile],
@@ -4260,6 +4288,33 @@ async def compress_pdf(
42604288
timeout=timeout,
42614289
)
42624290

4291+
async def add_attachment_to_pdf(
4292+
self,
4293+
file: PdfRestFile | Sequence[PdfRestFile],
4294+
*,
4295+
attachment: PdfRestFile | Sequence[PdfRestFile],
4296+
output: str | None = None,
4297+
extra_query: Query | None = None,
4298+
extra_headers: AnyMapping | None = None,
4299+
extra_body: Body | None = None,
4300+
timeout: TimeoutTypes | None = None,
4301+
) -> PdfRestFileBasedResponse:
4302+
"""Asynchronously attach an uploaded file to a PDF."""
4303+
4304+
payload: dict[str, Any] = {"files": file, "attachment": attachment}
4305+
if output is not None:
4306+
payload["output"] = output
4307+
4308+
return await self._post_file_operation(
4309+
endpoint="/pdf-with-added-attachment",
4310+
payload=payload,
4311+
payload_model=PdfAddAttachmentPayload,
4312+
extra_query=extra_query,
4313+
extra_headers=extra_headers,
4314+
extra_body=extra_body,
4315+
timeout=timeout,
4316+
)
4317+
42634318
async def flatten_transparencies(
42644319
self,
42654320
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 PdfRestrictPayload(BaseModel):
11461186
"""Adapt caller options into a pdfRest-ready restrict-PDF request payload."""
11471187

0 commit comments

Comments
 (0)