Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add progress bar #693

Merged
merged 4 commits into from
Aug 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

* #693 Add progress bar


## [0.19.0] - 2023-08-23

Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/cat.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ $ pica cat ger.dat eng.dat -o ger_eng.dat
* `--tee <filename>` — Abzweigen der Ausgabe in eine zusätzliche Datei.
* `-g`, `--gzip` — Komprimieren der Ausgabe im
[gzip](https://de.wikipedia.org/wiki/Gzip)-Format.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben. Endet der Dateiname mit dem Suffix `.gz`, wird
Expand Down
7 changes: 4 additions & 3 deletions docs/book/src/referenz/kommandos/convert.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,12 @@ $ pica convert --from plus --to xml DUMP.dat.gz -o dump.xml

* `-s`, `--skip-invalid` — überspringt jene Zeilen aus der Eingabe, die nicht
dekodiert werden konnten.

* `-f`, `--from` — Auswahl des Datenformats der Eingabe.

* `-t`, `--to` — Auswahl des Datenformats der Ausgabe.

* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben.
Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/count.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ subfields: 3973
* `--csv` — die Ausgabe erfolgt im CSV-Format.
* `--tsv` — die Ausgabe erfolgt im TSV-Format.
* `--no-header` — es wird keine Kopfzeile in die Ausgabe geschrieben.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben.
Expand Down
5 changes: 4 additions & 1 deletion docs/book/src/referenz/kommandos/filter.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,16 @@ $ pica print goethe.dat
Ausgabe an die Datei angehangen. Ist das Flag nicht gesetzt, wird eine
bestehende Datei überschrieben.
* `--tee <filename>` — Abzweigen der Ausgabe in eine zusätzliche Datei.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben. Endet der Dateiname mit dem Suffix `.gz`, wird
die Ausgabe automatisch im gzip-Format komprimiert.



## Konfiguration

<!-- TODO: Link zum allgemeinen Kapitel über die Konfigurationsdatei -->
Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/frequency.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ Ts1,1
* `-t`, `--tsv` — Ausgabe erfolgt im TSV-Format.
* `--translit` `<nf>` — Ausgabe wird in die angegebene Normalform
transliteriert. Mögliche Werte: `nfd`, `nfkd`, `nfc` und `nfkc`.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben.
Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/hash.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ idn,sha256
* `-H`, `--header` `<header>` — Kopfzeile, die den Ergebnissen
vorangestellt wird.
* `-t`, `--tsv` — Ausgabe erfolgt im TSV-Format.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll.

Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/invalid.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ $ pica invalid DUMP.dat.gz -o invalid.dat

## Optionen

* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben.
2 changes: 2 additions & 0 deletions docs/book/src/referenz/kommandos/partition.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ out
* `-g`, `--gzip` — Komprimieren der Ausgabe im [Gzip]-Format.
* `-t`, `--template` — Template für die Dateinamen. Der Platzhalter `{}`
wird durch den Namen der Partition ersetzt.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt.
* `-o`, `--outdir` — Angabe, in welches Verzeichnis die Partitionen
geschrieben werden sollen. Standardmäßig wird das aktuelle Verzeichnis
verwendet.
Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/print.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ $ pica print -s -l1 DUMP.dat.gz
unterstützt oder die Umgebungsvariable `NO_COLOR` definiert ist.
Schließlich wird mit der Einstellung `never` die Farbausgabe
deaktiviert.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben.
Expand Down
4 changes: 4 additions & 0 deletions docs/book/src/referenz/kommandos/slice.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ $ pica count --records slice.dat
* `--append` — Wenn die Ausgabedatei bereits existiert, wird die
Ausgabe an die Datei angehangen. Ist das Flag nicht gesetzt, wird eine
bestehende Datei standardmäßig überschrieben.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das
Aktivieren der Option erfordert das Schreiben der Datensätze in eine
Datei mittels `-o` bzw. `--output`.
* `-o`, `--output` — Angabe, in welche Datei die Ausgabe geschrieben
werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
`stdout` geschrieben.
Expand Down
2 changes: 2 additions & 0 deletions docs/book/src/referenz/kommandos/split.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ $ tree
* `-g`, `--gzip` — Komprimieren der Ausgabe im [Gzip]-Format.
* `--template` — Template für die Dateinamen. Der Platzhalter `{}` wird
durch eine fortlaufende Nummer ersetzt.
* `-p`, `--progress` — Anzeige des Fortschritts, der die Anzahl der
eingelesenen gültigen sowie invaliden Datensätze anzeigt.
* `-o`, `--outdir` — Angabe, in welches Verzeichnis die Ausgabe
geschrieben werden soll. Standardmäßig wird das aktuelle Verzeichnis
verwendet.
Expand Down
1 change: 1 addition & 0 deletions pica-toolkit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ clap_complete = { workspace = true }
csv = { workspace = true }
directories = { version = "5.0" }
flate2 = { workspace = true }
indicatif = { version = "0.17" }
nom = { workspace = true }
pica-matcher = { workspace = true }
pica-path = { workspace = true }
Expand Down
11 changes: 11 additions & 0 deletions pica-toolkit/src/commands/cat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use pica_record::ByteRecord;
use serde::{Deserialize, Serialize};

use crate::config::Config;
use crate::progress::Progress;
use crate::util::CliResult;
use crate::{gzip_flag, skip_invalid_flag};

Expand Down Expand Up @@ -84,6 +85,10 @@ pub(crate) struct Cat {
#[arg(short, long, requires = "output")]
gzip: bool,

/// Show progress bar (requires `-o`/`--output`).
#[arg(short, long, requires = "output")]
progress: bool,

/// Write output to <OUTPUT> instead of stdout
#[arg(short, long)]
output: Option<OsString>,
Expand Down Expand Up @@ -145,6 +150,8 @@ impl Cat {
None => None,
};

let mut progress = Progress::new(self.progress);

for filename in self.filenames {
let mut reader =
ReaderBuilder::new().from_path(filename)?;
Expand All @@ -153,12 +160,15 @@ impl Cat {
match result {
Err(e) => {
if e.is_invalid_record() && skip_invalid {
progress.invalid();
continue;
} else {
return Err(e.into());
}
}
Ok(record) => {
progress.record();

if self.unique {
let k = key(&record);

Expand All @@ -178,6 +188,7 @@ impl Cat {
}
}

progress.finish();
writer.finish()?;
if let Some(ref mut writer) = tee_writer {
writer.finish()?;
Expand Down
11 changes: 11 additions & 0 deletions pica-toolkit/src/commands/convert/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use self::import::ImportWriter;
use self::json::JsonWriter;
use self::plain::PlainWriter;
use self::xml::XmlWriter;
use crate::progress::Progress;
use crate::util::CliError;
use crate::{skip_invalid_flag, CliResult, Config};

Expand Down Expand Up @@ -66,6 +67,10 @@ pub(crate) struct Convert {
)]
to: Format,

/// Show progress bar (requires `-o`/`--output`).
#[arg(short, long, requires = "output")]
progress: bool,

/// Write output to <filename> instead of stdout
#[arg(short, long, value_name = "filename")]
output: Option<OsString>,
Expand Down Expand Up @@ -101,6 +106,8 @@ impl Convert {
Format::Xml => Box::new(XmlWriter::new(self.output)?),
};

let mut progress = Progress::new(self.progress);

for filename in self.filenames {
let mut reader =
ReaderBuilder::new().from_path(filename)?;
Expand All @@ -109,19 +116,23 @@ impl Convert {
match result {
Err(e) => {
if e.is_invalid_record() && skip_invalid {
progress.invalid();
continue;
} else {
return Err(e.into());
}
}
Ok(record) => {
progress.record();
writer.write_byte_record(&record)?;
}
}
}
}

progress.finish();
writer.finish()?;

Ok(())
}
}
11 changes: 11 additions & 0 deletions pica-toolkit/src/commands/count.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use pica_record::io::{ReaderBuilder, RecordsIterator};
use serde::{Deserialize, Serialize};

use crate::config::Config;
use crate::progress::Progress;
use crate::skip_invalid_flag;
use crate::util::CliResult;

Expand Down Expand Up @@ -55,6 +56,10 @@ pub(crate) struct Count {
#[arg(long)]
no_header: bool,

/// Show progress bar (requires `-o`/`--output`).
#[arg(short, long, requires = "output")]
progress: bool,

/// Write output to <filename> instead of stdout
#[arg(short, long, value_name = "filename")]
output: Option<OsString>,
Expand Down Expand Up @@ -88,6 +93,8 @@ impl Count {
let mut fields = 0;
let mut subfields = 0;

let mut progress = Progress::new(self.progress);

for filename in self.filenames {
let mut reader =
ReaderBuilder::new().from_path(filename)?;
Expand All @@ -96,12 +103,15 @@ impl Count {
match result {
Err(e) => {
if e.is_invalid_record() && skip_invalid {
progress.invalid();
continue;
} else {
return Err(e.into());
}
}
Ok(record) => {
progress.record();

records += 1;
fields += record.iter().len();
subfields += record
Expand Down Expand Up @@ -135,6 +145,7 @@ impl Count {
writeln!(writer, "subfields: {subfields}")?;
}

progress.finish();
writer.flush()?;
Ok(())
}
Expand Down
11 changes: 11 additions & 0 deletions pica-toolkit/src/commands/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use pica_record::io::{ReaderBuilder, RecordsIterator, WriterBuilder};
use serde::{Deserialize, Serialize};

use crate::common::FilterList;
use crate::progress::Progress;
use crate::translit::translit_maybe2;
use crate::util::{CliError, CliResult};
use crate::{gzip_flag, skip_invalid_flag, Config};
Expand Down Expand Up @@ -122,6 +123,10 @@ pub(crate) struct Filter {
#[arg(long, value_name = "filename", conflicts_with = "output")]
tee: Option<PathBuf>,

/// Show progress bar (requires `-o`/`--output`).
#[arg(short, long, requires = "output")]
progress: bool,

/// Write output to <filename> instead of stdout
#[arg(short, long, value_name = "filename")]
output: Option<OsString>,
Expand Down Expand Up @@ -231,6 +236,8 @@ impl Filter {
FilterList::default()
};

let mut progress = Progress::new(self.progress);

let mut count = 0;
let options = MatcherOptions::new()
.strsim_threshold(self.strsim_threshold as f64 / 100.0)
Expand All @@ -244,12 +251,15 @@ impl Filter {
match result {
Err(e) => {
if e.is_invalid_record() && skip_invalid {
progress.invalid();
continue;
} else {
return Err(e.into());
}
}
Ok(mut record) => {
progress.record();

if !allow_list.is_empty()
&& !allow_list.check(&record)
{
Expand Down Expand Up @@ -315,6 +325,7 @@ impl Filter {
}
}

progress.finish();
writer.finish()?;
if let Some(ref mut writer) = tee_writer {
writer.finish()?;
Expand Down
Loading
Loading