From b6ef536098775c24dd1aa40f3a186d5b04ea53a2 Mon Sep 17 00:00:00 2001 From: Diego Imbert <70353967+diegoimbert@users.noreply.github.com> Date: Fri, 16 Jan 2026 11:33:22 +0100 Subject: [PATCH] fix: S3 secondary storage client and UI fixes (#7587) * fix storage selector broken * Fix writeS3File not returning secondary storage --- frontend/src/lib/components/S3FilePicker.svelte | 2 +- frontend/src/lib/components/S3FilePickerInner.svelte | 2 +- python-client/wmill/wmill/client.py | 2 +- typescript-client/client.ts | 6 +++++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/src/lib/components/S3FilePicker.svelte b/frontend/src/lib/components/S3FilePicker.svelte index 16eddb9f1a..13c6f32ef2 100644 --- a/frontend/src/lib/components/S3FilePicker.svelte +++ b/frontend/src/lib/components/S3FilePicker.svelte @@ -122,7 +122,7 @@ (v) => { if (v === storage) return storage = v - s3FilePickerInner?.reloadContent() + s3FilePickerInner?.reloadContent?.() } } /> diff --git a/frontend/src/lib/components/S3FilePickerInner.svelte b/frontend/src/lib/components/S3FilePickerInner.svelte index 5014e834a8..fd163ea855 100644 --- a/frontend/src/lib/components/S3FilePickerInner.svelte +++ b/frontend/src/lib/components/S3FilePickerInner.svelte @@ -443,7 +443,7 @@ : undefined } - async function reloadContent() { + export async function reloadContent() { if (initialFileKey !== undefined) { initialFileKeyInternalCopy = { ...initialFileKey } } diff --git a/python-client/wmill/wmill/client.py b/python-client/wmill/wmill/client.py index 56f6c6d6fc..cb1b502223 100644 --- a/python-client/wmill/wmill/client.py +++ b/python-client/wmill/wmill/client.py @@ -975,7 +975,7 @@ class Windmill: ).json() except Exception as e: raise Exception("Could not write file to S3") from e - return S3Object(s3=response["file_key"]) + return S3Object(s3=response["file_key"], storage=s3object["storage"]) def sign_s3_objects(self, s3_objects: list[S3Object | str]) -> list[S3Object]: """Sign S3 objects for use by anonymous users in public apps. diff --git a/typescript-client/client.ts b/typescript-client/client.ts index d959f8a970..5b740110a9 100644 --- a/typescript-client/client.ts +++ b/typescript-client/client.ts @@ -961,6 +961,7 @@ export async function writeS3File( }); return { s3: response.file_key, + ...(s3Obj?.storage && { storage: s3Obj?.storage }), }; } @@ -1047,7 +1048,10 @@ export async function getPresignedS3PublicUrl( * This allows pre-approvals that can be consumed by any later suspend step in the same flow. * @returns approval page UI URL, resume and cancel API URLs for resuming the flow */ -export async function getResumeUrls(approver?: string, flowLevel?: boolean): Promise<{ +export async function getResumeUrls( + approver?: string, + flowLevel?: boolean +): Promise<{ approvalPage: string; resume: string; cancel: string;