Add progress bar

This commit is contained in:
Charlie Marsh 2023-10-05 00:48:21 -04:00
parent 8032d4606e
commit 7f497fa43f
5 changed files with 13 additions and 4 deletions

View file

@ -24,3 +24,4 @@ pep440_rs = "0.3.12"
tracing = "0.1.37"
tracing-tree = "0.2.5"
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
indicatif = "0.17.7"

View file

@ -13,14 +13,16 @@ use puffin_client::{File, PypiClientBuilder, SimpleJson};
use puffin_requirements::metadata::Metadata21;
use puffin_requirements::package_name::PackageName;
use puffin_requirements::wheel::WheelName;
use indicatif::{ProgressBar, ProgressStyle};
use crate::commands::ExitStatus;
#[derive(Debug)]
enum Request {
Package(Requirement),
Version(Requirement, File),
}
#[derive(Debug)]
enum Response {
Package(SimpleJson, Requirement),
Version(Metadata21, Requirement),
@ -66,7 +68,7 @@ pub(crate) async fn install(src: &Path) -> Result<ExitStatus> {
),
Request::Version(requirement, file) => Either::Right(
proxy_client
.file(file.clone())
.file(file)
.map_ok(move |metadata| Response::Version(metadata, requirement)),
),
})
@ -84,6 +86,10 @@ pub(crate) async fn install(src: &Path) -> Result<ExitStatus> {
// Resolve the requirements.
let mut resolution: HashMap<PackageName, Version> = HashMap::with_capacity(requirements.len());
let spinner_style = ProgressStyle::with_template("{spinner} {wide_bar} [{pos}/{len}] {msg}").unwrap();
let bar = ProgressBar::new(8);
bar.set_style(spinner_style);
while let Some(chunk) = package_stream.next().await {
for result in chunk {
let result: Response = result?;
@ -125,6 +131,7 @@ pub(crate) async fn install(src: &Path) -> Result<ExitStatus> {
let normalized_name = PackageName::normalize(&requirement.name);
in_flight.remove(&normalized_name);
resolution.insert(normalized_name, metadata.version);
bar.inc(1);
// Enqueue its dependencies.
for dependency in metadata.requires_dist {

View file

@ -17,3 +17,4 @@ serde_json = { version = "1.0.107" }
thiserror = { version = "1.0.49" }
url = { version = "2.4.1" }
tracing = "0.1.37"
indicatif = "0.17.7"

View file

@ -35,7 +35,7 @@ impl PypiClient {
// Fetch from the registry.
let text = self.simple_impl(&package_name, &url).await?;
let payload = serde_json::from_str(&text)
.map_err(move |e| PypiClientError::from_json_err(e, "".to_string()));
.map_err(move |e| PypiClientError::from_json_err(e, String::new()));
trace!("fetched metadata for {} in {:?}", url, start.elapsed());

View file

@ -1 +1 @@
flask
black