@@ -130,7 +130,7 @@ class BaseModelConfig(GeneralConfig):
130130 unique_id : str = ""
131131 name : str = ""
132132 package_name : str = ""
133- fqn : t .List [str ] = []
133+ fqn_ : t .List [str ] = Field ( default_factory = list , alias = "fqn" )
134134 schema_ : str = Field ("" , alias = "schema" )
135135 database : t .Optional [str ] = None
136136 alias : t .Optional [str ] = None
@@ -281,15 +281,17 @@ def remove_tests_with_invalid_refs(self, context: DbtContext) -> None:
281281 and all (source in context .sources for source in test .dependencies .sources )
282282 ]
283283
284+ @property
285+ def fqn (self ) -> str :
286+ return "." .join (self .fqn_ )
287+
284288 @property
285289 def sqlmesh_config_fields (self ) -> t .Set [str ]:
286290 return {"description" , "owner" , "stamp" , "storage_format" }
287291
288292 @property
289293 def node_info (self ) -> DbtNodeInfo :
290- return DbtNodeInfo (
291- unique_id = self .unique_id , name = self .name , fqn = "." .join (self .fqn ), alias = self .alias
292- )
294+ return DbtNodeInfo (unique_id = self .unique_id , name = self .name , fqn = self .fqn , alias = self .alias )
293295
294296 def sqlmesh_model_kwargs (
295297 self ,
@@ -327,7 +329,14 @@ def sqlmesh_model_kwargs(
327329 "column_descriptions" : column_descriptions_to_sqlmesh (self .columns ) or None ,
328330 "depends_on" : {
329331 model .canonical_name (context ) for model in model_context .refs .values ()
330- }.union ({source .canonical_name (context ) for source in model_context .sources .values ()}),
332+ }.union (
333+ {
334+ source .canonical_name (context )
335+ for source in model_context .sources .values ()
336+ if source .fqn not in context .models_by_fqn
337+ # Allow dbt projects to reference a model as a source without causing a cycle
338+ },
339+ ),
331340 "jinja_macros" : jinja_macros ,
332341 "path" : self .path ,
333342 "pre_statements" : [d .jinja_statement (hook .sql ) for hook in self .pre_hook ],
0 commit comments