Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
421 changes: 421 additions & 0 deletions src/pdfrest/client.py

Large diffs are not rendered by default.

191 changes: 189 additions & 2 deletions src/pdfrest/models/_internal.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@
OcrLanguage,
PdfAType,
PdfInfoQuery,
PdfRestriction,
PdfXType,
SummaryFormat,
SummaryOutputFormat,
SummaryOutputType,
TranslateOutputFormat,
)
from . import PdfRestFile
from .public import PdfRestFileID
from .public import PdfRestFile, PdfRestFileID
Comment thread
datalogics-kam marked this conversation as resolved.


def _ensure_list(value: Any) -> Any:
Expand Down Expand Up @@ -1142,6 +1142,193 @@ class PdfFlattenAnnotationsPayload(BaseModel):
] = None


class PdfRestrictPayload(BaseModel):
"""Adapt caller options into a pdfRest-ready restrict-PDF request payload."""

files: Annotated[
list[PdfRestFile],
Field(
min_length=1,
max_length=1,
validation_alias=AliasChoices("file", "files"),
serialization_alias="id",
),
BeforeValidator(_ensure_list),
AfterValidator(
_allowed_mime_types("application/pdf", error_msg="Must be a PDF file")
),
PlainSerializer(_serialize_as_first_file_id),
]
new_permissions_password: Annotated[
str,
Field(
serialization_alias="new_permissions_password",
min_length=6,
max_length=128,
),
]
restrictions: Annotated[
list[PdfRestriction] | None,
Field(serialization_alias="restrictions", min_length=1, default=None),
BeforeValidator(_ensure_list),
] = None
current_permissions_password: Annotated[
str | None,
Field(
serialization_alias="current_permissions_password",
min_length=1,
max_length=128,
default=None,
),
] = None
current_open_password: Annotated[
str | None,
Field(
serialization_alias="current_open_password",
min_length=1,
max_length=128,
default=None,
),
] = None
output: Annotated[
str | None,
Field(serialization_alias="output", min_length=1, default=None),
AfterValidator(_validate_output_prefix),
] = None


class PdfUnrestrictPayload(BaseModel):
"""Adapt caller options into a pdfRest-ready unrestrict-PDF request payload."""

files: Annotated[
list[PdfRestFile],
Field(
min_length=1,
max_length=1,
validation_alias=AliasChoices("file", "files"),
serialization_alias="id",
),
BeforeValidator(_ensure_list),
AfterValidator(
_allowed_mime_types("application/pdf", error_msg="Must be a PDF file")
),
PlainSerializer(_serialize_as_first_file_id),
]
current_permissions_password: Annotated[
str,
Field(
serialization_alias="current_permissions_password",
min_length=1,
max_length=128,
),
]
current_open_password: Annotated[
str | None,
Field(
serialization_alias="current_open_password",
min_length=1,
max_length=128,
default=None,
),
] = None
output: Annotated[
str | None,
Field(serialization_alias="output", min_length=1, default=None),
AfterValidator(_validate_output_prefix),
] = None


class PdfEncryptPayload(BaseModel):
"""Adapt caller options into a pdfRest-ready encrypt-PDF request payload."""

files: Annotated[
list[PdfRestFile],
Field(
min_length=1,
max_length=1,
validation_alias=AliasChoices("file", "files"),
serialization_alias="id",
),
BeforeValidator(_ensure_list),
AfterValidator(
_allowed_mime_types("application/pdf", error_msg="Must be a PDF file")
),
PlainSerializer(_serialize_as_first_file_id),
]
new_open_password: Annotated[
str,
Field(
serialization_alias="new_open_password",
min_length=6,
max_length=128,
),
]
current_open_password: Annotated[
str | None,
Field(
serialization_alias="current_open_password",
min_length=1,
max_length=128,
default=None,
),
] = None
current_permissions_password: Annotated[
str | None,
Field(
serialization_alias="current_permissions_password",
min_length=1,
max_length=128,
default=None,
),
] = None
output: Annotated[
str | None,
Field(serialization_alias="output", min_length=1, default=None),
AfterValidator(_validate_output_prefix),
] = None


class PdfDecryptPayload(BaseModel):
"""Adapt caller options into a pdfRest-ready decrypt-PDF request payload."""

files: Annotated[
list[PdfRestFile],
Field(
min_length=1,
max_length=1,
validation_alias=AliasChoices("file", "files"),
serialization_alias="id",
),
BeforeValidator(_ensure_list),
AfterValidator(
_allowed_mime_types("application/pdf", error_msg="Must be a PDF file")
),
PlainSerializer(_serialize_as_first_file_id),
]
current_open_password: Annotated[
str,
Field(
serialization_alias="current_open_password",
min_length=1,
max_length=128,
),
]
current_permissions_password: Annotated[
str | None,
Field(
serialization_alias="current_permissions_password",
min_length=1,
max_length=128,
default=None,
),
] = None
output: Annotated[
str | None,
Field(serialization_alias="output", min_length=1, default=None),
AfterValidator(_validate_output_prefix),
] = None


class BmpPdfRestPayload(BasePdfRestGraphicPayload[Literal["rgb", "gray"]]):
"""Adapt caller options into a pdfRest-ready BMP request payload."""

Expand Down
4 changes: 4 additions & 0 deletions src/pdfrest/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from .public import (
ALL_OCR_LANGUAGES,
ALL_PDF_INFO_QUERIES,
ALL_PDF_RESTRICTIONS,
BmpColorModel,
CompressionLevel,
ExtractTextGranularity,
Expand All @@ -19,6 +20,7 @@
PdfRedactionInstruction,
PdfRedactionPreset,
PdfRedactionType,
PdfRestriction,
PdfRGBColor,
PdfXType,
PngColorModel,
Expand All @@ -32,6 +34,7 @@
__all__ = [
"ALL_OCR_LANGUAGES",
"ALL_PDF_INFO_QUERIES",
"ALL_PDF_RESTRICTIONS",
"BmpColorModel",
"CompressionLevel",
"ExtractTextGranularity",
Expand All @@ -49,6 +52,7 @@
"PdfRedactionInstruction",
"PdfRedactionPreset",
"PdfRedactionType",
"PdfRestriction",
"PdfXType",
"PngColorModel",
"SummaryFormat",
Expand Down
17 changes: 17 additions & 0 deletions src/pdfrest/types/public.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
__all__ = (
"ALL_OCR_LANGUAGES",
"ALL_PDF_INFO_QUERIES",
"ALL_PDF_RESTRICTIONS",
"BmpColorModel",
"CompressionLevel",
"ExtractTextGranularity",
Expand All @@ -32,6 +33,7 @@
"PdfRedactionInstruction",
"PdfRedactionPreset",
"PdfRedactionType",
"PdfRestriction",
"PdfXType",
"PngColorModel",
"SummaryFormat",
Expand Down Expand Up @@ -160,3 +162,18 @@ class PdfMergeSource(TypedDict, total=False):
ALL_OCR_LANGUAGES: tuple[OcrLanguage, ...] = cast(
tuple[OcrLanguage, ...], get_args(OcrLanguage)
)

PdfRestriction = Literal[
"print_low",
"print_high",
"edit_document_assembly",
"edit_fill_and_sign_form_fields",
"edit_annotations",
"edit_content",
"copy_content",
"accessibility_off",
]

ALL_PDF_RESTRICTIONS: tuple[PdfRestriction, ...] = cast(
tuple[PdfRestriction, ...], get_args(PdfRestriction)
)
Loading