From 0442a20c84fc4b42f365d36be69f460b8ccb6b9d Mon Sep 17 00:00:00 2001 From: Lachlan Deakin Date: Sat, 27 Apr 2024 08:06:06 +1000 Subject: [PATCH] Add `--hide-progress` to `zarrs_ncvar2zarr` --- CHANGELOG.md | 3 +++ src/bin/zarrs_ncvar2zarr.rs | 24 +++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fef0b99..684210f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + - Add `--hide-progress` to `zarrs_ncvar2zarr` + ### Changed - Replace `--no_overwrite` with `--exists` in `zarrs_filter` and `zarrs_ome` - Both support `erase` and `exit` options diff --git a/src/bin/zarrs_ncvar2zarr.rs b/src/bin/zarrs_ncvar2zarr.rs index 70b9875..f8c461c 100644 --- a/src/bin/zarrs_ncvar2zarr.rs +++ b/src/bin/zarrs_ncvar2zarr.rs @@ -53,6 +53,10 @@ struct Cli { #[arg(long, default_value_t = false)] memory_test: bool, + /// Set to hide the progress bar. + #[arg(long)] + hide_progress: bool, + /// The path to a netCDF file or a directory of netcdf files. path: PathBuf, @@ -63,6 +67,14 @@ struct Cli { out: PathBuf, } +fn create_progress_bar(len: Option) -> ProgressBar { + if let Some(len) = len { + ProgressBar::new(len) + } else { + ProgressBar::hidden() + } +} + #[allow(clippy::too_many_arguments)] fn ncfiles_to_array( nc_paths: &[PathBuf], @@ -72,6 +84,7 @@ fn ncfiles_to_array( array: &Array, num_concurrent_blocks: Option, validate: bool, + show_progress: bool, ) -> usize { let style_all = ProgressStyle::with_template("[{bar}] ({pos}/{len} blocks, {elapsed_precise}, ETA {eta})") @@ -157,11 +170,15 @@ fn ncfiles_to_array( .par_chunks((nc_paths.len() + concurrent_blocks - 1) / concurrent_blocks); let m = MultiProgress::new(); - let pb_all = m.add(ProgressBar::new(enumerated_paths.len() as u64)); + let pb_all = m.add(create_progress_bar( + show_progress.then_some(enumerated_paths.len() as u64), + )); pb_all.set_style(style_all.clone()); pb_all.set_position(0); chunks.for_each(|blocks| { - let pb = m.add(ProgressBar::new(blocks.len() as u64)); + let pb = m.add(create_progress_bar( + show_progress.then_some(blocks.len() as u64), + )); pb.set_style(style.clone()); pb.set_position(0); for (idx, nc_path) in blocks { @@ -173,7 +190,7 @@ fn ncfiles_to_array( }); pb_all.finish(); } else { - let pb = ProgressBar::new(nc_paths.len() as u64); + let pb = create_progress_bar(show_progress.then_some(nc_paths.len() as u64)); pb.set_style(style_all); pb.set_position(0); for (idx, nc_path) in nc_paths.iter().enumerate() { @@ -323,6 +340,7 @@ fn main() { &array, cli.concurrent_blocks, cli.validate, + !cli.hide_progress, ); let duration_s = start.elapsed().as_secs_f32();