37
37
JobsTasksDependsOn ,
38
38
JobsTasksLibraries ,
39
39
JobsTasksNotebookTask ,
40
+ JobsTasksRunJobTask ,
41
+ JobsTasksSparkJarTask ,
42
+ JobsTasksSqlTask ,
40
43
Resources ,
41
44
Workspace ,
42
45
Bundle ,
@@ -458,21 +461,93 @@ def _build_native_notebook_task(
458
461
** task .cluster .job_task_field_dict ,
459
462
)
460
463
464
+ def _build_native_spark_jar_task (
465
+ self ,
466
+ task_name : str ,
467
+ task : Task ,
468
+ task_libraries : List [JobsTasksLibraries ],
469
+ task_settings : TaskSettings ,
470
+ depends_on : List [JobsTasksDependsOn ],
471
+ ) -> JobsTasks :
472
+ try :
473
+ spark_jar_task : JobsTasksSparkJarTask = task .task_func ()
474
+ except Exception as e :
475
+ raise ValueError (
476
+ f"Error while building jar task { task_name } . "
477
+ f"Make sure { task_name } returns a SparkJarTask object."
478
+ ) from e
479
+
480
+ return JobsTasks (
481
+ ** task_settings .to_tf_dict (),
482
+ spark_jar_task = spark_jar_task ,
483
+ libraries = task_libraries ,
484
+ depends_on = depends_on ,
485
+ task_key = task_name ,
486
+ # unpack dictionary provided by cluster object, will either be key or
487
+ # existing cluster id
488
+ ** task .cluster .job_task_field_dict ,
489
+ )
490
+
491
+ def _build_native_run_job_task (
492
+ self ,
493
+ task_name : str ,
494
+ task : Task ,
495
+ task_settings : TaskSettings ,
496
+ depends_on : List [JobsTasksDependsOn ],
497
+ ) -> JobsTasks :
498
+ try :
499
+ run_job_task : JobsTasksRunJobTask = task .task_func ()
500
+ except Exception as e :
501
+ raise ValueError (
502
+ f"Error while building run job task { task_name } . "
503
+ f"Make sure { task_name } returns a RunJobTask object."
504
+ ) from e
505
+ return JobsTasks (
506
+ ** task_settings .to_tf_dict (), # type: ignore
507
+ run_job_task = JobsTasksRunJobTask (job_id = run_job_task .job_id ),
508
+ depends_on = depends_on ,
509
+ task_key = task_name ,
510
+ )
511
+
512
+ def _build_native_sql_file_task (
513
+ self ,
514
+ task_name : str ,
515
+ task : Task ,
516
+ task_settings : TaskSettings ,
517
+ depends_on : List [JobsTasksDependsOn ],
518
+ ) -> JobsTasks :
519
+ try :
520
+ sql_task : JobsTasksSqlTask = task .task_func ()
521
+ except Exception as e :
522
+ print (e )
523
+ raise ValueError (
524
+ f"Error while building sql file task { task_name } . "
525
+ f"Make sure { task_name } returns a JobsTasksSqlTask object."
526
+ ) from e
527
+ return JobsTasks (
528
+ ** task_settings .to_tf_dict (), # type: ignore
529
+ sql_task = sql_task ,
530
+ depends_on = depends_on ,
531
+ task_key = task_name ,
532
+ )
533
+
461
534
def _build_dlt_task (
462
535
self ,
463
536
task_name : str ,
464
537
task : Task ,
465
538
workflow : Workflow ,
539
+ task_settings : TaskSettings ,
466
540
depends_on : List [JobsTasksDependsOn ],
467
541
) -> JobsTasks :
468
542
dlt_task : DLTPipeline = task .task_func ()
469
543
# tasks.append(Pipelines(**dlt_task.to_dict())) # TODO: fix this so pipeline also gets created
470
544
pipeline_ref = self .get_pipeline_reference (workflow , dlt_task )
471
545
return JobsTasks (
546
+ ** task_settings .to_tf_dict (), # type: ignore
472
547
pipeline_task = JobsTasksPipelineTask (
473
548
pipeline_id = f"${{resources.pipelines.{ pipeline_ref } .id}}" ,
474
549
# full_refresh=..., TODO: add full refresh
475
- ),
550
+ ), # type: ignore
476
551
depends_on = depends_on ,
477
552
task_key = task_name ,
478
553
)
@@ -484,7 +559,7 @@ def workflow_obj_to_tasks(
484
559
for task_name , task in workflow .tasks .items ():
485
560
# TODO: DLT
486
561
# pipeline_task: Pipeline = self._create_dlt_notebooks(stack, task)
487
- depends_on = [JobsTasksDependsOn (task_key = f ) for f in task .depends_on_names ]
562
+ depends_on = [JobsTasksDependsOn (task_key = f ) for f in task .depends_on_names ] # type: ignore
488
563
libraries = TaskLibrary .unique_libraries (
489
564
task .libraries + (self .project .libraries or [])
490
565
)
@@ -493,13 +568,15 @@ def workflow_obj_to_tasks(
493
568
libraries += get_brickflow_libraries (workflow .enable_plugins )
494
569
495
570
task_libraries = [
496
- JobsTasksLibraries (** library .dict ) for library in libraries
571
+ JobsTasksLibraries (** library .dict ) for library in libraries # type: ignore
497
572
]
498
573
task_settings = workflow .default_task_settings .merge (task .task_settings )
499
574
if task .task_type == TaskType .DLT :
500
575
# native dlt task
501
576
tasks .append (
502
- self ._build_dlt_task (task_name , task , workflow , depends_on )
577
+ self ._build_dlt_task (
578
+ task_name , task , workflow , task_settings , depends_on
579
+ )
503
580
)
504
581
elif task .task_type == TaskType .NOTEBOOK_TASK :
505
582
# native notebook task
@@ -508,13 +585,34 @@ def workflow_obj_to_tasks(
508
585
task_name , task , task_libraries , task_settings , depends_on
509
586
)
510
587
)
588
+ elif task .task_type == TaskType .SPARK_JAR_TASK :
589
+ # native jar task
590
+ tasks .append (
591
+ self ._build_native_spark_jar_task (
592
+ task_name , task , task_libraries , task_settings , depends_on
593
+ )
594
+ )
595
+ elif task .task_type == TaskType .RUN_JOB_TASK :
596
+ # native run job task
597
+ tasks .append (
598
+ self ._build_native_run_job_task (
599
+ task_name , task , task_settings , depends_on
600
+ )
601
+ )
602
+ elif task .task_type == TaskType .SQL :
603
+ # native run job task
604
+ tasks .append (
605
+ self ._build_native_sql_file_task (
606
+ task_name , task , task_settings , depends_on
607
+ )
608
+ )
511
609
else :
512
610
# brickflow entrypoint task
513
611
task_obj = JobsTasks (
514
612
** {
515
613
task .databricks_task_type_str : self .task_to_task_obj (task ),
516
614
** task_settings .to_tf_dict (),
517
- },
615
+ }, # type: ignore
518
616
libraries = task_libraries ,
519
617
depends_on = depends_on ,
520
618
task_key = task_name ,
0 commit comments