|
9 | 9 | from prefect.tasks.prefect import create_flow_run, wait_for_flow_run
|
10 | 10 | from prefect import Parameter, case, task
|
11 | 11 | from prefect.tasks.control_flow import merge
|
12 |
| - |
| 12 | +from prefect.utilities.edges import unmapped |
13 | 13 |
|
14 | 14 | # EMD Imports #
|
15 | 15 |
|
|
33 | 33 | # CAPTURA DOS TICKETS #
|
34 | 34 |
|
35 | 35 | sppo_recurso_captura = deepcopy(default_capture_flow)
|
36 |
| -sppo_recurso_captura.name = ( |
37 |
| - "SMTR: Subsídio Recursos Viagens Individuais - Captura (subflow)" |
38 |
| -) |
| 36 | +sppo_recurso_captura.name = "SMTR: Subsídio Recursos - Captura (subflow)" |
39 | 37 | sppo_recurso_captura.storage = GCS(emd_constants.GCS_FLOWS_BUCKET.value)
|
40 | 38 | sppo_recurso_captura.run_config = KubernetesRun(
|
41 | 39 | image=emd_constants.DOCKER_IMAGE.value,
|
|
47 | 45 | )
|
48 | 46 | # RECAPTURA DOS TICKETS #
|
49 | 47 | sppo_recurso_recaptura = deepcopy(default_capture_flow)
|
50 |
| -sppo_recurso_recaptura.name = ( |
51 |
| - "SMTR: Subsídio Recursos Viagens Individuais - Recaptura (subflow)" |
52 |
| -) |
| 48 | +sppo_recurso_recaptura.name = "SMTR: Subsídio Recursos - Recaptura (subflow)" |
53 | 49 | sppo_recurso_recaptura.storage = GCS(emd_constants.GCS_FLOWS_BUCKET.value)
|
54 | 50 | sppo_recurso_recaptura.run_config = KubernetesRun(
|
55 | 51 | image=emd_constants.DOCKER_IMAGE.value,
|
|
64 | 60 | # MATERIALIZAÇÃO DOS TICKETS #
|
65 | 61 |
|
66 | 62 | sppo_recurso_materializacao = deepcopy(default_materialization_flow)
|
67 |
| -sppo_recurso_materializacao.name = ( |
68 |
| - "SMTR: Subsídio Recursos Viagens Individuais - Materialização (subflow)" |
69 |
| -) |
| 63 | +sppo_recurso_materializacao.name = "SMTR: Subsídio Recursos - Materialização (subflow)" |
70 | 64 | sppo_recurso_materializacao.storage = GCS(emd_constants.GCS_FLOWS_BUCKET.value)
|
71 | 65 | sppo_recurso_materializacao.run_config = KubernetesRun(
|
72 | 66 | image=emd_constants.DOCKER_IMAGE.value,
|
|
79 | 73 | )
|
80 | 74 |
|
81 | 75 | with Flow(
|
82 |
| - "SMTR: Subsídio Recursos Viagens Individuais - Captura/Tratamento", |
| 76 | + "SMTR: Subsídio Recursos - Captura/Tratamento", |
83 | 77 | code_owners=["carolinagomes", "rafaelpinheiro"],
|
84 | 78 | ) as subsidio_sppo_recurso:
|
85 | 79 | capture = Parameter("capture", default=True)
|
86 | 80 | materialize = Parameter("materialize", default=True)
|
87 | 81 | recapture = Parameter("recapture", default=True)
|
88 | 82 | data_recurso = Parameter("data_recurso", default=None)
|
| 83 | + table_id = Parameter("table_id", default=None) |
89 | 84 | interval_minutes = Parameter("interval_minutes", default=1440)
|
90 | 85 | timestamp = get_current_timestamp(data_recurso, return_str=True)
|
| 86 | + exclude = Parameter("exclude", default=None) |
91 | 87 |
|
92 | 88 | rename_flow_run = rename_current_flow_run_now_time(
|
93 | 89 | prefix=subsidio_sppo_recurso.name + " ",
|
94 | 90 | now_time=timestamp,
|
95 | 91 | )
|
96 |
| - recurso_capture_parameters = { |
97 |
| - "data_recurso": timestamp, |
98 |
| - **constants.SUBSIDIO_SPPO_RECURSO_CAPTURE_PARAMS.value["extract_params"], |
99 |
| - } |
100 | 92 |
|
101 | 93 | LABELS = get_current_flow_labels()
|
102 | 94 |
|
| 95 | + recursos_capture_parameters = [ |
| 96 | + { |
| 97 | + "table_id": v, |
| 98 | + "extract_params": { |
| 99 | + "data_recurso": timestamp, |
| 100 | + **constants.SUBSIDIO_SPPO_RECURSO_CAPTURE_PARAMS.value[ |
| 101 | + "extract_params" |
| 102 | + ], |
| 103 | + }, |
| 104 | + } |
| 105 | + for v in constants.SUBSIDIO_SPPO_RECURSO_TABLE_CAPTURE_PARAMS.value |
| 106 | + ] |
| 107 | + |
| 108 | + table_params = task( |
| 109 | + lambda tables, exclude: [t for t in tables if t["table_id"] not in exclude] |
| 110 | + if exclude is not None |
| 111 | + else tables, |
| 112 | + checkpoint=False, |
| 113 | + name="get_tables_to_run", |
| 114 | + )(tables=constants.SUBSIDIO_SPPO_RECURSOS_TABLE_IDS.value, exclude=exclude) |
| 115 | + |
103 | 116 | # Captura dos dados #
|
104 | 117 | with case(capture, True):
|
105 |
| - run_captura = create_flow_run( |
106 |
| - flow_name=sppo_recurso_captura.name, |
107 |
| - project_name=emd_constants.PREFECT_DEFAULT_PROJECT.value, |
108 |
| - parameters={"extract_params": recurso_capture_parameters}, |
109 |
| - labels=LABELS, |
| 118 | + run_captura = create_flow_run.map( |
| 119 | + flow_name=unmapped(sppo_recurso_captura.name), |
| 120 | + project_name=unmapped(emd_constants.PREFECT_DEFAULT_PROJECT.value), |
| 121 | + parameters=recursos_capture_parameters, |
| 122 | + labels=unmapped(LABELS), |
110 | 123 | )
|
111 | 124 |
|
112 |
| - wait_captura_true = wait_for_flow_run( |
| 125 | + wait_captura_true = wait_for_flow_run.map( |
113 | 126 | run_captura,
|
114 |
| - stream_states=True, |
115 |
| - stream_logs=True, |
116 |
| - raise_final_state=True, |
| 127 | + stream_states=unmapped(True), |
| 128 | + stream_logs=unmapped(True), |
| 129 | + raise_final_state=unmapped(True), |
117 | 130 | )
|
118 | 131 |
|
119 | 132 | with case(capture, False):
|
120 | 133 | wait_captura_false = task(
|
121 |
| - lambda: [None], checkpoint=False, name="assign_none_to_previous_runs" |
| 134 | + lambda: [None], |
| 135 | + checkpoint=False, |
| 136 | + name="assign_none_to_previous_runs", |
122 | 137 | )()
|
123 | 138 |
|
124 | 139 | wait_captura = merge(wait_captura_true, wait_captura_false)
|
125 | 140 |
|
126 | 141 | # Recaptura dos dados #
|
127 | 142 |
|
128 | 143 | with case(recapture, True):
|
129 |
| - run_recaptura = create_flow_run( |
130 |
| - flow_name=sppo_recurso_recaptura.name, |
131 |
| - project_name=emd_constants.PREFECT_DEFAULT_PROJECT.value, |
132 |
| - labels=LABELS, |
| 144 | + run_recaptura = create_flow_run.map( |
| 145 | + flow_name=unmapped(sppo_recurso_recaptura.name), |
| 146 | + project_name=unmapped(emd_constants.PREFECT_DEFAULT_PROJECT.value), |
| 147 | + parameters=recursos_capture_parameters, |
| 148 | + labels=unmapped(LABELS), |
133 | 149 | )
|
134 | 150 |
|
135 |
| - run_recaptura.set_upstream(wait_captura) |
136 |
| - |
137 |
| - wait_recaptura_true = wait_for_flow_run( |
| 151 | + wait_recaptura_true = wait_for_flow_run.map( |
138 | 152 | run_recaptura,
|
139 |
| - stream_states=True, |
140 |
| - stream_logs=True, |
141 |
| - raise_final_state=True, |
| 153 | + stream_states=unmapped(True), |
| 154 | + stream_logs=unmapped(True), |
| 155 | + raise_final_state=unmapped(True), |
142 | 156 | )
|
143 | 157 |
|
144 | 158 | with case(recapture, False):
|
|
151 | 165 | # Materialização dos dados #
|
152 | 166 |
|
153 | 167 | with case(materialize, True):
|
154 |
| - run_materializacao = create_flow_run( |
155 |
| - flow_name=sppo_recurso_materializacao.name, |
156 |
| - project_name=emd_constants.PREFECT_DEFAULT_PROJECT.value, |
157 |
| - labels=LABELS, |
| 168 | + run_materializacao = create_flow_run.map( |
| 169 | + flow_name=unmapped(sppo_recurso_materializacao.name), |
| 170 | + project_name=unmapped(emd_constants.PREFECT_DEFAULT_PROJECT.value), |
| 171 | + labels=unmapped(LABELS), |
| 172 | + parameters=table_params, |
158 | 173 | upstream_tasks=[wait_captura],
|
159 | 174 | )
|
160 | 175 |
|
161 |
| - run_materializacao.set_upstream(wait_recaptura) |
162 |
| - |
163 |
| - wait_materializacao_true = wait_for_flow_run( |
| 176 | + wait_materializacao_true = wait_for_flow_run.map( |
164 | 177 | run_materializacao,
|
165 |
| - stream_states=True, |
166 |
| - stream_logs=True, |
167 |
| - raise_final_state=True, |
| 178 | + stream_states=unmapped(True), |
| 179 | + stream_logs=unmapped(True), |
| 180 | + raise_final_state=unmapped(True), |
168 | 181 | )
|
169 | 182 |
|
170 | 183 | with case(materialize, False):
|
|
0 commit comments