11# pyright: reportPrivateImportUsage=false
22import logging
3- from inspect import signature
43
5- from dagster import AssetDep , AssetKey , AssetOut
6- from dagster . _core . definitions . asset_dep import CoercibleToAssetDep
7-
8- from dagster_sqlmesh . controller . base import ContextCls , SQLMeshController
4+ from dagster_sqlmesh . controller . base import (
5+ ContextCls ,
6+ SQLMeshController ,
7+ )
98from dagster_sqlmesh .translator import SQLMeshDagsterTranslator
10- from dagster_sqlmesh .types import SQLMeshModelDep , SQLMeshMultiAssetOptions
9+ from dagster_sqlmesh .types import (
10+ ConvertibleToAssetDep ,
11+ ConvertibleToAssetOut ,
12+ SQLMeshModelDep ,
13+ SQLMeshMultiAssetOptions ,
14+ )
1115from dagster_sqlmesh .utils import get_asset_key_str
1216
1317logger = logging .getLogger (__name__ )
@@ -17,47 +21,65 @@ class DagsterSQLMeshController(SQLMeshController[ContextCls]):
1721 """An extension of the sqlmesh controller specifically for dagster use"""
1822
1923 def to_asset_outs (
20- self , environment : str , translator : SQLMeshDagsterTranslator ,
24+ self ,
25+ environment : str ,
26+ translator : SQLMeshDagsterTranslator ,
2127 ) -> SQLMeshMultiAssetOptions :
28+ """Loads all the asset outs of the current sqlmesh environment. If a
29+ cache is provided, it will be tried first to load the asset outs."""
30+
31+ internal_asset_deps_map : dict [str , set [str ]] = {}
32+ deps_map : dict [str , ConvertibleToAssetDep ] = {}
33+ asset_outs : dict [str , ConvertibleToAssetOut ] = {}
34+
2235 with self .instance (environment , "to_asset_outs" ) as instance :
2336 context = instance .context
24- output = SQLMeshMultiAssetOptions ()
25- depsMap : dict [str , CoercibleToAssetDep ] = {}
2637
2738 for model , deps in instance .non_external_models_dag ():
2839 asset_key = translator .get_asset_key (context = context , fqn = model .fqn )
40+ asset_key_str = asset_key .to_user_string ()
2941 model_deps = [
3042 SQLMeshModelDep (fqn = dep , model = context .get_model (dep ))
3143 for dep in deps
3244 ]
33- internal_asset_deps : set [AssetKey ] = set ()
45+ internal_asset_deps : set [str ] = set ()
3446 asset_tags = translator .get_tags (context , model )
3547
3648 for dep in model_deps :
3749 if dep .model :
38- internal_asset_deps .add (
39- translator .get_asset_key (context , dep .model .fqn )
40- )
50+ dep_asset_key_str = translator .get_asset_key (
51+ context , dep .model .fqn
52+ ).to_user_string ()
53+
54+ internal_asset_deps .add (dep_asset_key_str )
4155 else :
4256 table = get_asset_key_str (dep .fqn )
43- key = translator .get_asset_key (context , dep .fqn )
57+ key = translator .get_asset_key (
58+ context , dep .fqn
59+ ).to_user_string ()
4460 internal_asset_deps .add (key )
61+
4562 # create an external dep
46- depsMap [table ] = AssetDep (key )
63+ deps_map [table ] = translator .create_asset_dep (key = key )
64+
4765 model_key = get_asset_key_str (model .fqn )
48- # If current Dagster supports "kinds", add labels for Dagster UI
49- if "kinds" in signature (AssetOut ).parameters :
50- output .outs [model_key ] = AssetOut (
51- key = asset_key , tags = asset_tags , is_required = False ,
52- group_name = translator .get_group_name (context , model ),
53- kinds = {"sqlmesh" , translator ._get_context_dialect (context ).lower ()}
54- )
55- else :
56- output .outs [model_key ] = AssetOut (
57- key = asset_key , tags = asset_tags , is_required = False ,
58- group_name = translator .get_group_name (context , model )
59- )
60- output .internal_asset_deps [model_key ] = internal_asset_deps
61-
62- output .deps = list (depsMap .values ())
63- return output
66+ asset_outs [model_key ] = translator .create_asset_out (
67+ model_key = model_key ,
68+ asset_key = asset_key_str ,
69+ tags = asset_tags ,
70+ is_required = False ,
71+ group_name = translator .get_group_name (context , model ),
72+ kinds = {
73+ "sqlmesh" ,
74+ translator .get_context_dialect (context ).lower (),
75+ },
76+ )
77+ internal_asset_deps_map [model_key ] = internal_asset_deps
78+
79+ deps = list (deps_map .values ())
80+
81+ return SQLMeshMultiAssetOptions (
82+ outs = asset_outs ,
83+ deps = deps ,
84+ internal_asset_deps = internal_asset_deps_map ,
85+ )
0 commit comments