From c2666f7d7cd21d56dc4d7dc5600cdaaeb7029cf9 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Tue, 9 May 2023 02:46:46 +0200 Subject: [PATCH] feat(backend): add windmill_status_code to run_wait_result --- backend/windmill-api/src/jobs.rs | 7 +++++++ backend/windmill-common/src/error.rs | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/backend/windmill-api/src/jobs.rs b/backend/windmill-api/src/jobs.rs index 4cae788550..834fcfbcf9 100644 --- a/backend/windmill-api/src/jobs.rs +++ b/backend/windmill-api/src/jobs.rs @@ -1421,6 +1421,13 @@ async fn run_wait_result( } if let Some(result) = result { g.done = true; + let status_code = result + .get("windmill_status_code") + .and_then(|x| x.as_i64()) + .and_then(|x| StatusCode::from_u16(x as u16).ok()); + if let Some(status_code) = status_code { + return Err(Error::CustomStatusCode(status_code, result)); + } Ok(Json(result)) } else { Err(Error::ExecutionErr(format!("timeout after {}s", timeout))) diff --git a/backend/windmill-common/src/error.rs b/backend/windmill-common/src/error.rs index 8f878cbe57..54ac50c5e5 100644 --- a/backend/windmill-common/src/error.rs +++ b/backend/windmill-common/src/error.rs @@ -13,6 +13,7 @@ use axum::{ response::Json, }; +use hyper::StatusCode; #[cfg(feature = "sqlx")] use sqlx::migrate::MigrateError; use thiserror::Error; @@ -60,6 +61,8 @@ pub enum Error { Anyhow(#[from] anyhow::Error), #[error("Error: {0:#?}")] JsonErr(serde_json::Value), + #[error("Custom Status Code: {0:#?}")] + CustomStatusCode(StatusCode, serde_json::Value), } impl Error { @@ -82,6 +85,7 @@ impl IntoResponse for Error { Self::NotFound(_) => axum::http::StatusCode::NOT_FOUND, Self::NotAuthorized(_) => axum::http::StatusCode::UNAUTHORIZED, Self::RequireAdmin(_) => axum::http::StatusCode::FORBIDDEN, + Self::CustomStatusCode(code, _) => code, Self::SqlErr(_) | Self::BadRequest(_) => axum::http::StatusCode::BAD_REQUEST, _ => axum::http::StatusCode::INTERNAL_SERVER_ERROR, };