@@ -29,13 +29,16 @@ def dataset() -> None:
29
29
name = "upsert" ,
30
30
)
31
31
@click .option ("-f" , "--file" , required = True , type = click .Path (exists = True ))
32
+ @click .option (
33
+ "-n" , "--dry-run" , type = bool , is_flag = True , default = False , help = "Perform a dry run"
34
+ )
32
35
@upgrade .check_upgrade
33
36
@telemetry .with_telemetry ()
34
- def upsert (file : Path ) -> None :
37
+ def upsert (file : Path , dry_run : bool ) -> None :
35
38
"""Upsert attributes to a Dataset in DataHub."""
36
39
# Call the sync command with to_datahub=True to perform the upsert operation
37
40
ctx = click .get_current_context ()
38
- ctx .invoke (sync , file = str (file ), to_datahub = True )
41
+ ctx .invoke (sync , file = str (file ), dry_run = dry_run , to_datahub = True )
39
42
40
43
41
44
@dataset .command (
@@ -167,11 +170,16 @@ def file(lintcheck: bool, lintfix: bool, file: str) -> None:
167
170
)
168
171
@click .option ("-f" , "--file" , required = True , type = click .Path (exists = True ))
169
172
@click .option ("--to-datahub/--from-datahub" , required = True , is_flag = True )
173
+ @click .option (
174
+ "-n" , "--dry-run" , type = bool , is_flag = True , default = False , help = "Perform a dry run"
175
+ )
170
176
@upgrade .check_upgrade
171
177
@telemetry .with_telemetry ()
172
- def sync (file : str , to_datahub : bool ) -> None :
178
+ def sync (file : str , to_datahub : bool , dry_run : bool ) -> None :
173
179
"""Sync a Dataset file to/from DataHub"""
174
180
181
+ dry_run_prefix = "[dry-run]: " if dry_run else "" # prefix to use in messages
182
+
175
183
failures : List [str ] = []
176
184
with get_default_graph () as graph :
177
185
datasets = Dataset .from_yaml (file )
@@ -189,7 +197,7 @@ def sync(file: str, to_datahub: bool) -> None:
189
197
click .secho (
190
198
"\n \t - " .join (
191
199
[
192
- f"Skipping Dataset { dataset .urn } due to missing entity references: "
200
+ f"{ dry_run_prefix } Skipping Dataset { dataset .urn } due to missing entity references: "
193
201
]
194
202
+ missing_entity_references
195
203
),
@@ -199,13 +207,18 @@ def sync(file: str, to_datahub: bool) -> None:
199
207
continue
200
208
try :
201
209
for mcp in dataset .generate_mcp ():
202
- graph .emit (mcp )
203
- click .secho (f"Update succeeded for urn { dataset .urn } ." , fg = "green" )
210
+ if not dry_run :
211
+ graph .emit (mcp )
212
+ click .secho (
213
+ f"{ dry_run_prefix } Update succeeded for urn { dataset .urn } ." ,
214
+ fg = "green" ,
215
+ )
204
216
except Exception as e :
205
217
click .secho (
206
- f"Update failed for id { id } . due to { e } " ,
218
+ f"{ dry_run_prefix } Update failed for id { id } . due to { e } " ,
207
219
fg = "red" ,
208
220
)
221
+ failures .append (dataset .urn )
209
222
else :
210
223
# Sync from DataHub
211
224
if graph .exists (dataset .urn ):
@@ -215,13 +228,16 @@ def sync(file: str, to_datahub: bool) -> None:
215
228
existing_dataset : Dataset = Dataset .from_datahub (
216
229
graph = graph , urn = dataset .urn , config = dataset_get_config
217
230
)
218
- existing_dataset .to_yaml (Path (file ))
231
+ if not dry_run :
232
+ existing_dataset .to_yaml (Path (file ))
233
+ else :
234
+ click .secho (f"{ dry_run_prefix } Will update file { file } " )
219
235
else :
220
- click .secho (f"Dataset { dataset .urn } does not exist" )
236
+ click .secho (f"{ dry_run_prefix } Dataset { dataset .urn } does not exist" )
221
237
failures .append (dataset .urn )
222
238
if failures :
223
239
click .secho (
224
- f"\n Failed to sync the following Datasets: { ', ' .join (failures )} " ,
240
+ f"\n { dry_run_prefix } Failed to sync the following Datasets: { ', ' .join (failures )} " ,
225
241
fg = "red" ,
226
242
)
227
243
raise click .Abort ()
0 commit comments