Skip to content

Commit b1b4a3a

Browse files
watermark-pdf: Serialize parameters as strings
Assisted-by: Codex
1 parent ca9891d commit b1b4a3a

2 files changed

Lines changed: 34 additions & 14 deletions

File tree

src/pdfrest/models/_internal.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,19 @@ def _serialize_as_comma_separated_string(value: list[Any] | None) -> str | None:
144144
return ",".join(str(element) for element in value)
145145

146146

147+
def _serialize_watermark_field_values(payload: dict[str, Any]) -> dict[str, Any]:
148+
for key in ("text_size", "watermark_file_scale", "opacity", "x", "y", "rotation"):
149+
if key in payload:
150+
payload[key] = str(payload[key])
151+
if "behind_page" in payload:
152+
behind_page_value = payload["behind_page"]
153+
if isinstance(behind_page_value, bool):
154+
payload["behind_page"] = "true" if behind_page_value else "false"
155+
else:
156+
payload["behind_page"] = str(behind_page_value)
157+
return payload
158+
159+
147160
def _serialize_file_ids(value: list[PdfRestFile]) -> str:
148161
return ",".join(str(file.id) for file in value)
149162

@@ -1699,7 +1712,7 @@ def _serialize_text_color(
16991712
payload["text_color_cmyk"] = _serialize_as_comma_separated_string(
17001713
serialized_color
17011714
)
1702-
return payload
1715+
return _serialize_watermark_field_values(payload)
17031716

17041717

17051718
class PdfImageWatermarkPayload(_BasePdfWatermarkPayload):
@@ -1722,6 +1735,13 @@ class PdfImageWatermarkPayload(_BasePdfWatermarkPayload):
17221735
float, Field(serialization_alias="watermark_file_scale", ge=0, default=0.5)
17231736
] = 0.5
17241737

1738+
@model_serializer(mode="wrap")
1739+
def _serialize_watermark_values(
1740+
self, handler: Callable[[PdfImageWatermarkPayload], dict[str, Any]]
1741+
) -> dict[str, Any]:
1742+
payload = handler(self)
1743+
return _serialize_watermark_field_values(payload)
1744+
17251745

17261746
class PdfXfaToAcroformsPayload(BaseModel):
17271747
"""Adapt caller options into a pdfRest-ready XFA-to-AcroForms request payload."""

tests/test_watermark_pdf.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def handler(request: httpx.Request) -> httpx.Response:
174174
assert payload["watermark_text"] == "Draft"
175175
assert payload["text_color_cmyk"] == "0,0,0,50"
176176
assert "text_color_rgb" not in payload
177-
assert payload["opacity"] == 0.25
177+
assert payload["opacity"] == "0.25"
178178
assert payload["output"] == "custom"
179179
assert payload["debug"] == "yes"
180180
assert payload["id"] == str(input_file.id)
@@ -242,12 +242,12 @@ def handler(request: httpx.Request) -> httpx.Response:
242242
captured_timeout["value"] = request.extensions.get("timeout")
243243
payload = json.loads(request.content.decode("utf-8"))
244244
assert payload["watermark_file_id"] == str(watermark_file.id)
245-
assert payload["watermark_file_scale"] == pytest.approx(0.65)
245+
assert payload["watermark_file_scale"] == "0.65"
246246
assert payload["horizontal_alignment"] == "left"
247247
assert payload["vertical_alignment"] == "top"
248-
assert payload["x"] == -24
249-
assert payload["y"] == 48
250-
assert payload["rotation"] == 15
248+
assert payload["x"] == "-24"
249+
assert payload["y"] == "48"
250+
assert payload["rotation"] == "15"
251251
assert payload["debug"] == "img-sync"
252252
assert payload["id"] == str(input_file.id)
253253
return httpx.Response(
@@ -593,9 +593,9 @@ def handler(request: httpx.Request) -> httpx.Response:
593593
assert payload["watermark_text"] == "AsyncDraft"
594594
assert payload["horizontal_alignment"] == "left"
595595
assert payload["vertical_alignment"] == "bottom"
596-
assert payload["x"] == -72
597-
assert payload["y"] == 144
598-
assert payload["rotation"] == 30
596+
assert payload["x"] == "-72"
597+
assert payload["y"] == "144"
598+
assert payload["rotation"] == "30"
599599
return httpx.Response(
600600
200,
601601
json={
@@ -663,13 +663,13 @@ def handler(request: httpx.Request) -> httpx.Response:
663663
captured_timeout["value"] = request.extensions.get("timeout")
664664
payload = json.loads(request.content.decode("utf-8"))
665665
assert payload["watermark_file_id"] == str(watermark_file.id)
666-
assert payload["watermark_file_scale"] == pytest.approx(0.25)
667-
assert payload["opacity"] == pytest.approx(0.85)
666+
assert payload["watermark_file_scale"] == "0.25"
667+
assert payload["opacity"] == "0.85"
668668
assert payload["horizontal_alignment"] == "right"
669669
assert payload["vertical_alignment"] == "bottom"
670-
assert payload["x"] == 12
671-
assert payload["y"] == -18
672-
assert payload["rotation"] == 330
670+
assert payload["x"] == "12"
671+
assert payload["y"] == "-18"
672+
assert payload["rotation"] == "330"
673673
assert payload["debug"] == "img-async"
674674
assert payload["id"] == str(input_file.id)
675675
return httpx.Response(

0 commit comments

Comments
 (0)