def apply(ctx, conf_dir, auto_approve, dataset, exclude_dataset, mode, backup_dataset): # TODO Impl auto-approve option add_counts, change_counts, destroy_counts = [], [], [] with ThreadPoolExecutor(max_workers=ctx.obj['parallelism']) as e: dataset_action = DatasetAction(e, project=ctx.obj['project'], credential_file=ctx.obj['credential_file'], no_color=not ctx.obj['color'], debug=ctx.obj['debug']) source_datasets = [d for d in as_completed(dataset_action.list_datasets( dataset, exclude_dataset)) if d] target_datasets = list_local_datasets(conf_dir, dataset, exclude_dataset) echo('------------------------------------------------------------------------') echo() fs = [] add_count, add_fs = dataset_action.add(source_datasets, target_datasets) add_counts.append(add_count) fs.extend(add_fs) change_count, change_fs = dataset_action.change(source_datasets, target_datasets) change_counts.append(change_count) fs.extend(change_fs) destroy_count, destroy_fs = dataset_action.destroy(source_datasets, target_datasets) destroy_counts.append(destroy_count) fs.extend(destroy_fs) as_completed(fs) fs = [] for d in target_datasets: target_tables = list_local_tables(conf_dir, d.dataset_id) if target_tables is None: continue table_action = TableAction(e, d.dataset_id, migration_mode=mode, backup_dataset_id=backup_dataset, project=ctx.obj['project'], credential_file=ctx.obj['credential_file'], no_color=not ctx.obj['color'], debug=ctx.obj['debug']) source_tables = [t for t in as_completed(table_action.list_tables()) if t] if target_tables or source_tables: echo('------------------------------------------------------------------------') echo() add_count, add_fs = table_action.add(source_tables, target_tables) add_counts.append(add_count) fs.extend(add_fs) change_count, change_fs = table_action.change(source_tables, target_tables) change_counts.append(change_count) fs.extend(change_fs) destroy_count, destroy_fs = table_action.destroy(source_tables, target_tables) destroy_counts.append(destroy_count) fs.extend(destroy_fs) as_completed(fs) if not any(chain.from_iterable([add_counts, change_counts, destroy_counts])): echo(msg.MESSAGE_SUMMARY_NO_CHANGE) echo() else: echo(msg.MESSAGE_APPLY_SUMMARY.format( sum(add_counts), sum(change_counts), sum(destroy_counts))) echo()
def apply_destroy(ctx, conf_dir, auto_approve, dataset, exclude_dataset): # TODO Impl auto-approve option destroy_counts = [] with ThreadPoolExecutor(max_workers=ctx.obj['parallelism']) as e: dataset_action = DatasetAction(e, project=ctx.obj['project'], credential_file=ctx.obj['credential_file'], no_color=not ctx.obj['color'], debug=ctx.obj['debug']) source_datasets = [d for d in as_completed(dataset_action.list_datasets( dataset, exclude_dataset)) if d] target_datasets = list_local_datasets(conf_dir, dataset, exclude_dataset) echo('------------------------------------------------------------------------') echo() fs = [] for d in target_datasets: table_action = TableAction(e, d.dataset_id, project=ctx.obj['project'], credential_file=ctx.obj['credential_file'], no_color=not ctx.obj['color'], debug=ctx.obj['debug']) source_tables = [t for t in as_completed(table_action.list_tables()) if t] if source_tables: echo('------------------------------------------------------------------------') echo() destroy_count, destroy_fs = table_action.destroy(source_tables, []) destroy_counts.append(destroy_count) fs.extend(destroy_fs) as_completed(fs) fs = [] destroy_count, destroy_fs = dataset_action.intersection_destroy( source_datasets, target_datasets) destroy_counts.append(destroy_count) fs.extend(destroy_fs) as_completed(fs) if not any(destroy_counts): echo(msg.MESSAGE_SUMMARY_NO_CHANGE) echo() else: echo(msg.MESSAGE_APPLY_DESTROY_SUMMARY.format(sum(destroy_counts))) echo()