mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-04 19:08:04 +00:00
Rename Downloader
for clarity (#4395)
Follow-up to https://github.com/astral-sh/uv/pull/4394 with internal refactor
This commit is contained in:
parent
b22ee82f0d
commit
f219f88553
6 changed files with 43 additions and 41 deletions
|
@ -20,7 +20,7 @@ use uv_configuration::{BuildKind, BuildOptions, ConfigSettings, Reinstall, Setup
|
|||
use uv_configuration::{Concurrency, PreviewMode};
|
||||
use uv_distribution::DistributionDatabase;
|
||||
use uv_git::GitResolver;
|
||||
use uv_installer::{Downloader, Installer, Plan, Planner, SitePackages};
|
||||
use uv_installer::{Installer, Plan, Planner, Preparer, SitePackages};
|
||||
use uv_resolver::{FlatIndex, InMemoryIndex, Manifest, Options, PythonRequirement, Resolver};
|
||||
use uv_toolchain::{Interpreter, PythonEnvironment};
|
||||
use uv_types::{BuildContext, BuildIsolation, EmptyInstalledPackages, HashStrategy, InFlight};
|
||||
|
@ -240,7 +240,7 @@ impl<'a> BuildContext for BuildDispatch<'a> {
|
|||
vec![]
|
||||
} else {
|
||||
// TODO(konstin): Check that there is no endless recursion.
|
||||
let downloader = Downloader::new(
|
||||
let preparer = Preparer::new(
|
||||
self.cache,
|
||||
tags,
|
||||
&HashStrategy::None,
|
||||
|
@ -258,10 +258,10 @@ impl<'a> BuildContext for BuildDispatch<'a> {
|
|||
remote.iter().map(ToString::to_string).join(", ")
|
||||
);
|
||||
|
||||
downloader
|
||||
.download(remote, self.in_flight)
|
||||
preparer
|
||||
.prepare(remote, self.in_flight)
|
||||
.await
|
||||
.context("Failed to download and build distributions")?
|
||||
.context("Failed to prepare distributions")?
|
||||
};
|
||||
|
||||
// Remove any unnecessary packages.
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
pub use compile::{compile_tree, CompileError};
|
||||
pub use downloader::{Downloader, Reporter as DownloadReporter};
|
||||
pub use installer::{Installer, Reporter as InstallReporter};
|
||||
pub use plan::{Plan, Planner};
|
||||
pub use preparer::{Preparer, Reporter as PrepareReporter};
|
||||
pub use site_packages::{SatisfiesResult, SitePackages, SitePackagesDiagnostic};
|
||||
pub use uninstall::{uninstall, UninstallError};
|
||||
|
||||
mod compile;
|
||||
mod downloader;
|
||||
mod preparer;
|
||||
|
||||
mod installer;
|
||||
mod plan;
|
||||
|
|
|
@ -30,8 +30,10 @@ pub enum Error {
|
|||
Thread(String),
|
||||
}
|
||||
|
||||
/// Download, build, and unzip a set of distributions.
|
||||
pub struct Downloader<'a, Context: BuildContext> {
|
||||
/// Prepare distributions for installation.
|
||||
///
|
||||
/// Downloads, builds, and unzips a set of distributions.
|
||||
pub struct Preparer<'a, Context: BuildContext> {
|
||||
tags: &'a Tags,
|
||||
cache: &'a Cache,
|
||||
hashes: &'a HashStrategy,
|
||||
|
@ -39,7 +41,7 @@ pub struct Downloader<'a, Context: BuildContext> {
|
|||
reporter: Option<Arc<dyn Reporter>>,
|
||||
}
|
||||
|
||||
impl<'a, Context: BuildContext> Downloader<'a, Context> {
|
||||
impl<'a, Context: BuildContext> Preparer<'a, Context> {
|
||||
pub fn new(
|
||||
cache: &'a Cache,
|
||||
tags: &'a Tags,
|
||||
|
@ -55,7 +57,7 @@ impl<'a, Context: BuildContext> Downloader<'a, Context> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Set the [`Reporter`] to use for this downloader.
|
||||
/// Set the [`Reporter`] to use for operations.
|
||||
#[must_use]
|
||||
pub fn with_reporter(self, reporter: impl Reporter + 'static) -> Self {
|
||||
let reporter: Arc<dyn Reporter> = Arc::new(reporter);
|
||||
|
@ -69,7 +71,7 @@ impl<'a, Context: BuildContext> Downloader<'a, Context> {
|
|||
}
|
||||
|
||||
/// Fetch, build, and unzip the distributions in parallel.
|
||||
pub fn download_stream<'stream>(
|
||||
pub fn prepare_stream<'stream>(
|
||||
&'stream self,
|
||||
distributions: Vec<Dist>,
|
||||
in_flight: &'stream InFlight,
|
||||
|
@ -86,9 +88,9 @@ impl<'a, Context: BuildContext> Downloader<'a, Context> {
|
|||
.collect::<FuturesUnordered<_>>()
|
||||
}
|
||||
|
||||
/// Download, build, and unzip a set of downloaded wheels.
|
||||
/// Download, build, and unzip a set of distributions.
|
||||
#[instrument(skip_all, fields(total = distributions.len()))]
|
||||
pub async fn download(
|
||||
pub async fn prepare(
|
||||
&self,
|
||||
mut distributions: Vec<Dist>,
|
||||
in_flight: &InFlight,
|
||||
|
@ -98,7 +100,7 @@ impl<'a, Context: BuildContext> Downloader<'a, Context> {
|
|||
.sort_unstable_by_key(|distribution| Reverse(distribution.size().unwrap_or(u64::MAX)));
|
||||
|
||||
let wheels = self
|
||||
.download_stream(distributions, in_flight)
|
||||
.prepare_stream(distributions, in_flight)
|
||||
.try_collect()
|
||||
.await?;
|
||||
|
|
@ -27,7 +27,7 @@ use uv_configuration::{
|
|||
use uv_dispatch::BuildDispatch;
|
||||
use uv_distribution::DistributionDatabase;
|
||||
use uv_fs::Simplified;
|
||||
use uv_installer::{Downloader, Plan, Planner, SitePackages};
|
||||
use uv_installer::{Plan, Planner, Preparer, SitePackages};
|
||||
use uv_normalize::{GroupName, PackageName};
|
||||
use uv_requirements::{
|
||||
LookaheadResolver, NamedRequirementsResolver, RequirementsSource, RequirementsSpecification,
|
||||
|
@ -41,7 +41,7 @@ use uv_toolchain::{Interpreter, PythonEnvironment};
|
|||
use uv_types::{HashStrategy, InFlight, InstalledPackagesProvider};
|
||||
use uv_warnings::warn_user;
|
||||
|
||||
use crate::commands::reporters::{DownloadReporter, InstallReporter, ResolverReporter};
|
||||
use crate::commands::reporters::{InstallReporter, PrepareReporter, ResolverReporter};
|
||||
use crate::commands::{compile_bytecode, elapsed, ChangeEvent, ChangeEventKind, DryRunEvent};
|
||||
use crate::printer::Printer;
|
||||
|
||||
|
@ -375,18 +375,18 @@ pub(crate) async fn install(
|
|||
} else {
|
||||
let start = std::time::Instant::now();
|
||||
|
||||
let downloader = Downloader::new(
|
||||
let preparer = Preparer::new(
|
||||
cache,
|
||||
tags,
|
||||
hasher,
|
||||
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
|
||||
)
|
||||
.with_reporter(DownloadReporter::from(printer).with_length(remote.len() as u64));
|
||||
.with_reporter(PrepareReporter::from(printer).with_length(remote.len() as u64));
|
||||
|
||||
let wheels = downloader
|
||||
.download(remote.clone(), in_flight)
|
||||
let wheels = preparer
|
||||
.prepare(remote.clone(), in_flight)
|
||||
.await
|
||||
.context("Failed to download distributions")?;
|
||||
.context("Failed to prepare distributions")?;
|
||||
|
||||
let s = if wheels.len() == 1 { "" } else { "s" };
|
||||
writeln!(
|
||||
|
|
|
@ -229,11 +229,11 @@ impl ProgressReporter {
|
|||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(crate) struct DownloadReporter {
|
||||
pub(crate) struct PrepareReporter {
|
||||
reporter: ProgressReporter,
|
||||
}
|
||||
|
||||
impl From<Printer> for DownloadReporter {
|
||||
impl From<Printer> for PrepareReporter {
|
||||
fn from(printer: Printer) -> Self {
|
||||
let multi_progress = MultiProgress::with_draw_target(printer.target());
|
||||
let root = multi_progress.add(ProgressBar::with_draw_target(None, printer.target()));
|
||||
|
@ -250,7 +250,7 @@ impl From<Printer> for DownloadReporter {
|
|||
}
|
||||
}
|
||||
|
||||
impl DownloadReporter {
|
||||
impl PrepareReporter {
|
||||
#[must_use]
|
||||
pub(crate) fn with_length(self, length: u64) -> Self {
|
||||
self.reporter.root.set_length(length);
|
||||
|
@ -258,7 +258,7 @@ impl DownloadReporter {
|
|||
}
|
||||
}
|
||||
|
||||
impl uv_installer::DownloadReporter for DownloadReporter {
|
||||
impl uv_installer::PrepareReporter for PrepareReporter {
|
||||
fn on_progress(&self, _dist: &CachedDist) {
|
||||
self.reporter.root.inc(1);
|
||||
}
|
||||
|
|
|
@ -3519,7 +3519,7 @@ fn require_hashes_wheel_no_binary() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio==4.0.0
|
||||
Caused by: Hash mismatch for `anyio==4.0.0`
|
||||
|
||||
|
@ -3612,7 +3612,7 @@ fn require_hashes_source_only_binary() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio==4.0.0
|
||||
Caused by: Hash mismatch for `anyio==4.0.0`
|
||||
|
||||
|
@ -3645,7 +3645,7 @@ fn require_hashes_wrong_digest() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio==4.0.0
|
||||
Caused by: Hash mismatch for `anyio==4.0.0`
|
||||
|
||||
|
@ -3678,7 +3678,7 @@ fn require_hashes_wrong_algorithm() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio==4.0.0
|
||||
Caused by: Hash mismatch for `anyio==4.0.0`
|
||||
|
||||
|
@ -3851,7 +3851,7 @@ fn require_hashes_wheel_url() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl
|
||||
Caused by: Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl`
|
||||
|
||||
|
@ -3906,7 +3906,7 @@ fn require_hashes_wheel_url_mismatch() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl
|
||||
Caused by: Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl`
|
||||
|
||||
|
@ -4014,7 +4014,7 @@ fn require_hashes_re_download() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio==4.0.0
|
||||
Caused by: Hash mismatch for `anyio==4.0.0`
|
||||
|
||||
|
@ -4106,7 +4106,7 @@ fn require_hashes_wheel_path_mismatch() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: tqdm @ file://[WORKSPACE]/scripts/links/tqdm-1000.0.0-py3-none-any.whl
|
||||
Caused by: Hash mismatch for `tqdm @ file://[WORKSPACE]/scripts/links/tqdm-1000.0.0-py3-none-any.whl`
|
||||
|
||||
|
@ -4385,7 +4385,7 @@ fn require_hashes_repeated_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl
|
||||
Caused by: Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl`
|
||||
|
||||
|
@ -4517,7 +4517,7 @@ fn require_hashes_find_links_no_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: example-a-961b4c22==1.0.0
|
||||
Caused by: Hash mismatch for `example-a-961b4c22==1.0.0`
|
||||
|
||||
|
@ -4547,7 +4547,7 @@ fn require_hashes_find_links_no_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: example-a-961b4c22==1.0.0
|
||||
Caused by: Hash mismatch for `example-a-961b4c22==1.0.0`
|
||||
|
||||
|
@ -4639,7 +4639,7 @@ fn require_hashes_find_links_invalid_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: example-a-961b4c22==1.0.0
|
||||
Caused by: Hash mismatch for `example-a-961b4c22==1.0.0`
|
||||
|
||||
|
@ -4668,7 +4668,7 @@ fn require_hashes_find_links_invalid_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: example-a-961b4c22==1.0.0
|
||||
Caused by: Hash mismatch for `example-a-961b4c22==1.0.0`
|
||||
|
||||
|
@ -4840,7 +4840,7 @@ fn require_hashes_registry_invalid_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: example-a-961b4c22==1.0.0
|
||||
Caused by: Hash mismatch for `example-a-961b4c22==1.0.0`
|
||||
|
||||
|
@ -4869,7 +4869,7 @@ fn require_hashes_registry_invalid_hash() -> Result<()> {
|
|||
|
||||
----- stderr -----
|
||||
Resolved 1 package in [TIME]
|
||||
error: Failed to download distributions
|
||||
error: Failed to prepare distributions
|
||||
Caused by: Failed to fetch wheel: example-a-961b4c22==1.0.0
|
||||
Caused by: Hash mismatch for `example-a-961b4c22==1.0.0`
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue