fix: support results[<x>] + export more metatada for scripts

This commit is contained in:
Ruben Fiszel
2023-11-03 21:53:58 +01:00
parent 7c8c048ea0
commit 64e98367a8
12 changed files with 48 additions and 4 deletions
@@ -42,6 +42,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -67,6 +67,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -28,6 +28,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -60,6 +60,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -40,6 +40,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -46,6 +46,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -42,6 +42,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -42,6 +42,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
@@ -37,6 +37,7 @@
"bash",
"postgresql",
"nativets",
"Nativets",
"bun",
"mysql",
"bigquery",
+28
View File
@@ -1440,8 +1440,28 @@ struct ScriptMetadata {
is_template: bool,
lock: Vec<String>,
kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
envs: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
concurrent_limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
concurrency_time_window_s: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
cache_ttl: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
dedicated_worker: Option<bool>,
#[serde(skip_serializing_if = "is_none_or_false")]
ws_error_handler_muted: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
priority: Option<i16>,
}
pub fn is_none_or_false(val: &Option<bool>) -> bool {
match val {
Some(val) => !val,
None => true,
}
}
enum ArchiveImpl {
Zip(async_zip::write::ZipFileWriter<File>),
Tar(tokio_tar::Builder<File>),
@@ -1629,6 +1649,14 @@ async fn tarball_workspace(
is_template: script.is_template,
kind: script.kind.to_string(),
lock,
envs: script.envs,
concurrent_limit: script.concurrent_limit,
concurrency_time_window_s: script.concurrency_time_window_s,
cache_ttl: script.cache_ttl,
dedicated_worker: script.dedicated_worker,
ws_error_handler_muted: script.ws_error_handler_muted,
priority: script.priority,
};
let metadata_str = serde_json::to_string_pretty(&metadata).unwrap();
archive
+2
View File
@@ -171,6 +171,8 @@ pub struct Script {
pub ws_error_handler_muted: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_ttl: Option<i32>,
}
#[derive(Serialize)]
+9 -4
View File
@@ -86,10 +86,10 @@ pub async fn eval_timeout(
}
}
if expr.starts_with("flow_input.") {
if expr.starts_with("flow_input.") || expr.starts_with("flow_input[") {
if let Some(ref flow_input) = flow_input {
for (k,v) in flow_input.iter() {
if &format!("flow_input.{k}") == &expr {
if &format!("flow_input.{k}") == &expr || &format!("flow_input[\"{k}\"]") == &expr {
// tracing::error!("FLOW_INPUT");
return Ok(v.clone())
}
@@ -98,12 +98,17 @@ pub async fn eval_timeout(
}
let p_id = by_id.as_ref().map(|x| format!("results.{}", x.previous_id));
let p_id2 = by_id.as_ref().map(|x| format!("results[\"{}\"]", x.previous_id));
if p_id.is_some() && transform_context.contains_key("previous_result") && &expr == p_id.as_ref().unwrap() {
// tracing::error!("PREVIOUS_RESULT");
return Ok(transform_context.get("previous_result").unwrap().as_ref().clone())
}
if p_id2.is_some() && transform_context.contains_key("previous_result") && &expr == p_id2.as_ref().unwrap() {
return Ok(transform_context.get("previous_result").unwrap().as_ref().clone())
}
if by_id.is_some() && authed_client.is_some() {
if let Some(x) = RE_FULL.captures(&expr).and_then(|x| x.get(1).map(|y| y.as_str())) {
// tracing::error!("{:?}", x.split(".").collect::<Vec<_>>());
@@ -161,7 +166,7 @@ pub async fn eval_timeout(
.map(|x| x.clone())
.collect_vec();
if !context_keys.contains(&"previous_result".to_string()) && (p_id.is_some() && expr.contains(p_id.as_ref().unwrap())) || expr.contains("error") {
if !context_keys.contains(&"previous_result".to_string()) && (p_id.is_some() && expr.contains(p_id.as_ref().unwrap())) || expr.contains("error") || (p_id2.is_some() && expr.contains(p_id2.as_ref().unwrap())) {
context_keys.push("previous_result".to_string());
}
let has_flow_input = expr.contains("flow_input");
@@ -237,7 +242,7 @@ fn replace_with_await(expr: String, fn_name: &str) -> String {
s
}
lazy_static! {
static ref RE: Regex = Regex::new(r"(?m)(?P<r>results\.(?:[a-z]|[A-Z]|_|[1-9])+)").unwrap();
static ref RE: Regex = Regex::new(r#"(?m)(?P<r>results(?:(?:\.(?:[a-z]|[A-Z]|_|[1-9])+)|(?:\[\".*?\"\])))"#).unwrap();
static ref RE_FULL: Regex = Regex::new(r"(?m)^results((?:\.(?:(?:[a-z]|[A-Z]|_|[1-9])+))+)$").unwrap();
}