Move lowered requirement source type out of uv-pypi-types (#12356)

## Summary

This crate is for standards-compliant types, but this is explicitly a
type that's custom to uv. It's also strange because we kind of want to
reference `IndexUrl` on the registry type, but that's in a crate that
_depends_ on `uv-pypi-types`, which to me is a sign that this is off.
This commit is contained in:
Charlie Marsh 2025-03-20 18:16:12 -07:00 committed by GitHub
parent cf20d9a1ca
commit 46967723bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
58 changed files with 145 additions and 160 deletions

6
Cargo.lock generated
View file

@ -4927,11 +4927,11 @@ dependencies = [
"uv-cache",
"uv-cache-info",
"uv-cache-key",
"uv-distribution-types",
"uv-normalize",
"uv-pep440",
"uv-pep508",
"uv-platform-tags",
"uv-pypi-types",
"uv-static",
"which",
]
@ -5112,6 +5112,7 @@ dependencies = [
"serde",
"serde_json",
"thiserror 2.0.12",
"toml",
"tracing",
"url",
"uv-auth",
@ -5467,12 +5468,10 @@ dependencies = [
"serde",
"serde-untagged",
"thiserror 2.0.12",
"toml",
"toml_edit",
"tracing",
"url",
"uv-distribution-filename",
"uv-fs",
"uv-git-types",
"uv-normalize",
"uv-pep440",
@ -5763,6 +5762,7 @@ dependencies = [
"tracing",
"uv-cache",
"uv-dirs",
"uv-distribution-types",
"uv-fs",
"uv-install-wheel",
"uv-installer",

View file

@ -4,7 +4,7 @@ use uv_bench::criterion::black_box;
use uv_bench::criterion::{criterion_group, criterion_main, measurement::WallTime, Criterion};
use uv_cache::Cache;
use uv_client::RegistryClientBuilder;
use uv_pypi_types::Requirement;
use uv_distribution_types::Requirement;
use uv_python::PythonEnvironment;
use uv_resolver::Manifest;

View file

@ -29,11 +29,11 @@ use tracing::{debug, info_span, instrument, Instrument};
use uv_configuration::{BuildKind, BuildOutput, ConfigSettings, SourceStrategy};
use uv_distribution::BuildRequires;
use uv_distribution_types::{IndexLocations, Resolution};
use uv_distribution_types::{IndexLocations, Requirement, Resolution};
use uv_fs::{PythonExt, Simplified};
use uv_pep440::Version;
use uv_pep508::PackageName;
use uv_pypi_types::{Requirement, VerbatimParsedUrl};
use uv_pypi_types::VerbatimParsedUrl;
use uv_python::{Interpreter, PythonEnvironment};
use uv_static::EnvVars;
use uv_types::{AnyErrorBuild, BuildContext, BuildIsolation, BuildStack, SourceBuildTrait};

View file

@ -20,11 +20,11 @@ uv-auth = { workspace = true }
uv-cache = { workspace = true }
uv-cache-info = { workspace = true }
uv-cache-key = { workspace = true }
uv-distribution-types = { workspace = true }
uv-normalize = { workspace = true }
uv-pep440 = { workspace = true }
uv-pep508 = { workspace = true, features = ["schemars"] }
uv-platform-tags = { workspace = true }
uv-pypi-types = { workspace = true }
uv-static = { workspace = true }
clap = { workspace = true, features = ["derive"], optional = true }

View file

@ -3,9 +3,9 @@ use std::borrow::Cow;
use either::Either;
use rustc_hash::FxHashMap;
use uv_distribution_types::{Requirement, RequirementSource};
use uv_normalize::PackageName;
use uv_pep508::MarkerTree;
use uv_pypi_types::{Requirement, RequirementSource};
/// A set of constraints for a set of requirements.
#[derive(Debug, Default, Clone)]

View file

@ -3,9 +3,9 @@ use std::borrow::Cow;
use either::Either;
use rustc_hash::{FxBuildHasher, FxHashMap};
use uv_distribution_types::Requirement;
use uv_normalize::PackageName;
use uv_pep508::MarkerTree;
use uv_pypi_types::Requirement;
/// A set of overrides for a set of requirements.
#[derive(Debug, Default, Clone)]

View file

@ -1,11 +1,12 @@
use either::Either;
use std::path::{Path, PathBuf};
use uv_pep508::PackageName;
use either::Either;
use rustc_hash::FxHashMap;
use uv_cache::Refresh;
use uv_cache_info::Timestamp;
use uv_pypi_types::Requirement;
use uv_distribution_types::Requirement;
use uv_pep508::PackageName;
/// Whether to reinstall packages.
#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]

View file

@ -24,11 +24,11 @@ use uv_distribution::DistributionDatabase;
use uv_distribution_filename::DistFilename;
use uv_distribution_types::{
CachedDist, DependencyMetadata, Identifier, IndexCapabilities, IndexLocations,
IsBuildBackendError, Name, Resolution, SourceDist, VersionOrUrlRef,
IsBuildBackendError, Name, Requirement, Resolution, SourceDist, VersionOrUrlRef,
};
use uv_git::GitResolver;
use uv_installer::{Installer, Plan, Planner, Preparer, SitePackages};
use uv_pypi_types::{Conflicts, Requirement};
use uv_pypi_types::Conflicts;
use uv_python::{Interpreter, PythonEnvironment};
use uv_resolver::{
ExcludeNewer, FlatIndex, Flexibility, InMemoryIndex, Manifest, OptionsBuilder,

View file

@ -46,3 +46,8 @@ thiserror = { workspace = true }
tracing = { workspace = true }
url = { workspace = true }
version-ranges = { workspace = true }
[dev-dependencies]
toml = { workspace = true }

View file

@ -71,6 +71,7 @@ pub use crate::origin::*;
pub use crate::pip_index::*;
pub use crate::prioritized_distribution::*;
pub use crate::requested::*;
pub use crate::requirement::*;
pub use crate::resolution::*;
pub use crate::resolved::*;
pub use crate::specified_requirement::*;
@ -96,6 +97,7 @@ mod origin;
mod pip_index;
mod prioritized_distribution;
mod requested;
mod requirement;
mod resolution;
mod resolved;
mod specified_requirement;

View file

@ -15,7 +15,7 @@ use uv_pep508::{
marker, MarkerEnvironment, MarkerTree, RequirementOrigin, VerbatimUrl, VersionOrUrl,
};
use crate::{
use uv_pypi_types::{
ConflictItem, Hashes, ParsedArchiveUrl, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl,
ParsedUrl, ParsedUrlError, VerbatimParsedUrl,
};

View file

@ -1,9 +1,9 @@
use uv_distribution_filename::DistExtension;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep508::MarkerTree;
use uv_pypi_types::{HashDigest, HashDigests, RequirementSource};
use uv_pypi_types::{HashDigest, HashDigests};
use crate::{BuiltDist, Diagnostic, Dist, Name, ResolvedDist, SourceDist};
use crate::{BuiltDist, Diagnostic, Dist, Name, RequirementSource, ResolvedDist, SourceDist};
/// A set of packages pinned at specific versions.
///

View file

@ -3,9 +3,9 @@ use std::fmt::{Display, Formatter};
use uv_normalize::ExtraName;
use uv_pep508::{MarkerEnvironment, UnnamedRequirement};
use uv_pypi_types::{Hashes, Requirement, RequirementSource};
use uv_pypi_types::Hashes;
use crate::VerbatimParsedUrl;
use crate::{Requirement, RequirementSource, VerbatimParsedUrl};
/// An [`UnresolvedRequirement`] with additional metadata from `requirements.txt`, currently only
/// hashes but in the future also editable and similar information.

View file

@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use std::path::Path;
use uv_configuration::SourceStrategy;
use uv_distribution_types::IndexLocations;
use uv_distribution_types::{IndexLocations, Requirement};
use uv_normalize::PackageName;
use uv_workspace::pyproject::ToolUvSources;
use uv_workspace::{
@ -15,7 +15,7 @@ use crate::metadata::{LoweredRequirement, MetadataError};
#[derive(Debug, Clone)]
pub struct BuildRequires {
pub name: Option<PackageName>,
pub requires_dist: Vec<uv_pypi_types::Requirement>,
pub requires_dist: Vec<Requirement>,
}
impl BuildRequires {
@ -27,7 +27,7 @@ impl BuildRequires {
requires_dist: metadata
.requires_dist
.into_iter()
.map(uv_pypi_types::Requirement::from)
.map(Requirement::from)
.collect(),
}
}
@ -124,10 +124,7 @@ impl BuildRequires {
})
})
.collect::<Result<Vec<_>, _>>()?,
SourceStrategy::Disabled => requires_dist
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect(),
SourceStrategy::Disabled => requires_dist.into_iter().map(Requirement::from).collect(),
};
Ok(Self {
@ -199,10 +196,7 @@ impl BuildRequires {
})
})
.collect::<Result<Vec<_>, _>>()?,
SourceStrategy::Disabled => requires_dist
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect(),
SourceStrategy::Disabled => requires_dist.into_iter().map(Requirement::from).collect(),
};
Ok(Self {

View file

@ -7,14 +7,14 @@ use thiserror::Error;
use url::Url;
use uv_distribution_filename::DistExtension;
use uv_distribution_types::{Index, IndexLocations, IndexName, Origin};
use uv_distribution_types::{
Index, IndexLocations, IndexName, Origin, Requirement, RequirementSource,
};
use uv_git_types::{GitReference, GitUrl, GitUrlParseError};
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::VersionSpecifiers;
use uv_pep508::{looks_like_git_repository, MarkerTree, VerbatimUrl, VersionOrUrl};
use uv_pypi_types::{
ConflictItem, ParsedUrlError, Requirement, RequirementSource, VerbatimParsedUrl,
};
use uv_pypi_types::{ConflictItem, ParsedUrlError, VerbatimParsedUrl};
use uv_workspace::pyproject::{PyProjectToml, Source, Sources};
use uv_workspace::Workspace;

View file

@ -4,7 +4,7 @@ use std::path::Path;
use thiserror::Error;
use uv_configuration::SourceStrategy;
use uv_distribution_types::{GitSourceUrl, IndexLocations};
use uv_distribution_types::{GitSourceUrl, IndexLocations, Requirement};
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers};
use uv_pypi_types::{HashDigests, ResolutionMetadata};
@ -46,10 +46,10 @@ pub struct Metadata {
pub name: PackageName,
pub version: Version,
// Optional fields
pub requires_dist: Vec<uv_pypi_types::Requirement>,
pub requires_dist: Vec<Requirement>,
pub requires_python: Option<VersionSpecifiers>,
pub provides_extras: Vec<ExtraName>,
pub dependency_groups: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>,
pub dependency_groups: BTreeMap<GroupName, Vec<Requirement>>,
pub dynamic: bool,
}
@ -63,7 +63,7 @@ impl Metadata {
requires_dist: metadata
.requires_dist
.into_iter()
.map(uv_pypi_types::Requirement::from)
.map(Requirement::from)
.collect(),
requires_python: metadata.requires_python,
provides_extras: metadata.provides_extras,

View file

@ -5,7 +5,7 @@ use std::slice;
use rustc_hash::FxHashSet;
use uv_configuration::SourceStrategy;
use uv_distribution_types::IndexLocations;
use uv_distribution_types::{IndexLocations, Requirement};
use uv_normalize::{ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep508::MarkerTree;
use uv_workspace::dependency_groups::FlatDependencyGroups;
@ -18,9 +18,9 @@ use crate::Metadata;
#[derive(Debug, Clone)]
pub struct RequiresDist {
pub name: PackageName,
pub requires_dist: Vec<uv_pypi_types::Requirement>,
pub requires_dist: Vec<Requirement>,
pub provides_extras: Vec<ExtraName>,
pub dependency_groups: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>,
pub dependency_groups: BTreeMap<GroupName, Vec<Requirement>>,
pub dynamic: bool,
}
@ -33,7 +33,7 @@ impl RequiresDist {
requires_dist: metadata
.requires_dist
.into_iter()
.map(uv_pypi_types::Requirement::from)
.map(Requirement::from)
.collect(),
provides_extras: metadata.provides_extras,
dependency_groups: BTreeMap::default(),
@ -186,15 +186,11 @@ impl RequiresDist {
)
})
.collect::<Result<Vec<_>, _>>(),
SourceStrategy::Disabled => Ok(requirements
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect()),
SourceStrategy::Disabled => {
Ok(requirements.into_iter().map(Requirement::from).collect())
}
}?;
Ok::<(GroupName, Vec<uv_pypi_types::Requirement>), MetadataError>((
name,
requirements,
))
Ok::<(GroupName, Vec<Requirement>), MetadataError>((name, requirements))
})
.collect::<Result<BTreeMap<_, _>, _>>()?;
@ -227,10 +223,7 @@ impl RequiresDist {
})
})
.collect::<Result<Vec<_>, _>>()?,
SourceStrategy::Disabled => requires_dist
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect(),
SourceStrategy::Disabled => requires_dist.into_iter().map(Requirement::from).collect(),
};
Ok(Self {
@ -360,14 +353,11 @@ impl From<Metadata> for RequiresDist {
/// The [`FlatRequiresDist`] struct is used to flatten out the recursive dependencies, i.e., convert
/// from the former to the latter.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FlatRequiresDist(Vec<uv_pypi_types::Requirement>);
pub struct FlatRequiresDist(Vec<Requirement>);
impl FlatRequiresDist {
/// Flatten a set of requirements, resolving any self-references.
pub fn from_requirements(
requirements: Vec<uv_pypi_types::Requirement>,
name: &PackageName,
) -> Self {
pub fn from_requirements(requirements: Vec<Requirement>, name: &PackageName) -> Self {
// If there are no self-references, we can return early.
if requirements.iter().all(|req| req.name != *name) {
return Self(requirements);
@ -400,7 +390,7 @@ impl FlatRequiresDist {
let requirement = {
let mut marker = marker;
marker.and(requirement.marker);
uv_pypi_types::Requirement {
Requirement {
name: requirement.name.clone(),
extras: requirement.extras.clone(),
groups: requirement.groups.clone(),
@ -434,7 +424,7 @@ impl FlatRequiresDist {
for req in &requirements {
if req.name == *name {
if !req.source.is_empty() {
flattened.push(uv_pypi_types::Requirement {
flattened.push(Requirement {
name: req.name.clone(),
extras: vec![],
groups: req.groups.clone(),
@ -450,14 +440,14 @@ impl FlatRequiresDist {
}
/// Consume the [`FlatRequiresDist`] and return the inner vector.
pub fn into_inner(self) -> Vec<uv_pypi_types::Requirement> {
pub fn into_inner(self) -> Vec<Requirement> {
self.0
}
}
impl IntoIterator for FlatRequiresDist {
type Item = uv_pypi_types::Requirement;
type IntoIter = std::vec::IntoIter<uv_pypi_types::Requirement>;
type Item = Requirement;
type IntoIter = std::vec::IntoIter<Requirement>;
fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()

View file

@ -10,11 +10,11 @@ use uv_distribution::{
};
use uv_distribution_types::{
BuiltDist, CachedDirectUrlDist, CachedDist, Dist, Error, Hashed, IndexLocations, InstalledDist,
Name, Resolution, ResolvedDist, SourceDist,
Name, RequirementSource, Resolution, ResolvedDist, SourceDist,
};
use uv_fs::Simplified;
use uv_platform_tags::Tags;
use uv_pypi_types::{RequirementSource, VerbatimParsedUrl};
use uv_pypi_types::VerbatimParsedUrl;
use uv_python::PythonEnvironment;
use uv_types::HashStrategy;

View file

@ -6,9 +6,9 @@ use url::Url;
use uv_cache_info::CacheInfo;
use uv_cache_key::{CanonicalUrl, RepositoryUrl};
use uv_distribution_types::{InstalledDirectUrlDist, InstalledDist};
use uv_distribution_types::{InstalledDirectUrlDist, InstalledDist, RequirementSource};
use uv_git_types::GitOid;
use uv_pypi_types::{DirInfo, DirectUrl, RequirementSource, VcsInfo, VcsKind};
use uv_pypi_types::{DirInfo, DirectUrl, VcsInfo, VcsKind};
#[derive(Debug, Copy, Clone)]
pub(crate) enum RequirementSatisfaction {

View file

@ -9,14 +9,14 @@ use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
use url::Url;
use uv_distribution_types::{
Diagnostic, InstalledDist, Name, NameRequirementSpecification, UnresolvedRequirement,
UnresolvedRequirementSpecification,
Diagnostic, InstalledDist, Name, NameRequirementSpecification, Requirement,
UnresolvedRequirement, UnresolvedRequirementSpecification,
};
use uv_fs::Simplified;
use uv_normalize::PackageName;
use uv_pep440::{Version, VersionSpecifiers};
use uv_pep508::VersionOrUrl;
use uv_pypi_types::{Requirement, ResolverMarkerEnvironment, VerbatimParsedUrl};
use uv_pypi_types::{ResolverMarkerEnvironment, VerbatimParsedUrl};
use uv_python::{Interpreter, PythonEnvironment};
use uv_types::InstalledPackagesProvider;
use uv_warnings::warn_user;

View file

@ -17,7 +17,6 @@ workspace = true
[dependencies]
uv-distribution-filename = { workspace = true }
uv-fs = { workspace = true, features = ["serde"] }
uv-git-types = { workspace = true }
uv-normalize = { workspace = true }
uv-pep440 = { workspace = true }
@ -37,7 +36,6 @@ schemars = { workspace = true, optional = true }
serde = { workspace = true }
serde-untagged = { workspace = true }
thiserror = { workspace = true }
toml = { workspace = true }
toml_edit = { workspace = true }
tracing = { workspace = true }
url = { workspace = true }

View file

@ -7,7 +7,6 @@ pub use lenient_requirement::*;
pub use marker_environment::*;
pub use metadata::*;
pub use parsed_url::*;
pub use requirement::*;
pub use scheme::*;
pub use simple_json::*;
pub use supported_environments::*;
@ -21,7 +20,6 @@ mod lenient_requirement;
mod marker_environment;
mod metadata;
mod parsed_url;
mod requirement;
mod scheme;
mod simple_json;
mod supported_environments;

View file

@ -48,10 +48,12 @@ use url::Url;
use uv_client::BaseClient;
use uv_client::BaseClientBuilder;
use uv_configuration::{NoBinary, NoBuild, PackageNameSpecifier};
use uv_distribution_types::{UnresolvedRequirement, UnresolvedRequirementSpecification};
use uv_distribution_types::{
Requirement, UnresolvedRequirement, UnresolvedRequirementSpecification,
};
use uv_fs::Simplified;
use uv_pep508::{expand_env_vars, Pep508Error, RequirementOrigin, VerbatimUrl};
use uv_pypi_types::{Requirement, VerbatimParsedUrl};
use uv_pypi_types::VerbatimParsedUrl;
use crate::requirement::EditableError;
pub use crate::requirement::RequirementsTxtRequirement;

View file

@ -4,7 +4,7 @@ use futures::{stream::FuturesOrdered, TryStreamExt};
use uv_distribution::{DistributionDatabase, Reporter};
use uv_distribution_types::DistributionMetadata;
use uv_pypi_types::Requirement;
use uv_distribution_types::Requirement;
use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy};

View file

@ -5,8 +5,9 @@ pub use crate::sources::*;
pub use crate::specification::*;
pub use crate::unnamed::*;
use uv_distribution_types::{Dist, DistErrorKind, GitSourceDist, SourceDist};
use uv_pypi_types::{Requirement, RequirementSource};
use uv_distribution_types::{
Dist, DistErrorKind, GitSourceDist, Requirement, RequirementSource, SourceDist,
};
mod extras;
mod lookahead;

View file

@ -7,8 +7,7 @@ use tracing::trace;
use uv_configuration::{Constraints, Overrides};
use uv_distribution::{DistributionDatabase, Reporter};
use uv_distribution_types::{Dist, DistributionMetadata};
use uv_pypi_types::{Requirement, RequirementSource};
use uv_distribution_types::{Dist, DistributionMetadata, Requirement, RequirementSource};
use uv_resolver::{InMemoryIndex, MetadataResponse, ResolverEnvironment};
use uv_types::{BuildContext, HashStrategy, RequestedRequirements};

View file

@ -9,13 +9,13 @@ use url::Url;
use uv_configuration::{DependencyGroups, ExtrasSpecification};
use uv_distribution::{DistributionDatabase, FlatRequiresDist, Reporter, RequiresDist};
use uv_distribution_types::Requirement;
use uv_distribution_types::{
BuildableSource, DirectorySourceUrl, HashGeneration, HashPolicy, SourceUrl, VersionId,
};
use uv_fs::Simplified;
use uv_normalize::{ExtraName, PackageName};
use uv_pep508::RequirementOrigin;
use uv_pypi_types::Requirement;
use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy};

View file

@ -36,6 +36,7 @@ use tracing::instrument;
use uv_cache_key::CanonicalUrl;
use uv_client::BaseClientBuilder;
use uv_configuration::{DependencyGroups, NoBinary, NoBuild};
use uv_distribution_types::Requirement;
use uv_distribution_types::{
IndexUrl, NameRequirementSpecification, UnresolvedRequirement,
UnresolvedRequirementSpecification,
@ -43,7 +44,6 @@ use uv_distribution_types::{
use uv_fs::{Simplified, CWD};
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep508::{MarkerTree, UnnamedRequirement, UnnamedRequirementUrl};
use uv_pypi_types::Requirement;
use uv_pypi_types::VerbatimParsedUrl;
use uv_requirements_txt::{RequirementsTxt, RequirementsTxtRequirement};
use uv_warnings::warn_user;

View file

@ -9,20 +9,21 @@ use serde::Deserialize;
use tracing::debug;
use url::Host;
use crate::Error;
use uv_distribution::{DistributionDatabase, Reporter};
use uv_distribution_filename::{DistExtension, SourceDistFilename, WheelFilename};
use uv_distribution_types::{
BuildableSource, DirectSourceUrl, DirectorySourceUrl, GitSourceUrl, PathSourceUrl,
RemoteSource, SourceUrl, VersionId,
RemoteSource, Requirement, SourceUrl, VersionId,
};
use uv_normalize::PackageName;
use uv_pep508::{UnnamedRequirement, VersionOrUrl};
use uv_pypi_types::{Metadata10, Requirement};
use uv_pypi_types::Metadata10;
use uv_pypi_types::{ParsedUrl, VerbatimParsedUrl};
use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy};
use crate::Error;
/// Like [`RequirementsSpecification`], but with concrete names for all requirements.
pub struct NamedRequirementsResolver<'a, Context: BuildContext> {
/// Whether to check hashes for distributions.

View file

@ -25,10 +25,11 @@ use uv_distribution_filename::{
BuildTag, DistExtension, ExtensionError, SourceDistExtension, WheelFilename,
};
use uv_distribution_types::{
BuiltDist, DependencyMetadata, DirectUrlBuiltDist, DirectUrlSourceDist, DirectorySourceDist,
Dist, DistributionMetadata, FileLocation, GitSourceDist, IndexLocations, IndexUrl, Name,
PathBuiltDist, PathSourceDist, RegistryBuiltDist, RegistryBuiltWheel, RegistrySourceDist,
RemoteSource, ResolvedDist, StaticMetadata, ToUrlError, UrlString,
redact_credentials, BuiltDist, DependencyMetadata, DirectUrlBuiltDist, DirectUrlSourceDist,
DirectorySourceDist, Dist, DistributionMetadata, FileLocation, GitSourceDist, IndexLocations,
IndexUrl, Name, PathBuiltDist, PathSourceDist, RegistryBuiltDist, RegistryBuiltWheel,
RegistrySourceDist, RemoteSource, Requirement, RequirementSource, ResolvedDist, StaticMetadata,
ToUrlError, UrlString,
};
use uv_fs::{relative_to, PortablePath, PortablePathBuf};
use uv_git::{RepositoryReference, ResolvedRepositoryReference};
@ -40,8 +41,7 @@ use uv_platform_tags::{
AbiTag, IncompatibleTag, LanguageTag, PlatformTag, TagCompatibility, TagPriority, Tags,
};
use uv_pypi_types::{
redact_credentials, ConflictPackage, Conflicts, HashDigest, HashDigests, ParsedArchiveUrl,
ParsedGitUrl, Requirement, RequirementSource,
ConflictPackage, Conflicts, HashDigest, HashDigests, ParsedArchiveUrl, ParsedGitUrl,
};
use uv_small_str::SmallString;
use uv_types::{BuildContext, HashStrategy};

View file

@ -4,8 +4,8 @@ use std::collections::BTreeSet;
use either::Either;
use uv_configuration::{Constraints, Overrides};
use uv_distribution_types::Requirement;
use uv_normalize::PackageName;
use uv_pypi_types::Requirement;
use uv_types::RequestedRequirements;
use crate::preferences::Preferences;

View file

@ -1,11 +1,10 @@
use uv_pypi_types::RequirementSource;
use uv_distribution_types::RequirementSource;
use uv_normalize::PackageName;
use uv_pep440::Operator;
use crate::resolver::ForkSet;
use crate::{DependencyMode, Manifest, ResolverEnvironment};
use uv_normalize::PackageName;
use uv_pep440::Operator;
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]

View file

@ -4,11 +4,12 @@ use std::iter;
use either::Either;
use pubgrub::Ranges;
use uv_distribution_types::{Requirement, RequirementSource};
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers};
use uv_pypi_types::{
Conflicts, ParsedArchiveUrl, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl, ParsedUrl,
Requirement, RequirementSource, VerbatimParsedUrl,
VerbatimParsedUrl,
};
use crate::pubgrub::{PubGrubPackage, PubGrubPackageInner};

View file

@ -12,16 +12,14 @@ use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
use uv_configuration::{Constraints, Overrides};
use uv_distribution::Metadata;
use uv_distribution_types::{
Dist, DistributionMetadata, Edge, IndexUrl, Name, Node, ResolutionDiagnostic, ResolvedDist,
VersionId, VersionOrUrlRef,
Dist, DistributionMetadata, Edge, IndexUrl, Name, Node, Requirement, ResolutionDiagnostic,
ResolvedDist, VersionId, VersionOrUrlRef,
};
use uv_git::GitResolver;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifier};
use uv_pep508::{MarkerEnvironment, MarkerTree, MarkerTreeKind};
use uv_pypi_types::{
Conflicts, HashDigests, ParsedUrlError, Requirement, VerbatimParsedUrl, Yanked,
};
use uv_pypi_types::{Conflicts, HashDigests, ParsedUrlError, VerbatimParsedUrl, Yanked};
use crate::graph_ops::{marker_reachability, simplify_conflict_markers};
use crate::pins::FilePins;

View file

@ -1,6 +1,7 @@
use rustc_hash::FxHashMap;
use uv_distribution_types::Requirement;
use uv_pep508::{MarkerTree, PackageName};
use uv_pypi_types::Requirement;
use crate::ResolverEnvironment;

View file

@ -1,7 +1,7 @@
use uv_distribution_types::IndexUrl;
use uv_distribution_types::{IndexUrl, RequirementSource};
use uv_normalize::PackageName;
use uv_pep508::VerbatimUrl;
use uv_pypi_types::{ConflictItem, RequirementSource};
use uv_pypi_types::ConflictItem;
use crate::resolver::ForkMap;
use crate::{DependencyMode, Manifest, ResolverEnvironment};

View file

@ -25,15 +25,15 @@ use uv_distribution::DistributionDatabase;
use uv_distribution_types::{
BuiltDist, CompatibleDist, DerivationChain, Dist, DistErrorKind, DistributionMetadata,
IncompatibleDist, IncompatibleSource, IncompatibleWheel, IndexCapabilities, IndexLocations,
IndexUrl, InstalledDist, PythonRequirementKind, RemoteSource, ResolvedDist, ResolvedDistRef,
SourceDist, VersionOrUrlRef,
IndexUrl, InstalledDist, PythonRequirementKind, RemoteSource, Requirement, ResolvedDist,
ResolvedDistRef, SourceDist, VersionOrUrlRef,
};
use uv_git::GitResolver;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{release_specifiers_to_ranges, Version, VersionSpecifiers, MIN_VERSION};
use uv_pep508::{MarkerExpression, MarkerOperator, MarkerTree, MarkerValueString};
use uv_platform_tags::Tags;
use uv_pypi_types::{ConflictItem, ConflictItemRef, Conflicts, Requirement, VerbatimParsedUrl};
use uv_pypi_types::{ConflictItem, ConflictItemRef, Conflicts, VerbatimParsedUrl};
use uv_types::{BuildContext, HashStrategy, InstalledPackagesProvider};
use uv_warnings::warn_user_once;

View file

@ -2,9 +2,9 @@ use std::sync::Arc;
use rustc_hash::{FxHashMap, FxHashSet};
use uv_distribution_types::RequirementSource;
use uv_normalize::PackageName;
use uv_pep440::Version;
use uv_pypi_types::RequirementSource;
use crate::{DependencyMode, Manifest, ResolverEnvironment};

View file

@ -18,6 +18,7 @@ workspace = true
[dependencies]
uv-cache = { workspace = true }
uv-dirs = { workspace = true }
uv-distribution-types = { workspace = true }
uv-fs = { workspace = true }
uv-install-wheel = { workspace = true }
uv-installer = { workspace = true }

View file

@ -2,13 +2,11 @@ use std::fmt::{self, Display, Formatter};
use std::path::PathBuf;
use serde::Deserialize;
use toml_edit::value;
use toml_edit::Table;
use toml_edit::Value;
use toml_edit::{Array, Item};
use toml_edit::{value, Array, Item, Table, Value};
use uv_distribution_types::Requirement;
use uv_fs::{PortablePath, Simplified};
use uv_pypi_types::{Requirement, VerbatimParsedUrl};
use uv_pypi_types::VerbatimParsedUrl;
use uv_settings::ToolOptions;
/// A tool entry.

View file

@ -6,14 +6,12 @@ use url::Url;
use uv_configuration::HashCheckingMode;
use uv_distribution_types::{
DistributionMetadata, HashGeneration, HashPolicy, Name, Resolution, UnresolvedRequirement,
VersionId,
DistributionMetadata, HashGeneration, HashPolicy, Name, Requirement, RequirementSource,
Resolution, UnresolvedRequirement, VersionId,
};
use uv_normalize::PackageName;
use uv_pep440::Version;
use uv_pypi_types::{
HashDigest, HashDigests, HashError, Requirement, RequirementSource, ResolverMarkerEnvironment,
};
use uv_pypi_types::{HashDigest, HashDigests, HashError, ResolverMarkerEnvironment};
#[derive(Debug, Default, Clone)]
pub enum HashStrategy {

View file

@ -1,5 +1,5 @@
use uv_distribution_types::Requirement;
use uv_normalize::ExtraName;
use uv_pypi_types::Requirement;
/// A set of requirements as requested by a parent requirement.
///

View file

@ -11,11 +11,10 @@ use uv_configuration::{BuildKind, BuildOptions, BuildOutput, ConfigSettings, Sou
use uv_distribution_filename::DistFilename;
use uv_distribution_types::{
CachedDist, DependencyMetadata, DistributionId, IndexCapabilities, IndexLocations,
InstalledDist, IsBuildBackendError, Resolution, SourceDist,
InstalledDist, IsBuildBackendError, Requirement, Resolution, SourceDist,
};
use uv_git::GitResolver;
use uv_pep508::PackageName;
use uv_pypi_types::Requirement;
use uv_python::{Interpreter, PythonEnvironment};
use uv_workspace::WorkspaceCache;

View file

@ -19,7 +19,7 @@ use serde::{de::IntoDeserializer, de::SeqAccess, Deserialize, Deserializer, Seri
use thiserror::Error;
use url::Url;
use uv_distribution_types::{Index, IndexName};
use uv_distribution_types::{Index, IndexName, RequirementSource};
use uv_fs::{relative_to, PortablePathBuf};
use uv_git_types::GitReference;
use uv_macros::OptionsMetadata;
@ -27,8 +27,7 @@ use uv_normalize::{DefaultGroups, ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers};
use uv_pep508::MarkerTree;
use uv_pypi_types::{
Conflicts, DependencyGroups, RequirementSource, SchemaConflicts, SupportedEnvironments,
VerbatimParsedUrl,
Conflicts, DependencyGroups, SchemaConflicts, SupportedEnvironments, VerbatimParsedUrl,
};
#[derive(Error, Debug)]

View file

@ -8,14 +8,12 @@ use glob::{glob, GlobError, PatternError};
use rustc_hash::{FxHashMap, FxHashSet};
use tracing::{debug, trace, warn};
use uv_distribution_types::Index;
use uv_distribution_types::{Index, Requirement, RequirementSource};
use uv_fs::{Simplified, CWD};
use uv_normalize::{GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep440::VersionSpecifiers;
use uv_pep508::{MarkerTree, VerbatimUrl};
use uv_pypi_types::{
Conflicts, Requirement, RequirementSource, SupportedEnvironments, VerbatimParsedUrl,
};
use uv_pypi_types::{Conflicts, SupportedEnvironments, VerbatimParsedUrl};
use uv_static::EnvVars;
use uv_warnings::warn_user_once;

View file

@ -20,12 +20,12 @@ use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution_types::{
DependencyMetadata, HashGeneration, Index, IndexLocations, NameRequirementSpecification,
Origin, UnresolvedRequirementSpecification, Verbatim,
Origin, Requirement, UnresolvedRequirementSpecification, Verbatim,
};
use uv_fs::Simplified;
use uv_install_wheel::LinkMode;
use uv_normalize::{GroupName, PackageName};
use uv_pypi_types::{Conflicts, Requirement, SupportedEnvironments};
use uv_pypi_types::{Conflicts, SupportedEnvironments};
use uv_python::{
EnvironmentPreference, PythonEnvironment, PythonInstallation, PythonPreference, PythonRequest,
PythonVersion, VersionRequest,

View file

@ -16,15 +16,15 @@ use uv_configuration::{
use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution_types::{
DependencyMetadata, Index, IndexLocations, NameRequirementSpecification, Origin, Resolution,
UnresolvedRequirementSpecification,
DependencyMetadata, Index, IndexLocations, NameRequirementSpecification, Origin, Requirement,
Resolution, UnresolvedRequirementSpecification,
};
use uv_fs::Simplified;
use uv_install_wheel::LinkMode;
use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::GroupName;
use uv_pep508::PackageName;
use uv_pypi_types::{Conflicts, Requirement};
use uv_pypi_types::Conflicts;
use uv_python::{
EnvironmentPreference, Prefix, PythonEnvironment, PythonInstallation, PythonPreference,
PythonRequest, PythonVersion, Target,

View file

@ -8,10 +8,10 @@ use tracing::debug;
use uv_cache::Cache;
use uv_client::BaseClientBuilder;
use uv_configuration::{DryRun, KeyringProviderType};
use uv_distribution_types::Requirement;
use uv_distribution_types::{InstalledMetadata, Name, UnresolvedRequirement};
use uv_fs::Simplified;
use uv_pep508::UnnamedRequirement;
use uv_pypi_types::Requirement;
use uv_pypi_types::VerbatimParsedUrl;
use uv_python::EnvironmentPreference;
use uv_python::PythonRequest;

View file

@ -23,14 +23,15 @@ use uv_configuration::{
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
use uv_distribution_types::{
Index, IndexName, IndexUrls, NameRequirementSpecification, UnresolvedRequirement, VersionId,
redact_credentials, Index, IndexName, IndexUrls, NameRequirementSpecification, Requirement,
RequirementSource, UnresolvedRequirement, VersionId,
};
use uv_fs::Simplified;
use uv_git::GIT_STORE;
use uv_git_types::GitReference;
use uv_normalize::{DefaultGroups, PackageName, DEV_DEPENDENCIES};
use uv_pep508::{ExtraName, MarkerTree, Requirement, UnnamedRequirement, VersionOrUrl};
use uv_pypi_types::{redact_credentials, ParsedUrl, RequirementSource, VerbatimParsedUrl};
use uv_pep508::{ExtraName, MarkerTree, UnnamedRequirement, VersionOrUrl};
use uv_pypi_types::{ParsedUrl, VerbatimParsedUrl};
use uv_python::{Interpreter, PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest};
use uv_requirements::{NamedRequirementsResolver, RequirementsSource, RequirementsSpecification};
use uv_resolver::FlatIndex;
@ -928,7 +929,7 @@ fn augment_requirement(
) -> UnresolvedRequirement {
match requirement {
UnresolvedRequirement::Named(mut requirement) => {
UnresolvedRequirement::Named(uv_pypi_types::Requirement {
UnresolvedRequirement::Named(Requirement {
marker: marker
.map(|marker| {
requirement.marker.and(marker);
@ -996,7 +997,7 @@ fn augment_requirement(
/// Resolves the source for a requirement and processes it into a PEP 508 compliant format.
fn resolve_requirement(
requirement: uv_pypi_types::Requirement,
requirement: Requirement,
workspace: bool,
editable: Option<bool>,
index: Option<IndexName>,
@ -1004,7 +1005,7 @@ fn resolve_requirement(
tag: Option<String>,
branch: Option<String>,
root: &Path,
) -> Result<(Requirement, Option<Source>), anyhow::Error> {
) -> Result<(uv_pep508::Requirement, Option<Source>), anyhow::Error> {
let result = Source::from_requirement(
&requirement.name,
requirement.source.clone(),
@ -1197,7 +1198,7 @@ impl AddTargetSnapshot {
#[derive(Debug, Clone)]
struct DependencyEdit {
dependency_type: DependencyType,
requirement: Requirement,
requirement: uv_pep508::Requirement,
source: Option<Source>,
edit: ArrayEdit,
}

View file

@ -19,12 +19,12 @@ use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
use uv_distribution_types::{
DependencyMetadata, HashGeneration, Index, IndexLocations, NameRequirementSpecification,
UnresolvedRequirementSpecification,
Requirement, UnresolvedRequirementSpecification,
};
use uv_git::ResolvedRepositoryReference;
use uv_normalize::{GroupName, PackageName};
use uv_pep440::Version;
use uv_pypi_types::{Conflicts, Requirement, SupportedEnvironments};
use uv_pypi_types::{Conflicts, SupportedEnvironments};
use uv_python::{Interpreter, PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest};
use uv_requirements::upgrade::{read_lock_requirements, LockedRequirements};
use uv_requirements::ExtrasResolver;

View file

@ -5,10 +5,10 @@ use itertools::Either;
use uv_configuration::SourceStrategy;
use uv_distribution::LoweredRequirement;
use uv_distribution_types::{Index, IndexLocations};
use uv_distribution_types::{Index, IndexLocations, Requirement};
use uv_normalize::{GroupName, PackageName};
use uv_pep508::RequirementOrigin;
use uv_pypi_types::{Conflicts, Requirement, SupportedEnvironments, VerbatimParsedUrl};
use uv_pypi_types::{Conflicts, SupportedEnvironments, VerbatimParsedUrl};
use uv_resolver::{Lock, LockVersion, RequiresPython, VERSION};
use uv_scripts::Pep723Script;
use uv_workspace::dependency_groups::DependencyGroupError;

View file

@ -19,7 +19,7 @@ use uv_configuration::{
use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution::{DistributionDatabase, LoweredRequirement};
use uv_distribution_types::{
Index, Resolution, UnresolvedRequirement, UnresolvedRequirementSpecification,
Index, Requirement, Resolution, UnresolvedRequirement, UnresolvedRequirementSpecification,
};
use uv_fs::{LockedFile, Simplified, CWD};
use uv_git::ResolvedRepositoryReference;
@ -27,7 +27,7 @@ use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::{DefaultGroups, ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep440::{Version, VersionSpecifiers};
use uv_pep508::MarkerTreeContents;
use uv_pypi_types::{ConflictPackage, ConflictSet, Conflicts, Requirement};
use uv_pypi_types::{ConflictPackage, ConflictSet, Conflicts};
use uv_python::{
EnvironmentPreference, Interpreter, InvalidEnvironmentKind, PythonDownloads, PythonEnvironment,
PythonInstallation, PythonPreference, PythonRequest, PythonVariant, PythonVersionFile,

View file

@ -7,6 +7,7 @@ use std::{collections::BTreeSet, ffi::OsString};
use tracing::{debug, warn};
use uv_cache::Cache;
use uv_client::BaseClientBuilder;
use uv_distribution_types::Requirement;
use uv_distribution_types::{InstalledDist, Name};
#[cfg(unix)]
use uv_fs::replace_symlink;
@ -14,7 +15,6 @@ use uv_fs::Simplified;
use uv_installer::SitePackages;
use uv_pep440::{Version, VersionSpecifier, VersionSpecifiers};
use uv_pep508::PackageName;
use uv_pypi_types::Requirement;
use uv_python::{
EnvironmentPreference, Interpreter, PythonDownloads, PythonEnvironment, PythonInstallation,
PythonPreference, PythonRequest, PythonVariant, VersionRequest,

View file

@ -10,11 +10,13 @@ use uv_cache::{Cache, Refresh};
use uv_cache_info::Timestamp;
use uv_client::BaseClientBuilder;
use uv_configuration::{Concurrency, DryRun, PreviewMode, Reinstall, Upgrade};
use uv_distribution_types::{NameRequirementSpecification, UnresolvedRequirementSpecification};
use uv_distribution_types::{
NameRequirementSpecification, Requirement, RequirementSource,
UnresolvedRequirementSpecification,
};
use uv_normalize::PackageName;
use uv_pep440::{VersionSpecifier, VersionSpecifiers};
use uv_pep508::MarkerTree;
use uv_pypi_types::{Requirement, RequirementSource};
use uv_python::{
EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest,
};

View file

@ -19,15 +19,14 @@ use uv_cli::ExternalCommand;
use uv_client::BaseClientBuilder;
use uv_configuration::{Concurrency, PreviewMode};
use uv_distribution_types::{
IndexUrl, Name, NameRequirementSpecification, UnresolvedRequirement,
UnresolvedRequirementSpecification,
IndexUrl, Name, NameRequirementSpecification, Requirement, RequirementSource,
UnresolvedRequirement, UnresolvedRequirementSpecification,
};
use uv_fs::Simplified;
use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::PackageName;
use uv_pep440::{VersionSpecifier, VersionSpecifiers};
use uv_pep508::MarkerTree;
use uv_pypi_types::{Requirement, RequirementSource};
use uv_python::VersionRequest;
use uv_python::{
EnvironmentPreference, PythonDownloads, PythonEnvironment, PythonInstallation,

View file

@ -8,9 +8,9 @@ use tracing::debug;
use uv_cache::Cache;
use uv_client::BaseClientBuilder;
use uv_configuration::{Concurrency, DryRun, PreviewMode};
use uv_distribution_types::Requirement;
use uv_fs::CWD;
use uv_normalize::PackageName;
use uv_pypi_types::Requirement;
use uv_python::{
EnvironmentPreference, Interpreter, PythonDownloads, PythonInstallation, PythonPreference,
PythonRequest,

View file

@ -17,10 +17,10 @@ use uv_configuration::{
NoBinary, NoBuild, PreviewMode, SourceStrategy,
};
use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution_types::Requirement;
use uv_distribution_types::{DependencyMetadata, Index, IndexLocations};
use uv_fs::Simplified;
use uv_install_wheel::LinkMode;
use uv_pypi_types::Requirement;
use uv_python::{
EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest,
};

View file

@ -28,11 +28,11 @@ use uv_configuration::{
RequiredVersion, SourceStrategy, TargetTriple, TrustedHost, TrustedPublishing, Upgrade,
VersionControlSystem,
};
use uv_distribution_types::{DependencyMetadata, Index, IndexLocations, IndexUrl};
use uv_distribution_types::{DependencyMetadata, Index, IndexLocations, IndexUrl, Requirement};
use uv_install_wheel::LinkMode;
use uv_normalize::{PackageName, PipGroupName};
use uv_pep508::{ExtraName, MarkerTree, RequirementOrigin};
use uv_pypi_types::{Requirement, SupportedEnvironments};
use uv_pypi_types::SupportedEnvironments;
use uv_python::{Prefix, PythonDownloads, PythonPreference, PythonVersion, Target};
use uv_resolver::{
AnnotationStyle, DependencyMode, ExcludeNewer, ForkStrategy, PrereleaseMode, ResolutionMode,