From ba727863d135d77d94856e0a6906215544fd381b Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 16 Sep 2025 15:18:47 +0200 Subject: [PATCH] Remove dynamic providers --- .../src/distribution_database.rs | 27 ++--------- crates/uv-types/src/traits.rs | 6 +-- crates/uv-variant-frontend/src/lib.rs | 45 ++---------------- .../cpu_level_provider-0.1.0-py3-none-any.whl | Bin 2713 -> 2660 bytes files/cpu_level_provider-0.1.0.tar.gz | Bin 1577 -> 1520 bytes .../src/cpu_level_provider/__init__.py | 5 +- 6 files changed, 10 insertions(+), 73 deletions(-) diff --git a/crates/uv-distribution/src/distribution_database.rs b/crates/uv-distribution/src/distribution_database.rs index c4c8346dd..0393e37c6 100644 --- a/crates/uv-distribution/src/distribution_database.rs +++ b/crates/uv-distribution/src/distribution_database.rs @@ -1,4 +1,3 @@ -use std::collections::BTreeSet; use std::future::Future; use std::io; use std::path::Path; @@ -35,7 +34,7 @@ use uv_redacted::DisplaySafeUrl; use uv_types::{BuildContext, BuildStack, VariantsTrait}; use uv_variants::VariantProviderOutput; use uv_variants::resolved_variants::ResolvedVariants; -use uv_variants::variants_json::{Provider, VariantPropertyType, VariantsJsonContent}; +use uv_variants::variants_json::{Provider, VariantsJsonContent}; use crate::archive::Archive; use crate::metadata::{ArchiveMetadata, Metadata}; @@ -594,25 +593,6 @@ impl<'a, Context: BuildContext> DistributionDatabase<'a, Context> { variants_json: VariantsJsonContent, marker_env: &MarkerEnvironment, ) -> Result { - // Collect all known properties for dynamic providers. - // TODO(konsti): We shouldn't need to do this conversion. - let mut known_properties = BTreeSet::default(); - for variant in variants_json.variants.values() { - for (namespace, features) in &**variant { - for (feature, value) in features { - for value in value { - // TODO(charlie): At minimum, we can probably avoid these clones. - known_properties.insert(VariantPropertyType { - namespace: namespace.clone(), - feature: feature.clone(), - value: value.clone(), - }); - } - } - } - } - let known_properties: Vec<_> = known_properties.into_iter().collect(); - // Compute the set of available variants. let provider_outputs: FxHashMap> = futures::stream::iter(variants_json.providers.iter().filter(|(_, provider)| { @@ -620,7 +600,7 @@ impl<'a, Context: BuildContext> DistributionDatabase<'a, Context> { .enable_if .evaluate(marker_env, MarkerVariantsUniversal, &[]) })) - .map(|(name, provider)| self.query_variant_provider(name, provider, &known_properties)) + .map(|(name, provider)| self.query_variant_provider(name, provider)) // TODO(konsti): Buffer size .buffered(8) .map_ok(|config| (config.namespace.clone(), config)) @@ -637,7 +617,6 @@ impl<'a, Context: BuildContext> DistributionDatabase<'a, Context> { &self, name: &VariantNamespace, provider: &Provider, - known_properties: &[VariantPropertyType], ) -> Result, Error> { let config = if self.build_context.variants().register(provider.clone()) { debug!("Querying provider `{name}` for variants"); @@ -648,7 +627,7 @@ impl<'a, Context: BuildContext> DistributionDatabase<'a, Context> { .build_context .setup_variants(backend_name, provider, BuildOutput::Debug) .await?; - let config = builder.query(known_properties).await?; + let config = builder.query().await?; trace!( "Found namespace {} with configs {:?}", config.namespace, config diff --git a/crates/uv-types/src/traits.rs b/crates/uv-types/src/traits.rs index 47844c132..9f7eac724 100644 --- a/crates/uv-types/src/traits.rs +++ b/crates/uv-types/src/traits.rs @@ -18,7 +18,6 @@ use uv_normalize::PackageName; use uv_python::{Interpreter, PythonEnvironment}; use uv_variants::VariantProviderOutput; use uv_variants::cache::VariantProviderCache; -use uv_variants::variants_json::VariantPropertyType; use uv_workspace::WorkspaceCache; use crate::{BuildArena, BuildIsolation}; @@ -204,10 +203,7 @@ pub trait SourceBuildTrait { } pub trait VariantsTrait { - fn query( - &self, - known_properties: &[VariantPropertyType], - ) -> impl Future>; + fn query(&self) -> impl Future>; } /// A wrapper for [`uv_installer::SitePackages`] diff --git a/crates/uv-variant-frontend/src/lib.rs b/crates/uv-variant-frontend/src/lib.rs index 5001ac458..0b2b2b00f 100644 --- a/crates/uv-variant-frontend/src/lib.rs +++ b/crates/uv-variant-frontend/src/lib.rs @@ -27,7 +27,7 @@ use uv_python::{Interpreter, PythonEnvironment}; use uv_static::EnvVars; use uv_types::{BuildContext, BuildStack, VariantsTrait}; use uv_variants::VariantProviderOutput; -use uv_variants::variants_json::{Provider, VariantPropertyType}; +use uv_variants::variants_json::Provider; use uv_virtualenv::OnExisting; pub struct VariantBuild { @@ -50,11 +50,8 @@ pub struct VariantBuild { } impl VariantsTrait for VariantBuild { - async fn query( - &self, - known_properties: &[VariantPropertyType], - ) -> anyhow::Result { - Ok(self.build(known_properties).await?) + async fn query(&self) -> anyhow::Result { + Ok(self.build().await?) } } @@ -151,15 +148,9 @@ impl VariantBuild { } /// Run a variant provider to infer compatible variants. - pub async fn build( - &self, - known_properties: &[VariantPropertyType], - ) -> Result { + pub async fn build(&self) -> Result { // Write the hook output to a file so that we can read it back reliably. let out_file = self.temp_dir.path().join("output.json"); - let in_file = self.temp_dir.path().join("input.json"); - let in_writer = fs_err::File::create(&in_file)?; - serde_json::to_writer(in_writer, known_properties)?; // Construct the appropriate build script based on the build kind. let script = formatdoc! { @@ -168,32 +159,7 @@ impl VariantBuild { import json - if backend.dynamic: - class VariantPropertyType: - namespace: str - feature: str - value: str - - def __init__(self, namespace: str, feature: str, value: str): - self.namespace = namespace - self.feature = feature - self.value = value - - with open("{in_file}") as fp: - known_properties = json.load(fp) - - # Filter to the namespace of the plugin. - filtered_properties = [] - for known_property in known_properties: - # We don't know the namespace ahead of time, so the frontend passes all properties. - if known_property["namespace"] != backend.namespace: - continue - filtered_properties.append(VariantPropertyType(**known_property)) - known_properties = frozenset(filtered_properties) - else: - known_properties = None - - configs = backend.get_supported_configs(known_properties) + configs = backend.get_supported_configs() features = {{config.name: config.values for config in configs}} output = {{"namespace": backend.namespace, "features": features}} @@ -201,7 +167,6 @@ impl VariantBuild { fp.write(json.dumps(output)) "#, backend = self.backend.import(&self.backend_name), - in_file = in_file.escape_for_python(), out_file = out_file.escape_for_python() }; diff --git a/files/cpu_level_provider-0.1.0-py3-none-any.whl b/files/cpu_level_provider-0.1.0-py3-none-any.whl index a7726639c97def8a804a41ce4f067f1b5e58adc2..6d1908b15598e2ec966faefb394cd152216a83e7 100644 GIT binary patch delta 1449 zcmV;a1y=f*7336TzX%L}l~rAD+cp$^*RQx>A0`2g zJAX7N45(OQX?tFMwb6RP}G+bx7+j}k(cDT=Nw*AT&o-? z<)tk(QVJq3l(xX6RF+wxqzQs1rcB!^GG@8bdD}O86L1HVGRu;T8H1)p>Ow&vS&pV) z2`<1`4Ka{^q$p{I6=ozz_mbrzS-@JU3}U!onZY0ke(M41H>{WzOxg=%j`Eq3Tx`DX z3tR*M04_%jU-v4Om1q`_31jb#)ek=byw<8fZTJ5ND@6_)wA7S^6N@QLYCa|mA~^Zv z=l+QBgU=#3s0y_fDZ(NKWyTw{D65d%t?1eH9lczCu9lbdYPGz%`EtG_kzeK>tM`4! zJxQrGO6xs^7=*N83m$bdahG6WVdVrZwO0BNL^EM$%rwRylj3aNeLSV7a~}#LP#Pw!g@@CHfj^ZTplP(FmT>6OrvPi`mS?|~>n$W5KzfZZZ&#b%4f_QJqJKrRxkm`=9BV&dpE+Z9%m5meI= zRI`yYvYJO@@6Fe%^Q-VtNn=H{fEz3_mLNQT3A+WU#rB!&@4 zWu1LtBbkk!Pjb1lnk5!^#x@3j zG9j@WtV7g=Aojw#5vA*?&Xop!Y>G@+7c}9(mPVF~kBw#88YdtmHTKZIqe&0ww9i^2 zd+a3$Uhhx8?$z1%`!eYlc%?BIv|+!>^ADr@>Ea=B#@s%N0vevcWC~f49O)ZZ-CoOS~- zJQG&!K1`2|G~c?@?2_$fa=IpBqduCk zEvH#N3>B(Kq#Z_#!P#N|O#tU~@+LBEBE9II+`o#RwxZ9Gvof<_6;u-l*UVsjko>jf zRrlwizMFFTE1j31@ z8k5fiS^_fSvnvIz0R^WCCeAC9-Uc;)&An<>zt5VTnQpUt|OaEv8wtL#W z?XImcL$>OMR%@i5hcgaT8={#YsU=TYJ;c2lN3k?yp!BfX0i@Ll@uv56|Lf)TX`1eS zlQIZh3eo?JW!nP)0D%dUnFw40NCcB`1tpUl2@nLriKiNqFbNg{i3F2y1tpVh2`>U5 z1(R?EHIvf`DgvnmlW+wklO6^LlPn4l1*Zun&MT8a3KasE29t0FC6j#$76u6j00000 DY$vdT delta 1517 zcmV4~js92FW zLxFS&lExTd7%VMc+C(H$BPqpRmj6Cblq~t9-NuKAyd=*(=kkya*D3=_d0`8Ul!C}| zr7bWim1R~aX@a1RDbw`wlv%EH){M>01l$3wm}N=Ij6u^N?L$EzS%xNO2~NOR4Ka{^ zBrj-+C8i`;?Ig=YGJ&O1Da3HYQiDMd{MrIke__V7VA9?obCj=?fiwdGl=7fEvuEZkN&Zf8YZZ>^*_M5LXe&E$Uq<7uat7~nt&;aiUI@t*C<(Vh7TYGf*_nQS!vNwKNa|)u zo2R0!a+D!CKysusiGUg4M^~s$6$9^UWUDap1U<>=)@qhm;3-=hNQK1xWEG+=1hE&k zpHaG6>Z(%1_f4J(>w+fil%-C$?mN2s z{#*v_2Cp;*gEnk;dH!L4G#^eDkt@vOv&f<52~4hlOh|C%TEBxEr9s&Z>b-YN4_*)w zCV#Sk%!qUcD|B|82Xo`9MklI7cEvmRV7Nw1BjY{O}qbwjzz6KT5< zV{mjhJ_+EM4o)J&I?{@6$^EP7VI%q)IV(~NRzW#{aLEi-7s)?cUUhpPs<$~~LN@m` z*Y4N#{68nopHUPR1cBf{srwnAw0fT?br6)+Pn5?C{sE90lVSul1Rp7_?30@WS^~7> zv-bq90R{PMm5D5qss=TG(7|dOK@0%Ud%k6}8I3d=%^?TV7kcI zlD{uK_>_yk;KA#szstLS`1^7?A3xUN=Z9rk59_up^XY54{Lx(aF^ya>cwiRv0m@B@ zEl`{CM71OTlio5*WJ_Zb$4ZrIib~V z*=il&7@c!uwGc%irUo5Q`;gwN@hAo%k;R8qPf1#xa=yuZ+5hUv1(Q4lHItqRDgxaFlRO0_lkW)_9QkXNi7WvC00RO504V?f00000000000GNQw T29rDmC6h=B76v{D00000%X7N0 diff --git a/files/cpu_level_provider-0.1.0.tar.gz b/files/cpu_level_provider-0.1.0.tar.gz index beed6644e121b47a5fa5a6c223a0f869e3413130..933ff802f07c0e06659ab0d29d68069312ca1b16 100644 GIT binary patch literal 1520 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 bZ{S~wXL_b*dZuSO`o#1nnHaC103rYY-D4<& diff --git a/scripts/packages/cpu_level_provider/src/cpu_level_provider/__init__.py b/scripts/packages/cpu_level_provider/src/cpu_level_provider/__init__.py index 12b35c986..55168196f 100644 --- a/scripts/packages/cpu_level_provider/src/cpu_level_provider/__init__.py +++ b/scripts/packages/cpu_level_provider/src/cpu_level_provider/__init__.py @@ -22,10 +22,7 @@ class VariantPropertyType: def get_supported_configs( - known_properties: frozenset[VariantPropertyType] | None, ) -> list[VariantFeatureConfigType]: - if known_properties is not None: - raise ValueError("known_properties are unsupported") if override := os.getenv("UV_CPU_LEVEL_OVERRIDE"): try: current_level = int(override) @@ -98,7 +95,7 @@ def get_x86_64_level() -> int | None: def main(): - print(get_supported_configs(None)) + print(get_supported_configs()) if __name__ == "__main__":