Add source to failing metadata parsing (#387)

Before:
```
cargo run --bin puffin-dev -q -- resolve-cli "transformers[accelerate, agents, all, audio, codecarbon, deepspeed, deepspeed-testing, dev, dev-tensorflow, dev-torch, docs, docs_specific, flax, flax-speech, ftfy, integrations, ja, modelcreation, onnx, onnxruntime, optuna, quality, ray, retrieval, sagemaker, sentencepiece, serving, sigopt, sklearn, speech, testing, tf, tf-cpu, tf-speech, timm, tokenizers, torch, torch-speech, torch-vision, torchhub, video, vision]"
puffin-dev failed
  Caused by: No solution found when resolving: transformers[accelerate,agents,all,audio,codecarbon,deepspeed,deepspeed-testing,dev,dev-tensorflow,dev-torch,docs,docs-specific,flax,flax-speech,ftfy,integrations,ja,modelcreation,onnx,onnxruntime,optuna,quality,ray,retrieval,sagemaker,sentencepiece,serving,sigopt,sklearn,speech,testing,tf,tf-cpu,tf-speech,timm,tokenizers,torch,torch-speech,torch-vision,torchhub,video,vision]
  Caused by: Not a valid package or extra name: ".none". Names must start and end with a letter or digit and may only contain -, _, ., and alphanumeric characters
```
After:
```
cargo run --bin puffin-dev -q -- resolve-cli "transformers[accelerate, agents, all, audio, codecarbon, deepspeed, deepspeed-testing, dev, dev-tensorflow, dev-torch, docs, docs_specific, flax, flax-speech, ftfy, integrations, ja, modelcreation, onnx, onnxruntime, optuna, quality, ray, retrieval, sagemaker, sentencepiece, serving, sigopt, sklearn, speech, testing, tf, tf-cpu, tf-speech, timm, tokenizers, torch, torch-speech, torch-vision, torchhub, video, vision]"
puffin-dev failed
  Caused by: No solution found when resolving: transformers[accelerate,agents,all,audio,codecarbon,deepspeed,deepspeed-testing,dev,dev-tensorflow,dev-torch,docs,docs-specific,flax,flax-speech,ftfy,integrations,ja,modelcreation,onnx,onnxruntime,optuna,quality,ray,retrieval,sagemaker,sentencepiece,serving,sigopt,sklearn,speech,testing,tf,tf-cpu,tf-speech,timm,tokenizers,torch,torch-speech,torch-vision,torchhub,video,vision]
  Caused by: Couldn't parse metadata in fastapi-0.10.1-py3-none-any.whl (https://files.pythonhosted.org/packages/6d/b8/97ac91cb7c8f661a810334bde310ed2b2885cce6d2baab1a50b0c7a17d83/fastapi-0.10.1-py3-none-any.whl)
  Caused by: Not a valid package or extra name: ".none". Names must start and end with a letter or digit and may only contain -, _, ., and alphanumeric characters
```
This commit is contained in:
konsti
2023-11-10 19:33:49 +01:00
committed by GitHub
parent b3edf7c2b2
commit d8408b1783
6 changed files with 17 additions and 11 deletions
+1
View File
@@ -7,6 +7,7 @@ RUN apt-get update \
&& apt-get install -y --no-install-recommends \
autoconf \
build-essential \
cmake \
curl \
make \
pkg-config \
+8 -4
View File
@@ -212,8 +212,9 @@ impl RegistryClient {
let cache_dir = self.cache.join(WHEEL_METADATA_FROM_INDEX).join("pypi");
let cache_file = format!("{}.json", filename.stem());
let response_callback = |response: Response| async move {
Ok(Metadata21::parse(response.bytes().await?.as_ref())?)
let response_callback = |response: Response| async {
Metadata21::parse(response.bytes().await?.as_ref())
.map_err(|err| Error::MetadataParseError(filename, url.clone(), err))
};
let req = self.client_raw.get(url.clone()).build()?;
self.cached_client
@@ -243,7 +244,8 @@ impl RegistryClient {
let mut reader = AsyncHttpRangeReader::from_head_response(client, response).await?;
trace!("Getting metadata for {filename} by range request");
let text = wheel_metadata_from_remote_zip(filename, &mut reader).await?;
let metadata = Metadata21::parse(text.as_bytes())?;
let metadata = Metadata21::parse(text.as_bytes())
.map_err(|err| Error::MetadataParseError(filename.clone(), url.clone(), err))?;
Ok(metadata)
};
@@ -308,7 +310,9 @@ impl RegistryClient {
.await
.map_err(|err| Error::Zip(filename.clone(), err))?;
Ok(Metadata21::parse(&contents)?)
let metadata = Metadata21::parse(&contents)
.map_err(|err| Error::MetadataParseError(filename.clone(), url.clone(), err))?;
Ok(metadata)
}
/// Stream a file from an external URL.
+3 -2
View File
@@ -3,6 +3,7 @@ use std::io;
use async_http_range_reader::AsyncHttpRangeReaderError;
use async_zip::error::ZipError;
use thiserror::Error;
use url::Url;
use distribution_filename::{WheelFilename, WheelFilenameError};
@@ -23,8 +24,8 @@ pub enum Error {
PackageNotFound(String),
/// The metadata file could not be parsed.
#[error(transparent)]
MetadataParseError(#[from] pypi_types::Error),
#[error("Couldn't parse metadata in {0} ({1})")]
MetadataParseError(WheelFilename, Url, #[source] pypi_types::Error),
/// The metadata file was not found in the registry.
#[error("File `{0}` was not found in the registry at {1}.")]
+1 -1
View File
@@ -94,7 +94,7 @@ impl BuildContext for BuildDispatch {
);
let resolution_graph = resolver.resolve().await.with_context(|| {
format!(
"No solution found when resolving build dependencies for source distribution: {}",
"No solution found when resolving: {}",
requirements.iter().map(ToString::to_string).join(", "),
)
})?;
@@ -61,9 +61,9 @@ impl<'a> BuiltDistFetcher<'a> {
// Read the metadata from the wheel.
let wheel = CachedWheel::new(wheel_file, WheelFilename::from_str(wheel_filename)?);
let metadata21 = wheel.read_dist_info()?;
let metadata = wheel.read_dist_info()?;
debug!("Finished downloading: {dist}");
Ok(metadata21)
Ok(metadata)
}
}
@@ -159,10 +159,10 @@ impl<'a, T: BuildContext> SourceDistFetcher<'a, T> {
wheel_dir.join(&disk_filename),
WheelFilename::from_str(&disk_filename)?,
);
let metadata21 = wheel.read_dist_info()?;
let metadata = wheel.read_dist_info()?;
debug!("Finished building: {dist}");
Ok(metadata21)
Ok(metadata)
}
/// Given a remote source distribution, return a precise variant, if possible.