From 01bd5ef6201122016bca3d7adb79c454ce08b611 Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Tue, 2 Dec 2025 13:30:53 +0100 Subject: [PATCH] still register ducklake/datatable if not used as unknown R/W --- .../windmill-parser-py/src/asset_parser.rs | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/backend/parsers/windmill-parser-py/src/asset_parser.rs b/backend/parsers/windmill-parser-py/src/asset_parser.rs index 43a71b564c..17a898655b 100644 --- a/backend/parsers/windmill-parser-py/src/asset_parser.rs +++ b/backend/parsers/windmill-parser-py/src/asset_parser.rs @@ -14,6 +14,21 @@ pub fn parse_assets(input: &str) -> anyhow::Result let mut assets_finder = AssetsFinder { assets: vec![], var_identifiers: HashMap::new() }; ast.into_iter() .for_each(|stmt| assets_finder.visit_stmt(stmt)); + + for (kind, name) in assets_finder.var_identifiers.into_values() { + // if a db = wmill.datatable() was never used (e.g db.query(...)), + // we still want to register the asset as unknown access type + if assets_finder + .assets + .iter() + .all(|a| !(a.kind == kind && a.path == name)) + { + assets_finder + .assets + .push(ParseAssetsResult { kind, access_type: None, path: name }); + } + } + Ok(merge_assets(assets_finder.assets)) } @@ -41,7 +56,25 @@ impl Visitor for AssetsFinder { for target in &node.targets { if let Expr::Name(name_expr) = target { let Ok(var_name) = name_expr.id.parse::(); - self.var_identifiers.remove(&var_name); + let removed = self.var_identifiers.remove(&var_name); + // if a db = wmill.datatable() or similar was removed, but never used (e.g db.query(...)), + // we still want to register the asset as unknown access type + match removed { + Some((kind, name)) => { + if self + .assets + .iter() + .all(|a| !(a.kind == kind && a.path == name)) + { + self.assets.push(ParseAssetsResult { + kind, + access_type: None, + path: name, + }); + } + } + None => {} + } } } }