From ec38f92aa604e9ace32c7d287cd7aa336ec0e7ba Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 1 Mar 2024 01:12:20 +0100 Subject: [PATCH] fix: improve dev mode for flows --- backend/windmill-api/src/settings.rs | 4 +- backend/windmill-api/src/users.rs | 40 ++++++++++--------- frontend/src/lib/components/Dev.svelte | 6 +-- .../src/lib/components/ModulePreview.svelte | 8 ++-- .../src/lib/components/TestJobLoader.svelte | 5 +++ .../flows/content/FlowModuleComponent.svelte | 1 + 6 files changed, 37 insertions(+), 27 deletions(-) diff --git a/backend/windmill-api/src/settings.rs b/backend/windmill-api/src/settings.rs index 88429d0035..d4f3a53668 100644 --- a/backend/windmill-api/src/settings.rs +++ b/backend/windmill-api/src/settings.rs @@ -56,10 +56,10 @@ pub async fn test_email( require_super_admin(&db, &authed.email).await?; let smtp = test_email.smtp; let to = test_email.to; - let client = SmtpClientBuilder::new(smtp.host, smtp.port) + let mut client = SmtpClientBuilder::new(smtp.host, smtp.port) .implicit_tls(smtp.tls_implicit.unwrap_or(false)); if std::env::var("ACCEPT_INVALID_CERTS").is_ok() { - client.allow_invalid_certs(); + client = client.allow_invalid_certs(); } let client = if let (Some(username), Some(password)) = (smtp.username, smtp.password) { if !username.is_empty() { diff --git a/backend/windmill-api/src/users.rs b/backend/windmill-api/src/users.rs index 41ee126b18..ba9dd8b813 100644 --- a/backend/windmill-api/src/users.rs +++ b/backend/windmill-api/src/users.rs @@ -543,7 +543,6 @@ pub struct User { pub role: Option, } - #[derive(Serialize)] pub struct UserWithUsage { pub email: String, @@ -718,12 +717,14 @@ async fn list_users( require_admin(authed.is_admin, &authed.username)?; } let mut tx = user_db.begin(&authed).await?; - let rows = sqlx::query_as!(User, + let rows = sqlx::query_as!( + User, " SELECT * FROM usr WHERE workspace_id = $1 - ", w_id + ", + w_id ) .fetch_all(&mut *tx) .await?; @@ -731,17 +732,18 @@ async fn list_users( Ok(Json(rows)) } -async fn list_user_usage( +async fn list_user_usage( authed: ApiAuthed, Extension(user_db): Extension, - Path(w_id): Path) -> JsonResult> { -if *CLOUD_HOSTED && w_id == "demo" { - require_admin(authed.is_admin, &authed.username)?; -} -let mut tx = user_db.begin(&authed).await?; -let rows = sqlx::query_as!( - UserWithUsage, - " + Path(w_id): Path, +) -> JsonResult> { + if *CLOUD_HOSTED && w_id == "demo" { + require_admin(authed.is_admin, &authed.username)?; + } + let mut tx = user_db.begin(&authed).await?; + let rows = sqlx::query_as!( + UserWithUsage, + " SELECT usr.email, usage.executions FROM usr , LATERAL ( @@ -755,11 +757,11 @@ let rows = sqlx::query_as!( WHERE workspace_id = $1 ", w_id -) -.fetch_all(&mut *tx) -.await?; -tx.commit().await?; -Ok(Json(rows)) + ) + .fetch_all(&mut *tx) + .await?; + tx.commit().await?; + Ok(Json(rows)) } async fn list_users_as_super_admin( @@ -1679,10 +1681,10 @@ pub fn send_email_if_possible(subject: &str, content: &str, to: &str) { pub async fn send_email_if_possible_intern(subject: &str, content: &str, to: &str) -> Result<()> { if let Some(smtp) = SERVER_CONFIG.read().await.smtp.clone() { - let client = SmtpClientBuilder::new(smtp.host, smtp.port) + let mut client = SmtpClientBuilder::new(smtp.host, smtp.port) .implicit_tls(smtp.tls_implicit.unwrap_or(false)); if std::env::var("ACCEPT_INVALID_CERTS").is_ok() { - client.allow_invalid_certs(); + client = client.allow_invalid_certs(); } let client = if let (Some(username), Some(password)) = (smtp.username, smtp.password) { if !username.is_empty() { diff --git a/frontend/src/lib/components/Dev.svelte b/frontend/src/lib/components/Dev.svelte index b90160eed5..c02fef0756 100644 --- a/frontend/src/lib/components/Dev.svelte +++ b/frontend/src/lib/components/Dev.svelte @@ -311,7 +311,7 @@ } } - let mode: 'script' | 'flow' = 'flow' //'script' + let mode: 'script' | 'flow' = 'script' const flowStore = writable({ summary: '', @@ -375,10 +375,10 @@ initialPath: '' }) - $: updateCode($flowStore) + $: updateFlow($flowStore) let lastSent: OpenFlow | undefined = undefined - function updateCode(flow: OpenFlow) { + function updateFlow(flow: OpenFlow) { if (lockChanges) { return } diff --git a/frontend/src/lib/components/ModulePreview.svelte b/frontend/src/lib/components/ModulePreview.svelte index da7749eddb..91531113b8 100644 --- a/frontend/src/lib/components/ModulePreview.svelte +++ b/frontend/src/lib/components/ModulePreview.svelte @@ -23,8 +23,9 @@ export let schema: Schema export let pickableProperties: PickableProperties | undefined export let lang: Script.language - export let editor: Editor - export let diffEditor: DiffEditor + export let editor: Editor | undefined + export let diffEditor: DiffEditor | undefined + export let noEditor = false const { flowStore, flowStateStore, testStepStore, pathStore } = getContext('FlowEditorContext') @@ -35,7 +36,7 @@ let testJob: Job | undefined = undefined let stepArgs: Record | undefined = Object.fromEntries( - Object.keys(schema.properties).map((k) => [ + Object.keys(schema.properties ?? {}).map((k) => [ k, evalValue(k, mod, $testStepStore, pickableProperties, false) ]) @@ -89,6 +90,7 @@ jobDone()} bind:this={testJobLoader} bind:isLoading={testIsLoading} diff --git a/frontend/src/lib/components/TestJobLoader.svelte b/frontend/src/lib/components/TestJobLoader.svelte index 746c8bb111..c0dacbeaac 100644 --- a/frontend/src/lib/components/TestJobLoader.svelte +++ b/frontend/src/lib/components/TestJobLoader.svelte @@ -5,12 +5,14 @@ import type { Preview } from '$lib/gen/models/Preview' import { createEventDispatcher } from 'svelte' import type { SupportedLanguage } from '$lib/common' + import { sendUserToast } from '$lib/toast' export let isLoading = false export let job: Job | undefined = undefined export let workspaceOverride: string | undefined = undefined export let notfound = false export let jobUpdateLastFetch: Date | undefined = undefined + export let toastError = false const dispatch = createEventDispatcher() @@ -48,6 +50,9 @@ } return testId } catch (err) { + if (toastError) { + sendUserToast(err.body, true) + } // if error happens on submitting the job, reset UI state so the user can try again isLoading = false currentId = undefined diff --git a/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte b/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte index f550dff29a..bb2240a77f 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleComponent.svelte @@ -346,6 +346,7 @@ mod={flowModule} {editor} {diffEditor} + {noEditor} lang={flowModule.value['language'] ?? 'deno'} schema={$flowStateStore[$selectedId]?.schema ?? {}} />