mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-23 00:32:13 +00:00
Rename MetadataResolver
to ResolutionMetadata
(#7661)
This commit is contained in:
parent
16a6fd2c42
commit
5da73a24cb
12 changed files with 78 additions and 73 deletions
|
@ -21,7 +21,7 @@ use crate::{metadata, LenientVersionSpecifiers, MetadataError, VerbatimParsedUrl
|
|||
/// Core Metadata 2.3 is specified in <https://packaging.python.org/specifications/core-metadata/>.
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub struct MetadataResolver {
|
||||
pub struct ResolutionMetadata {
|
||||
// Mandatory fields
|
||||
pub name: PackageName,
|
||||
pub version: Version,
|
||||
|
@ -32,8 +32,8 @@ pub struct MetadataResolver {
|
|||
}
|
||||
|
||||
/// From <https://github.com/PyO3/python-pkginfo-rs/blob/d719988323a0cfea86d4737116d7917f30e819e2/src/metadata.rs#LL78C2-L91C26>
|
||||
impl MetadataResolver {
|
||||
/// Parse the [`MetadataResolver`] from a `METADATA` file, as included in a built distribution (wheel).
|
||||
impl ResolutionMetadata {
|
||||
/// Parse the [`ResolutionMetadata`] from a `METADATA` file, as included in a built distribution (wheel).
|
||||
pub fn parse_metadata(content: &[u8]) -> Result<Self, MetadataError> {
|
||||
let headers = Headers::parse(content)?;
|
||||
|
||||
|
@ -78,7 +78,7 @@ impl MetadataResolver {
|
|||
})
|
||||
}
|
||||
|
||||
/// Read the [`MetadataResolver`] from a source distribution's `PKG-INFO` file, if it uses Metadata 2.2
|
||||
/// Read the [`ResolutionMetadata`] from a source distribution's `PKG-INFO` file, if it uses Metadata 2.2
|
||||
/// or later _and_ none of the required fields (`Requires-Python`, `Requires-Dist`, and
|
||||
/// `Provides-Extra`) are marked as dynamic.
|
||||
pub fn parse_pkg_info(content: &[u8]) -> Result<Self, MetadataError> {
|
||||
|
@ -167,61 +167,61 @@ mod tests {
|
|||
#[test]
|
||||
fn test_parse_metadata() {
|
||||
let s = "Metadata-Version: 1.0";
|
||||
let meta = MetadataResolver::parse_metadata(s.as_bytes());
|
||||
let meta = ResolutionMetadata::parse_metadata(s.as_bytes());
|
||||
assert!(matches!(meta, Err(MetadataError::FieldNotFound("Name"))));
|
||||
|
||||
let s = "Metadata-Version: 1.0\nName: asdf";
|
||||
let meta = MetadataResolver::parse_metadata(s.as_bytes());
|
||||
let meta = ResolutionMetadata::parse_metadata(s.as_bytes());
|
||||
assert!(matches!(meta, Err(MetadataError::FieldNotFound("Version"))));
|
||||
|
||||
let s = "Metadata-Version: 1.0\nName: asdf\nVersion: 1.0";
|
||||
let meta = MetadataResolver::parse_metadata(s.as_bytes()).unwrap();
|
||||
let meta = ResolutionMetadata::parse_metadata(s.as_bytes()).unwrap();
|
||||
assert_eq!(meta.name, PackageName::from_str("asdf").unwrap());
|
||||
assert_eq!(meta.version, Version::new([1, 0]));
|
||||
|
||||
let s = "Metadata-Version: 1.0\nName: asdf\nVersion: 1.0\nAuthor: 中文\n\n一个 Python 包";
|
||||
let meta = MetadataResolver::parse_metadata(s.as_bytes()).unwrap();
|
||||
let meta = ResolutionMetadata::parse_metadata(s.as_bytes()).unwrap();
|
||||
assert_eq!(meta.name, PackageName::from_str("asdf").unwrap());
|
||||
assert_eq!(meta.version, Version::new([1, 0]));
|
||||
|
||||
let s = "Metadata-Version: 1.0\nName: =?utf-8?q?foobar?=\nVersion: 1.0";
|
||||
let meta = MetadataResolver::parse_metadata(s.as_bytes()).unwrap();
|
||||
let meta = ResolutionMetadata::parse_metadata(s.as_bytes()).unwrap();
|
||||
assert_eq!(meta.name, PackageName::from_str("foobar").unwrap());
|
||||
assert_eq!(meta.version, Version::new([1, 0]));
|
||||
|
||||
let s = "Metadata-Version: 1.0\nName: =?utf-8?q?=C3=A4_space?= <x@y.org>\nVersion: 1.0";
|
||||
let meta = MetadataResolver::parse_metadata(s.as_bytes());
|
||||
let meta = ResolutionMetadata::parse_metadata(s.as_bytes());
|
||||
assert!(matches!(meta, Err(MetadataError::InvalidName(_))));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_pkg_info() {
|
||||
let s = "Metadata-Version: 2.1";
|
||||
let meta = MetadataResolver::parse_pkg_info(s.as_bytes());
|
||||
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes());
|
||||
assert!(matches!(
|
||||
meta,
|
||||
Err(MetadataError::UnsupportedMetadataVersion(_))
|
||||
));
|
||||
|
||||
let s = "Metadata-Version: 2.2\nName: asdf";
|
||||
let meta = MetadataResolver::parse_pkg_info(s.as_bytes());
|
||||
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes());
|
||||
assert!(matches!(meta, Err(MetadataError::FieldNotFound("Version"))));
|
||||
|
||||
let s = "Metadata-Version: 2.3\nName: asdf";
|
||||
let meta = MetadataResolver::parse_pkg_info(s.as_bytes());
|
||||
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes());
|
||||
assert!(matches!(meta, Err(MetadataError::FieldNotFound("Version"))));
|
||||
|
||||
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0";
|
||||
let meta = MetadataResolver::parse_pkg_info(s.as_bytes()).unwrap();
|
||||
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap();
|
||||
assert_eq!(meta.name, PackageName::from_str("asdf").unwrap());
|
||||
assert_eq!(meta.version, Version::new([1, 0]));
|
||||
|
||||
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0\nDynamic: Requires-Dist";
|
||||
let meta = MetadataResolver::parse_pkg_info(s.as_bytes()).unwrap_err();
|
||||
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap_err();
|
||||
assert!(matches!(meta, MetadataError::DynamicField("Requires-Dist")));
|
||||
|
||||
let s = "Metadata-Version: 2.3\nName: asdf\nVersion: 1.0\nRequires-Dist: foo";
|
||||
let meta = MetadataResolver::parse_pkg_info(s.as_bytes()).unwrap();
|
||||
let meta = ResolutionMetadata::parse_pkg_info(s.as_bytes()).unwrap();
|
||||
assert_eq!(meta.name, PackageName::from_str("asdf").unwrap());
|
||||
assert_eq!(meta.version, Version::new([1, 0]));
|
||||
assert_eq!(meta.requires_dist, vec!["foo".parse().unwrap()]);
|
||||
|
|
|
@ -16,7 +16,7 @@ use uv_normalize::InvalidNameError;
|
|||
pub use metadata10::Metadata10;
|
||||
pub use metadata12::Metadata12;
|
||||
pub use metadata23::Metadata23;
|
||||
pub use metadata_resolver::MetadataResolver;
|
||||
pub use metadata_resolver::ResolutionMetadata;
|
||||
pub use pyproject_toml::RequiresDist;
|
||||
pub use requires_txt::RequiresTxt;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use crate::{
|
||||
LenientRequirement, LenientVersionSpecifiers, MetadataError, MetadataResolver,
|
||||
LenientRequirement, LenientVersionSpecifiers, MetadataError, ResolutionMetadata,
|
||||
VerbatimParsedUrl,
|
||||
};
|
||||
use indexmap::IndexMap;
|
||||
|
@ -12,7 +12,7 @@ use std::str::FromStr;
|
|||
use uv_normalize::{ExtraName, PackageName};
|
||||
|
||||
/// Extract the metadata from a `pyproject.toml` file, as specified in PEP 621.
|
||||
pub(crate) fn parse_pyproject_toml(contents: &str) -> Result<MetadataResolver, MetadataError> {
|
||||
pub(crate) fn parse_pyproject_toml(contents: &str) -> Result<ResolutionMetadata, MetadataError> {
|
||||
let pyproject_toml = PyProjectToml::from_toml(contents)?;
|
||||
|
||||
let project = pyproject_toml
|
||||
|
@ -77,7 +77,7 @@ pub(crate) fn parse_pyproject_toml(contents: &str) -> Result<MetadataResolver, M
|
|||
provides_extras.push(extra);
|
||||
}
|
||||
|
||||
Ok(MetadataResolver {
|
||||
Ok(ResolutionMetadata {
|
||||
name,
|
||||
version,
|
||||
requires_dist,
|
||||
|
@ -149,7 +149,7 @@ struct ToolPoetry {}
|
|||
/// Python Package Metadata 2.3 as specified in
|
||||
/// <https://packaging.python.org/specifications/core-metadata/>.
|
||||
///
|
||||
/// This is a subset of [`MetadataResolver`]; specifically, it omits the `version` and `requires-python`
|
||||
/// This is a subset of [`ResolutionMetadata`]; specifically, it omits the `version` and `requires-python`
|
||||
/// fields, which aren't necessary when extracting the requirements of a package without installing
|
||||
/// the package itself.
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue