Move extra specification into uv-configuration (#3897)

## Summary

I need to use this in the resolver (and it's at-home with other, similar
configuration options).
This commit is contained in:
Charlie Marsh 2024-05-29 00:49:57 -04:00 committed by GitHub
parent 2b6c24ed2d
commit 3461c8b585
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 69 additions and 70 deletions

View file

@ -0,0 +1,35 @@
use uv_normalize::ExtraName;
#[derive(Debug, Default, Clone)]
pub enum ExtrasSpecification {
#[default]
None,
All,
Some(Vec<ExtraName>),
}
impl ExtrasSpecification {
/// Determine the extras specification to use based on the command-line arguments.
pub fn from_args(all_extras: bool, extra: Vec<ExtraName>) -> Self {
if all_extras {
ExtrasSpecification::All
} else if extra.is_empty() {
ExtrasSpecification::None
} else {
ExtrasSpecification::Some(extra)
}
}
/// Returns true if a name is included in the extra specification.
pub fn contains(&self, name: &ExtraName) -> bool {
match self {
ExtrasSpecification::All => true,
ExtrasSpecification::None => false,
ExtrasSpecification::Some(extras) => extras.contains(name),
}
}
pub fn is_empty(&self) -> bool {
matches!(self, ExtrasSpecification::None)
}
}

View file

@ -3,6 +3,7 @@ pub use build_options::*;
pub use concurrency::*; pub use concurrency::*;
pub use config_settings::*; pub use config_settings::*;
pub use constraints::*; pub use constraints::*;
pub use extras::*;
pub use name_specifiers::*; pub use name_specifiers::*;
pub use overrides::*; pub use overrides::*;
pub use package_options::*; pub use package_options::*;
@ -14,6 +15,7 @@ mod build_options;
mod concurrency; mod concurrency;
mod config_settings; mod config_settings;
mod constraints; mod constraints;
mod extras;
mod name_specifiers; mod name_specifiers;
mod overrides; mod overrides;
mod package_options; mod package_options;

View file

@ -24,13 +24,13 @@ use distribution_types::{Requirement, RequirementSource, Requirements};
use pep440_rs::VersionSpecifiers; use pep440_rs::VersionSpecifiers;
use pep508_rs::{Pep508Error, RequirementOrigin, VerbatimUrl, VersionOrUrl}; use pep508_rs::{Pep508Error, RequirementOrigin, VerbatimUrl, VersionOrUrl};
use pypi_types::VerbatimParsedUrl; use pypi_types::VerbatimParsedUrl;
use uv_configuration::PreviewMode; use uv_configuration::{ExtrasSpecification, PreviewMode};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_git::GitReference; use uv_git::GitReference;
use uv_normalize::{ExtraName, PackageName}; use uv_normalize::{ExtraName, PackageName};
use uv_warnings::warn_user_once; use uv_warnings::warn_user_once;
use crate::{ExtrasSpecification, Workspace}; use crate::Workspace;
#[derive(Debug, Error)] #[derive(Debug, Error)]
pub enum Pep621Error { pub enum Pep621Error {
@ -683,12 +683,12 @@ mod test {
use indoc::indoc; use indoc::indoc;
use insta::assert_snapshot; use insta::assert_snapshot;
use uv_configuration::PreviewMode; use uv_configuration::{ExtrasSpecification, PreviewMode};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_normalize::PackageName; use uv_normalize::PackageName;
use crate::ProjectWorkspace; use crate::ProjectWorkspace;
use crate::{ExtrasSpecification, RequirementsSpecification}; use crate::RequirementsSpecification;
fn from_source( fn from_source(
contents: &str, contents: &str,

View file

@ -12,13 +12,12 @@ use distribution_types::{
}; };
use pep508_rs::RequirementOrigin; use pep508_rs::RequirementOrigin;
use pypi_types::VerbatimParsedUrl; use pypi_types::VerbatimParsedUrl;
use uv_configuration::ExtrasSpecification;
use uv_distribution::{DistributionDatabase, Reporter}; use uv_distribution::{DistributionDatabase, Reporter};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_resolver::{InMemoryIndex, MetadataResponse}; use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy}; use uv_types::{BuildContext, HashStrategy};
use crate::ExtrasSpecification;
/// A resolver for requirements specified via source trees. /// A resolver for requirements specified via source trees.
/// ///
/// Used, e.g., to determine the input requirements when a user specifies a `pyproject.toml` /// Used, e.g., to determine the input requirements when a user specifies a `pyproject.toml`

View file

@ -3,7 +3,6 @@ use std::path::{Path, PathBuf};
use console::Term; use console::Term;
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_normalize::ExtraName;
use uv_warnings::warn_user; use uv_warnings::warn_user;
use crate::confirm; use crate::confirm;
@ -154,37 +153,3 @@ impl std::fmt::Display for RequirementsSource {
} }
} }
} }
#[derive(Debug, Default, Clone)]
pub enum ExtrasSpecification {
#[default]
None,
All,
Some(Vec<ExtraName>),
}
impl ExtrasSpecification {
/// Determine the extras specification to use based on the command-line arguments.
pub fn from_args(all_extras: bool, extra: Vec<ExtraName>) -> Self {
if all_extras {
ExtrasSpecification::All
} else if extra.is_empty() {
ExtrasSpecification::None
} else {
ExtrasSpecification::Some(extra)
}
}
/// Returns true if a name is included in the extra specification.
pub fn contains(&self, name: &ExtraName) -> bool {
match self {
ExtrasSpecification::All => true,
ExtrasSpecification::None => false,
ExtrasSpecification::Some(extras) => extras.contains(name),
}
}
pub fn is_empty(&self) -> bool {
matches!(self, ExtrasSpecification::None)
}
}

View file

@ -47,13 +47,13 @@ use requirements_txt::{
EditableRequirement, FindLink, RequirementEntry, RequirementsTxt, RequirementsTxtRequirement, EditableRequirement, FindLink, RequirementEntry, RequirementsTxt, RequirementsTxtRequirement,
}; };
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{NoBinary, NoBuild, PreviewMode}; use uv_configuration::{ExtrasSpecification, NoBinary, NoBuild, PreviewMode};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_normalize::{ExtraName, PackageName}; use uv_normalize::{ExtraName, PackageName};
use crate::pyproject::{Pep621Metadata, PyProjectToml}; use crate::pyproject::{Pep621Metadata, PyProjectToml};
use crate::ProjectWorkspace; use crate::ProjectWorkspace;
use crate::{ExtrasSpecification, RequirementsSource, Workspace, WorkspaceError}; use crate::{RequirementsSource, Workspace, WorkspaceError};
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct RequirementsSpecification { pub struct RequirementsSpecification {

View file

@ -20,8 +20,8 @@ use uv_auth::store_credentials_from_url;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder}; use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{ use uv_configuration::{
Concurrency, ConfigSettings, Constraints, IndexStrategy, NoBinary, NoBuild, Overrides, Concurrency, ConfigSettings, Constraints, ExtrasSpecification, IndexStrategy, NoBinary,
PreviewMode, SetupPyStrategy, Upgrade, NoBuild, Overrides, PreviewMode, SetupPyStrategy, Upgrade,
}; };
use uv_configuration::{KeyringProviderType, TargetTriple}; use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
@ -34,8 +34,8 @@ use uv_interpreter::{
use uv_interpreter::{PythonVersion, SourceSelector}; use uv_interpreter::{PythonVersion, SourceSelector};
use uv_normalize::{ExtraName, PackageName}; use uv_normalize::{ExtraName, PackageName};
use uv_requirements::{ use uv_requirements::{
upgrade::read_lockfile, ExtrasSpecification, LookaheadResolver, NamedRequirementsResolver, upgrade::read_lockfile, LookaheadResolver, NamedRequirementsResolver, RequirementsSource,
RequirementsSource, RequirementsSpecification, SourceTreeResolver, RequirementsSpecification, SourceTreeResolver,
}; };
use uv_resolver::{ use uv_resolver::{
AnnotationStyle, DependencyMode, DisplayResolutionGraph, ExcludeNewer, Exclusions, FlatIndex, AnnotationStyle, DependencyMode, DisplayResolutionGraph, ExcludeNewer, Exclusions, FlatIndex,

View file

@ -2,20 +2,20 @@ use std::borrow::Cow;
use std::fmt::Write; use std::fmt::Write;
use anstream::eprint; use anstream::eprint;
use distribution_types::{IndexLocations, Resolution};
use fs_err as fs; use fs_err as fs;
use itertools::Itertools; use itertools::Itertools;
use owo_colors::OwoColorize; use owo_colors::OwoColorize;
use tracing::{debug, enabled, Level}; use tracing::{debug, enabled, Level};
use distribution_types::{IndexLocations, Resolution};
use install_wheel_rs::linker::LinkMode; use install_wheel_rs::linker::LinkMode;
use platform_tags::Tags; use platform_tags::Tags;
use uv_auth::store_credentials_from_url; use uv_auth::store_credentials_from_url;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder}; use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{ use uv_configuration::{
Concurrency, ConfigSettings, IndexStrategy, NoBinary, NoBuild, PreviewMode, Reinstall, Concurrency, ConfigSettings, ExtrasSpecification, IndexStrategy, NoBinary, NoBuild,
SetupPyStrategy, Upgrade, PreviewMode, Reinstall, SetupPyStrategy, Upgrade,
}; };
use uv_configuration::{KeyringProviderType, TargetTriple}; use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
@ -23,7 +23,7 @@ use uv_fs::Simplified;
use uv_installer::{SatisfiesResult, SitePackages}; use uv_installer::{SatisfiesResult, SitePackages};
use uv_interpreter::{PythonEnvironment, PythonVersion, SystemPython, Target}; use uv_interpreter::{PythonEnvironment, PythonVersion, SystemPython, Target};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_requirements::{ExtrasSpecification, RequirementsSource, RequirementsSpecification}; use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_resolver::{ use uv_resolver::{
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, Lock, OptionsBuilder, PreReleaseMode, DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, Lock, OptionsBuilder, PreReleaseMode,
ResolutionMode, ResolutionMode,

View file

@ -21,7 +21,8 @@ use platform_tags::Tags;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, RegistryClient}; use uv_client::{BaseClientBuilder, RegistryClient};
use uv_configuration::{ use uv_configuration::{
Concurrency, Constraints, NoBinary, Overrides, PreviewMode, Reinstall, Upgrade, Concurrency, Constraints, ExtrasSpecification, NoBinary, Overrides, PreviewMode, Reinstall,
Upgrade,
}; };
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase; use uv_distribution::DistributionDatabase;
@ -30,8 +31,8 @@ use uv_installer::{Downloader, Plan, Planner, SitePackages};
use uv_interpreter::{Interpreter, PythonEnvironment}; use uv_interpreter::{Interpreter, PythonEnvironment};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_requirements::{ use uv_requirements::{
ExtrasSpecification, LookaheadResolver, NamedRequirementsResolver, RequirementsSource, LookaheadResolver, NamedRequirementsResolver, RequirementsSource, RequirementsSpecification,
RequirementsSpecification, SourceTreeResolver, Workspace, SourceTreeResolver, Workspace,
}; };
use uv_resolver::{ use uv_resolver::{
DependencyMode, Exclusions, FlatIndex, InMemoryIndex, Manifest, Options, Preference, DependencyMode, Exclusions, FlatIndex, InMemoryIndex, Manifest, Options, Preference,

View file

@ -13,15 +13,15 @@ use uv_auth::store_credentials_from_url;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder}; use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{ use uv_configuration::{
Concurrency, ConfigSettings, IndexStrategy, NoBinary, NoBuild, PreviewMode, Reinstall, Concurrency, ConfigSettings, ExtrasSpecification, IndexStrategy, NoBinary, NoBuild,
SetupPyStrategy, Upgrade, PreviewMode, Reinstall, SetupPyStrategy, Upgrade,
}; };
use uv_configuration::{KeyringProviderType, TargetTriple}; use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_installer::SitePackages; use uv_installer::SitePackages;
use uv_interpreter::{PythonEnvironment, PythonVersion, SystemPython, Target}; use uv_interpreter::{PythonEnvironment, PythonVersion, SystemPython, Target};
use uv_requirements::{ExtrasSpecification, RequirementsSource, RequirementsSpecification}; use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_resolver::{ use uv_resolver::{
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode, DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode,
ResolutionMode, ResolutionMode,
@ -98,7 +98,7 @@ pub(crate) async fn pip_sync(
constraints, constraints,
overrides, overrides,
None, None,
&ExtrasSpecification::default(), &extras,
&client_builder, &client_builder,
preview, preview,
) )

View file

@ -6,11 +6,11 @@ use install_wheel_rs::linker::LinkMode;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, RegistryClientBuilder}; use uv_client::{BaseClientBuilder, RegistryClientBuilder};
use uv_configuration::{ use uv_configuration::{
Concurrency, ConfigSettings, NoBinary, NoBuild, PreviewMode, Reinstall, SetupPyStrategy, Concurrency, ConfigSettings, ExtrasSpecification, NoBinary, NoBuild, PreviewMode, Reinstall,
Upgrade, SetupPyStrategy, Upgrade,
}; };
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
use uv_requirements::{ExtrasSpecification, ProjectWorkspace, RequirementsSpecification}; use uv_requirements::{ProjectWorkspace, RequirementsSpecification};
use uv_resolver::{FlatIndex, InMemoryIndex, Options}; use uv_resolver::{FlatIndex, InMemoryIndex, Options};
use uv_types::{BuildIsolation, EmptyInstalledPackages, HashStrategy, InFlight}; use uv_types::{BuildIsolation, EmptyInstalledPackages, HashStrategy, InFlight};
use uv_warnings::warn_user; use uv_warnings::warn_user;

View file

@ -5,25 +5,23 @@ use itertools::Itertools;
use owo_colors::OwoColorize; use owo_colors::OwoColorize;
use tracing::debug; use tracing::debug;
use crate::commands::pip;
use distribution_types::{IndexLocations, Resolution}; use distribution_types::{IndexLocations, Resolution};
use install_wheel_rs::linker::LinkMode; use install_wheel_rs::linker::LinkMode;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, RegistryClientBuilder}; use uv_client::{BaseClientBuilder, Connectivity, RegistryClientBuilder};
use uv_configuration::{ use uv_configuration::{
Concurrency, ConfigSettings, NoBinary, NoBuild, PreviewMode, Reinstall, SetupPyStrategy, Concurrency, ConfigSettings, ExtrasSpecification, NoBinary, NoBuild, PreviewMode, Reinstall,
Upgrade, SetupPyStrategy, Upgrade,
}; };
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_installer::{SatisfiesResult, SitePackages}; use uv_installer::{SatisfiesResult, SitePackages};
use uv_interpreter::{find_default_interpreter, PythonEnvironment}; use uv_interpreter::{find_default_interpreter, PythonEnvironment};
use uv_requirements::{ use uv_requirements::{ProjectWorkspace, RequirementsSource, RequirementsSpecification, Workspace};
ExtrasSpecification, ProjectWorkspace, RequirementsSource, RequirementsSpecification, Workspace,
};
use uv_resolver::{FlatIndex, InMemoryIndex, Options}; use uv_resolver::{FlatIndex, InMemoryIndex, Options};
use uv_types::{BuildIsolation, HashStrategy, InFlight}; use uv_types::{BuildIsolation, HashStrategy, InFlight};
use crate::commands::pip;
use crate::printer::Printer; use crate::printer::Printer;
pub(crate) mod lock; pub(crate) mod lock;

View file

@ -10,12 +10,11 @@ use install_wheel_rs::linker::LinkMode;
use uv_cache::{CacheArgs, Refresh}; use uv_cache::{CacheArgs, Refresh};
use uv_client::Connectivity; use uv_client::Connectivity;
use uv_configuration::{ use uv_configuration::{
Concurrency, ConfigSettings, IndexStrategy, KeyringProviderType, NoBinary, NoBuild, Concurrency, ConfigSettings, ExtrasSpecification, IndexStrategy, KeyringProviderType, NoBinary,
PreviewMode, Reinstall, SetupPyStrategy, TargetTriple, Upgrade, NoBuild, PreviewMode, Reinstall, SetupPyStrategy, TargetTriple, Upgrade,
}; };
use uv_interpreter::{PythonVersion, Target}; use uv_interpreter::{PythonVersion, Target};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_requirements::ExtrasSpecification;
use uv_resolver::{AnnotationStyle, DependencyMode, ExcludeNewer, PreReleaseMode, ResolutionMode}; use uv_resolver::{AnnotationStyle, DependencyMode, ExcludeNewer, PreReleaseMode, ResolutionMode};
use uv_workspace::{Combine, PipOptions, Workspace}; use uv_workspace::{Combine, PipOptions, Workspace};