diff --git a/backend/parsers/windmill-parser-py-imports/src/lib.rs b/backend/parsers/windmill-parser-py-imports/src/lib.rs index 912ed6e696..5d7d54d7eb 100644 --- a/backend/parsers/windmill-parser-py-imports/src/lib.rs +++ b/backend/parsers/windmill-parser-py-imports/src/lib.rs @@ -145,19 +145,20 @@ pub async fn parse_python_imports( .collect(); for n in nimports.iter() { let nested = if n.starts_with("relative:") { + let rpath = n.replace("relative:", ""); let code = sqlx::query_scalar!( r#" SELECT content FROM script WHERE path = $1 AND workspace_id = $2 AND created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND workspace_id = $2) "#, - n.replace("relative:", ""), + &rpath, w_id ) .fetch_optional(db) .await? .unwrap_or_else(|| "".to_string()); - parse_python_imports(&code, w_id, path, db).await? + parse_python_imports(&code, w_id, &rpath, db).await? } else { vec![replace_import(n.to_string())] }; diff --git a/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql b/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql index 434ae3b9ee..e100d2db9f 100644 --- a/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql +++ b/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql @@ -2556,4 +2556,27 @@ import numpy as np '{}', '', '', -'f/foo/baz', -28028598712388161, 'python3', ''); \ No newline at end of file +'f/foo/baz', -28028598712388161, 'python3', ''); + +INSERT INTO public.script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'test-workspace', +'system', +' +import difffolder +from .bar import main +', +'{}', +'', +'', +'f/foobar/baz', -28028598712388160, 'python3', ''); + +INSERT INTO public.script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'test-workspace', +'system', +' +import innerdifffolder +', +'{}', +'', +'', +'f/foobar/bar', -28028598712388159, 'python3', ''); \ No newline at end of file diff --git a/backend/parsers/windmill-parser-py-imports/tests/tests.rs b/backend/parsers/windmill-parser-py-imports/tests/tests.rs index d3e4d2bd99..18d995ba41 100644 --- a/backend/parsers/windmill-parser-py-imports/tests/tests.rs +++ b/backend/parsers/windmill-parser-py-imports/tests/tests.rs @@ -57,7 +57,7 @@ from f.foo.bar import main1 from .baz import main2 from ..foo.bar import main3 import f.foo.bar as bar - +from ..foobar.baz import main4 def main(): pass @@ -65,7 +65,17 @@ def main(): "; let r = parse_python_imports(code, "test-workspace", "f/foo/bar", &db).await?; println!("{}", serde_json::to_string(&r)?); - assert_eq!(r, ["numpy", "pandas", "pandas2", "requests"]); + assert_eq!( + r, + [ + "difffolder", + "innerdifffolder", + "numpy", + "pandas", + "pandas2", + "requests" + ] + ); Ok(()) }