mirror of https://github.com/astral-sh/uv
53 lines
1.4 KiB
Rust
53 lines
1.4 KiB
Rust
use std::str::FromStr;
|
|
|
|
use anstream::println;
|
|
use anyhow::{Result, bail};
|
|
use clap::Parser;
|
|
|
|
use uv_cache::{Cache, CacheArgs};
|
|
use uv_client::{BaseClientBuilder, RegistryClientBuilder};
|
|
use uv_distribution_filename::WheelFilename;
|
|
use uv_distribution_types::{BuiltDist, DirectUrlBuiltDist, IndexCapabilities, RemoteSource};
|
|
use uv_pep508::VerbatimUrl;
|
|
use uv_pypi_types::ParsedUrl;
|
|
use uv_settings::EnvironmentOptions;
|
|
|
|
#[derive(Parser)]
|
|
pub(crate) struct WheelMetadataArgs {
|
|
url: VerbatimUrl,
|
|
#[command(flatten)]
|
|
cache_args: CacheArgs,
|
|
}
|
|
|
|
pub(crate) async fn wheel_metadata(
|
|
args: WheelMetadataArgs,
|
|
environment: EnvironmentOptions,
|
|
) -> Result<()> {
|
|
let cache = Cache::try_from(args.cache_args)?.init().await?;
|
|
let client = RegistryClientBuilder::new(
|
|
BaseClientBuilder::default().timeout(environment.http_timeout),
|
|
cache,
|
|
)
|
|
.build();
|
|
let capabilities = IndexCapabilities::default();
|
|
|
|
let filename = WheelFilename::from_str(&args.url.filename()?)?;
|
|
|
|
let ParsedUrl::Archive(archive) = ParsedUrl::try_from(args.url.to_url())? else {
|
|
bail!("Only HTTPS is supported");
|
|
};
|
|
|
|
let metadata = client
|
|
.wheel_metadata(
|
|
&BuiltDist::DirectUrl(DirectUrlBuiltDist {
|
|
filename,
|
|
location: Box::new(archive.url),
|
|
url: args.url,
|
|
}),
|
|
&capabilities,
|
|
)
|
|
.await?;
|
|
println!("{metadata:?}");
|
|
Ok(())
|
|
}
|