@@ -185,6 +185,7 @@ def run_dbt_task(
185185 delete_before_upload : bool = False ,
186186 replace_on_upload : bool = False ,
187187 artifacts : Optional [Iterable [str ]] = None ,
188+ env_vars : Optional [Dict [str , Any ]] = None ,
188189 ** kwargs ,
189190 ) -> DbtTaskResult :
190191 """Run a dbt task with a given configuration and return the results.
@@ -208,6 +209,7 @@ def run_dbt_task(
208209 upload_dbt_project = upload_dbt_project ,
209210 delete_before_upload = delete_before_upload ,
210211 replace_on_upload = replace_on_upload ,
212+ env_vars = env_vars ,
211213 ) as dbt_dir :
212214 config .dbt_task .pre_init_hook (config )
213215 self .ensure_profiles (config .profiles_dir )
@@ -272,6 +274,7 @@ def dbt_directory(
272274 upload_dbt_project : bool = False ,
273275 delete_before_upload : bool = False ,
274276 replace_on_upload : bool = False ,
277+ env_vars : Optional [Dict [str , Any ]] = None ,
275278 ) -> Iterator [str ]:
276279 """Provides a temporary directory to execute dbt.
277280
@@ -284,43 +287,46 @@ def dbt_directory(
284287 Yields:
285288 The temporary directory's name.
286289 """
290+ from airflow_dbt_python .utils .env import update_environment
291+
287292 store_profiles_dir = config .profiles_dir
288293 store_project_dir = config .project_dir
289294
290- with TemporaryDirectory (prefix = "airflow_tmp" ) as tmp_dir :
291- self .log .info ("Initializing temporary directory: %s" , tmp_dir )
292-
293- try :
294- project_dir , profiles_dir = self .prepare_directory (
295- tmp_dir ,
296- store_project_dir ,
297- store_profiles_dir ,
298- )
299- except Exception as e :
300- raise AirflowException (
301- "Failed to prepare temporary directory for dbt execution"
302- ) from e
303-
304- config .project_dir = project_dir
305- config .profiles_dir = profiles_dir
306-
307- if getattr (config , "state" , None ) is not None :
308- state = Path (getattr (config , "state" , "" ))
309- # Since we are running in a temporary directory, we need to make
310- # state paths relative to this temporary directory.
311- if not state .is_absolute ():
312- setattr (config , "state" , str (Path (tmp_dir ) / state ))
313-
314- yield tmp_dir
315-
316- if upload_dbt_project is True :
317- self .log .info ("Uploading dbt project to: %s" , store_project_dir )
318- self .upload_dbt_project (
319- tmp_dir ,
320- store_project_dir ,
321- replace = replace_on_upload ,
322- delete_before = delete_before_upload ,
323- )
295+ with update_environment (env_vars ):
296+ with TemporaryDirectory (prefix = "airflow_tmp" ) as tmp_dir :
297+ self .log .info ("Initializing temporary directory: %s" , tmp_dir )
298+
299+ try :
300+ project_dir , profiles_dir = self .prepare_directory (
301+ tmp_dir ,
302+ store_project_dir ,
303+ store_profiles_dir ,
304+ )
305+ except Exception as e :
306+ raise AirflowException (
307+ "Failed to prepare temporary directory for dbt execution"
308+ ) from e
309+
310+ config .project_dir = project_dir
311+ config .profiles_dir = profiles_dir
312+
313+ if getattr (config , "state" , None ) is not None :
314+ state = Path (getattr (config , "state" , "" ))
315+ # Since we are running in a temporary directory, we need to make
316+ # state paths relative to this temporary directory.
317+ if not state .is_absolute ():
318+ setattr (config , "state" , str (Path (tmp_dir ) / state ))
319+
320+ yield tmp_dir
321+
322+ if upload_dbt_project is True :
323+ self .log .info ("Uploading dbt project to: %s" , store_project_dir )
324+ self .upload_dbt_project (
325+ tmp_dir ,
326+ store_project_dir ,
327+ replace = replace_on_upload ,
328+ delete_before = delete_before_upload ,
329+ )
324330
325331 config .profiles_dir = store_profiles_dir
326332 config .project_dir = store_project_dir
0 commit comments