Skip to content

Commit 8869efc

Browse files
committed
Use .with* for MiddlewareStack
1 parent dda4eb4 commit 8869efc

File tree

6 files changed

+59
-28
lines changed

6 files changed

+59
-28
lines changed

crates/uv-client/src/base_client.rs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,39 +22,38 @@ use crate::middleware::OfflineMiddleware;
2222
use crate::Connectivity;
2323

2424
/// Newtype to implement [`Debug`] on [`Middleware`].
25-
#[derive(Clone)]
25+
#[derive(Clone, Default)]
2626
pub struct MiddlewareStack(Vec<Arc<dyn Middleware>>);
2727

2828
impl MiddlewareStack {
29-
/// Use a custom middleware stack, skipping the default retry and auth layers.
29+
/// Add an arbitrary middleware layer.
3030
// This function exists for rustlib users.
31-
pub fn custom(middleware_stack: Vec<Arc<dyn Middleware>>) -> Self {
32-
Self(middleware_stack)
31+
pub fn with(mut self, middleware: impl Into<Arc<dyn Middleware>>) -> Self {
32+
self.0.push(middleware.into());
33+
self
3334
}
3435

35-
/// Initialize the middleware stack, using an [`ExponentialBackoff`] with the given number of
36-
/// retries and an [`AuthMiddleware`] layer with the given keyring provider.
37-
pub fn new(retries: u32, keyring: KeyringProviderType) -> Self {
38-
let retry_policy = ExponentialBackoff::builder().build_with_max_retries(retries);
39-
let retry_strategy = RetryTransientMiddleware::new_with_policy(retry_policy);
40-
41-
let auth_middleware = AuthMiddleware::new().with_keyring(keyring.to_provider());
42-
43-
Self(vec![Arc::new(retry_strategy), Arc::new(auth_middleware)])
36+
/// Add an [`ExponentialBackoff`] layer with the given number of retries.
37+
pub fn with_retries(mut self, retries: u32) -> Self {
38+
if retries > 0 {
39+
let retry_policy = ExponentialBackoff::builder().build_with_max_retries(retries);
40+
let retry_strategy = RetryTransientMiddleware::new_with_policy(retry_policy);
41+
self.0.push(Arc::new(retry_strategy))
42+
}
43+
self
4444
}
45-
}
4645

47-
impl Default for MiddlewareStack {
48-
/// Initialize the default middleware stack, consisting of an [`ExponentialBackoff`] retry
49-
/// strategy and an [`AuthMiddleware`] layer not using the keyring.
50-
fn default() -> Self {
51-
Self::new(3, KeyringProviderType::default())
46+
/// Add an [`AuthMiddleware`] layer with the given keyring provider.
47+
pub fn with_auth(mut self, keyring: KeyringProviderType) -> Self {
48+
let auth_middleware = AuthMiddleware::new().with_keyring(keyring.to_provider());
49+
self.0.push(Arc::new(auth_middleware));
50+
self
5251
}
5352
}
5453

5554
impl Debug for MiddlewareStack {
5655
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
57-
f.debug_struct("CustomMiddleware").finish()
56+
f.debug_struct("MiddlewareStack").finish()
5857
}
5958
}
6059

crates/uv/src/commands/pip/compile.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,11 @@ pub(crate) async fn pip_compile(
116116
let client_builder = BaseClientBuilder::new()
117117
.connectivity(connectivity)
118118
.native_tls(native_tls)
119-
.middleware_stack(MiddlewareStack::new(3, keyring_provider));
119+
.middleware_stack(
120+
MiddlewareStack::default()
121+
.with_retries(3)
122+
.with_auth(keyring_provider),
123+
);
120124

121125
// Read all requirements from the provided sources.
122126
let RequirementsSpecification {
@@ -287,7 +291,11 @@ pub(crate) async fn pip_compile(
287291
.connectivity(connectivity)
288292
.index_urls(index_locations.index_urls())
289293
.index_strategy(index_strategy)
290-
.middleware_stack(MiddlewareStack::new(3, keyring_provider))
294+
.middleware_stack(
295+
MiddlewareStack::default()
296+
.with_retries(3)
297+
.with_auth(keyring_provider),
298+
)
291299
.markers(&markers)
292300
.platform(interpreter.platform())
293301
.build();

crates/uv/src/commands/pip/install.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,11 @@ pub(crate) async fn pip_install(
8585
let client_builder = BaseClientBuilder::new()
8686
.connectivity(connectivity)
8787
.native_tls(native_tls)
88-
.middleware_stack(MiddlewareStack::new(3, keyring_provider));
88+
.middleware_stack(
89+
MiddlewareStack::default()
90+
.with_retries(3)
91+
.with_auth(keyring_provider),
92+
);
8993

9094
// Read all requirements from the provided sources.
9195
let RequirementsSpecification {
@@ -287,7 +291,11 @@ pub(crate) async fn pip_install(
287291
.connectivity(connectivity)
288292
.index_urls(index_locations.index_urls())
289293
.index_strategy(index_strategy)
290-
.middleware_stack(MiddlewareStack::new(3, keyring_provider))
294+
.middleware_stack(
295+
MiddlewareStack::default()
296+
.with_retries(3)
297+
.with_auth(keyring_provider),
298+
)
291299
.markers(&markers)
292300
.platform(interpreter.platform())
293301
.build();

crates/uv/src/commands/pip/sync.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ pub(crate) async fn pip_sync(
7272
let client_builder = BaseClientBuilder::new()
7373
.connectivity(connectivity)
7474
.native_tls(native_tls)
75-
.middleware_stack(MiddlewareStack::new(3, keyring_provider));
75+
.middleware_stack(
76+
MiddlewareStack::default()
77+
.with_retries(3)
78+
.with_auth(keyring_provider),
79+
);
7680

7781
// Initialize a few defaults.
7882
let overrides = &[];
@@ -225,7 +229,11 @@ pub(crate) async fn pip_sync(
225229
.connectivity(connectivity)
226230
.index_urls(index_locations.index_urls())
227231
.index_strategy(index_strategy)
228-
.middleware_stack(MiddlewareStack::new(3, keyring_provider))
232+
.middleware_stack(
233+
MiddlewareStack::default()
234+
.with_retries(3)
235+
.with_auth(keyring_provider),
236+
)
229237
.markers(&markers)
230238
.platform(interpreter.platform())
231239
.build();

crates/uv/src/commands/pip/uninstall.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ pub(crate) async fn pip_uninstall(
3838
let client_builder = BaseClientBuilder::new()
3939
.connectivity(connectivity)
4040
.native_tls(native_tls)
41-
.middleware_stack(MiddlewareStack::new(3, keyring_provider));
41+
.middleware_stack(
42+
MiddlewareStack::default()
43+
.with_retries(3)
44+
.with_auth(keyring_provider),
45+
);
4246

4347
// Read all requirements from the provided sources.
4448
let spec = RequirementsSpecification::from_simple_sources(sources, &client_builder).await?;

crates/uv/src/commands/venv.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,11 @@ async fn venv_impl(
174174
.native_tls(native_tls)
175175
.index_urls(index_locations.index_urls())
176176
.index_strategy(index_strategy)
177-
.middleware_stack(MiddlewareStack::new(3, keyring_provider))
177+
.middleware_stack(
178+
MiddlewareStack::default()
179+
.with_retries(3)
180+
.with_auth(keyring_provider),
181+
)
178182
.connectivity(connectivity)
179183
.markers(interpreter.markers())
180184
.platform(interpreter.platform())

0 commit comments

Comments
 (0)