diff --git a/backend/parsers/windmill-parser-py/src/lib.rs b/backend/parsers/windmill-parser-py/src/lib.rs index d8c908d318..6ebafee739 100644 --- a/backend/parsers/windmill-parser-py/src/lib.rs +++ b/backend/parsers/windmill-parser-py/src/lib.rs @@ -80,7 +80,7 @@ pub fn parse_python_signature(code: &str) -> error::Result { let def_arg_start = params.args.len() - params.defaults.len(); Ok(MainArgSignature { star_args: params.vararg.is_some(), - star_kwargs: params.vararg.is_some(), + star_kwargs: params.kwarg.is_some(), args: params .args .into_iter() diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index 74d9755d01..1ee0899ed6 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -1740,6 +1740,15 @@ async fn handle_python_job( } else { "" }; + let spread = if sig.star_kwargs { + "args = kwargs".to_string() + } else { + sig.args + .into_iter() + .map(|x| format!("args[\"{}\"] = kwargs[\"{}\"]", x.name, x.name)) + .join("\n") + }; + let wrapper_content: String = format!( r#" import json @@ -1756,9 +1765,11 @@ with open("args.json") as f: for k, v in list(kwargs.items()): if v == '': del kwargs[k] +args = {{}} +{spread} {transforms} try: - res = inner_script.main(**kwargs) + res = inner_script.main(**args) res_json = json.dumps(res, separators=(',', ':'), default=str).replace('\n', '') with open("result.json", 'w') as f: f.write(res_json)