Skip to content

Commit 2284c55

Browse files
watermark-pdf: Serialize to strings for payload
Assisted-by: Codex
1 parent 46d6cff commit 2284c55

2 files changed

Lines changed: 34 additions & 13 deletions

File tree

src/pdfrest/models/_internal.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ def _serialize_as_comma_separated_string(value: list[Any] | None) -> str | None:
163163
return ",".join(str(element) for element in value)
164164

165165

166+
def _serialize_as_string(value: Any) -> str:
167+
return str(value)
168+
169+
166170
def _serialize_file_ids(value: list[PdfRestFile]) -> str:
167171
return ",".join(str(file.id) for file in value)
168172

@@ -1648,7 +1652,9 @@ class _BasePdfWatermarkPayload(BaseModel):
16481652
AfterValidator(_validate_output_prefix),
16491653
] = None
16501654
opacity: Annotated[
1651-
float, Field(serialization_alias="opacity", ge=0, le=1, default=0.5)
1655+
float,
1656+
Field(serialization_alias="opacity", ge=0, le=1, default=0.5),
1657+
PlainSerializer(_serialize_as_string),
16521658
] = 0.5
16531659
horizontal_alignment: Annotated[
16541660
WatermarkHorizontalAlignment,
@@ -1658,9 +1664,21 @@ class _BasePdfWatermarkPayload(BaseModel):
16581664
WatermarkVerticalAlignment,
16591665
Field(serialization_alias="vertical_alignment", default="center"),
16601666
] = "center"
1661-
x: Annotated[int, Field(serialization_alias="x", default=0)] = 0
1662-
y: Annotated[int, Field(serialization_alias="y", default=0)] = 0
1663-
rotation: Annotated[int, Field(serialization_alias="rotation", default=0)] = 0
1667+
x: Annotated[
1668+
int,
1669+
Field(serialization_alias="x", default=0),
1670+
PlainSerializer(_serialize_as_string),
1671+
] = 0
1672+
y: Annotated[
1673+
int,
1674+
Field(serialization_alias="y", default=0),
1675+
PlainSerializer(_serialize_as_string),
1676+
] = 0
1677+
rotation: Annotated[
1678+
int,
1679+
Field(serialization_alias="rotation", default=0),
1680+
PlainSerializer(_serialize_as_string),
1681+
] = 0
16641682
pages: Annotated[
16651683
list[AscendingPageRange] | None,
16661684
Field(serialization_alias="pages", min_length=1, default=None),
@@ -1687,6 +1705,7 @@ class PdfTextWatermarkPayload(_BasePdfWatermarkPayload):
16871705
text_size: Annotated[
16881706
int,
16891707
Field(serialization_alias="text_size", ge=5, le=100, default=72),
1708+
PlainSerializer(_serialize_as_string),
16901709
] = 72
16911710
text_color_rgb: Annotated[
16921711
tuple[RgbChannel, RgbChannel, RgbChannel] | None,
@@ -1744,7 +1763,9 @@ class PdfImageWatermarkPayload(_BasePdfWatermarkPayload):
17441763
PlainSerializer(_serialize_as_first_file_id),
17451764
]
17461765
watermark_file_scale: Annotated[
1747-
float, Field(serialization_alias="watermark_file_scale", ge=0, default=0.5)
1766+
float,
1767+
Field(serialization_alias="watermark_file_scale", ge=0, default=0.5),
1768+
PlainSerializer(_serialize_as_string),
17481769
] = 0.5
17491770

17501771

tests/test_watermark_pdf.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ def handler(request: httpx.Request) -> httpx.Response:
216216
payload = json.loads(request.content.decode("utf-8"))
217217
assert payload["watermark_text"] == "Draft"
218218
assert payload["text_color_cmyk"] == "0,0,0,50"
219-
assert payload["opacity"] == 0.25
219+
assert payload["opacity"] == "0.25"
220220
assert payload["output"] == "custom"
221221
assert payload["debug"] == "yes"
222222
assert payload["id"] == str(input_file.id)
@@ -285,8 +285,8 @@ def handler(request: httpx.Request) -> httpx.Response:
285285
payload = json.loads(request.content.decode("utf-8"))
286286
assert payload["id"] == str(input_file.id)
287287
assert payload["watermark_file_id"] == str(watermark_file.id)
288-
assert payload["watermark_file_scale"] == 0.75
289-
assert payload["opacity"] == 0.2
288+
assert payload["watermark_file_scale"] == "0.75"
289+
assert payload["opacity"] == "0.2"
290290
assert payload["output"] == "custom-image"
291291
assert payload["debug"] == "yes"
292292
return httpx.Response(
@@ -1098,9 +1098,9 @@ def handler(request: httpx.Request) -> httpx.Response:
10981098
assert payload["text_color_rgb"] == "12,34,56"
10991099
assert payload["horizontal_alignment"] == "left"
11001100
assert payload["vertical_alignment"] == "bottom"
1101-
assert payload["x"] == -72
1102-
assert payload["y"] == 144
1103-
assert payload["rotation"] == 30
1101+
assert payload["x"] == "-72"
1102+
assert payload["y"] == "144"
1103+
assert payload["rotation"] == "30"
11041104
return httpx.Response(
11051105
200,
11061106
json={
@@ -1172,8 +1172,8 @@ def handler(request: httpx.Request) -> httpx.Response:
11721172
payload = json.loads(request.content.decode("utf-8"))
11731173
assert payload["id"] == str(input_file.id)
11741174
assert payload["watermark_file_id"] == str(watermark_file.id)
1175-
assert payload["watermark_file_scale"] == 0.6
1176-
assert payload["opacity"] == 0.25
1175+
assert payload["watermark_file_scale"] == "0.6"
1176+
assert payload["opacity"] == "0.25"
11771177
assert payload["output"] == "async-custom-image"
11781178
assert payload["debug"] == "async"
11791179
return httpx.Response(

0 commit comments

Comments
 (0)