From c87bc6a9549c4f49c1f5841825a70dc628ab30b4 Mon Sep 17 00:00:00 2001 From: domverse Date: Sun, 22 Mar 2026 20:01:28 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20httpx=200.28=20AsyncClient=20multipart?= =?UTF-8?q?=20compat=20=E2=80=94=20pass=20all=20fields=20via=20files=3D=20?= =?UTF-8?q?list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- app/sync/paperless.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/sync/paperless.py b/app/sync/paperless.py index 1de0fd5..42d4d0a 100644 --- a/app/sync/paperless.py +++ b/app/sync/paperless.py @@ -116,23 +116,26 @@ class PaperlessClient: self, file_bytes: bytes, filename: str, metadata: dict ) -> str: """Upload a document; returns the Celery task_id UUID string.""" - form: list[tuple[str, str]] = [] + # Build multipart as a list of tuples so all parts go through a single + # AsyncByteStream — required for httpx >= 0.28 with AsyncClient. + parts: list[tuple[str, tuple]] = [ + ("document", (filename, file_bytes, "application/octet-stream")), + ] for key in ("title", "created", "archive_serial_number"): val = metadata.get(key) if val is not None: - form.append((key, str(val))) + parts.append((key, (None, str(val), "text/plain"))) if metadata.get("correspondent") is not None: - form.append(("correspondent", str(metadata["correspondent"]))) + parts.append(("correspondent", (None, str(metadata["correspondent"]), "text/plain"))) if metadata.get("document_type") is not None: - form.append(("document_type", str(metadata["document_type"]))) + parts.append(("document_type", (None, str(metadata["document_type"]), "text/plain"))) for tag_id in metadata.get("tags", []): - form.append(("tags", str(tag_id))) + parts.append(("tags", (None, str(tag_id), "text/plain"))) r = await self._request( "POST", "/api/documents/post_document/", - files={"document": (filename, file_bytes, "application/octet-stream")}, - data=form, + files=parts, ) result = r.json() # API returns a plain task UUID string