@@ -122,48 +122,30 @@ def dispatch(
122122 ) -> t .Callable :
123123 """Returns a dialect-specific version of a macro with the given name."""
124124 target_type = self .jinja_globals ["target" ]["type" ]
125- macro_suffix = f"__{ macro_name } "
126-
127- def _relevance (package_name_pair : t .Tuple [t .Optional [str ], str ]) -> t .Tuple [int , int ]:
128- """Lower scores more relevant."""
129- macro_package , name = package_name_pair
130-
131- package_score = 0 if macro_package == macro_namespace else 1
132- name_score = 1
133-
134- if name .startswith ("default" ):
135- name_score = 2
136- elif name .startswith (target_type ):
137- name_score = 0
138-
139- return name_score , package_score
140125
141126 jinja_env = self .jinja_macros .build_environment (** self .jinja_globals ).globals
142127
143128 packages_to_check : t .List [t .Optional [str ]] = [None ]
144129 if macro_namespace is not None :
145- if macro_namespace in jinja_env :
130+ if dispatch := self .jinja_globals .get ("dispatch" ):
131+ for entry in dispatch .get (self .jinja_macros .root_package_name , []):
132+ if entry .get ("macro_namespace" ) == macro_namespace :
133+ packages_to_check = entry .get ("search_order" )
134+ break
135+ if packages_to_check == [None ] and macro_namespace in jinja_env :
146136 packages_to_check = [self .jinja_macros .root_package_name , macro_namespace ]
147137
148138 # Add dbt packages as fallback
149139 packages_to_check .extend (k for k in jinja_env if k .startswith ("dbt" ))
150140
151- candidates = {}
152141 for macro_package in packages_to_check :
153142 macros = jinja_env .get (macro_package , {}) if macro_package else jinja_env
154143 if not isinstance (macros , dict ):
155144 continue
156- candidates .update (
157- {
158- (macro_package , macro_name ): macro_callable
159- for macro_name , macro_callable in macros .items ()
160- if macro_name .endswith (macro_suffix )
161- }
162- )
163145
164- if candidates :
165- sorted_candidates = sorted ( candidates , key = _relevance )
166- return candidates [ sorted_candidates [ 0 ]]
146+ for prefix in ( f" { target_type } __" , "default__" , "" ) :
147+ if macro := macros . get ( f" { prefix } { macro_name } " ):
148+ return macro
167149
168150 raise ConfigError (f"Macro '{ macro_name } ', package '{ macro_namespace } ' was not found." )
169151
0 commit comments