Skip to content

Commit 8e24981

Browse files
committed
fix: PR changes
1 parent 87bd446 commit 8e24981

File tree

3 files changed

+30
-32
lines changed

3 files changed

+30
-32
lines changed

python/pydantic_core/_pydantic_core.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class Url(SupportsAllComparisons):
195195
user: Optional[str] = None,
196196
password: Optional[str] = None,
197197
host: str,
198-
port: Optional[str] = None,
198+
port: Optional[int] = None,
199199
path: Optional[str] = None,
200200
query: Optional[str] = None,
201201
fragment: Optional[str] = None,
@@ -226,7 +226,7 @@ class MultiHostUrl(SupportsAllComparisons):
226226
password: Optional[str] = None,
227227
host: Optional[str] = None,
228228
hosts: Optional[list[dict]] = None,
229-
port: Optional[str] = None,
229+
port: Optional[int] = None,
230230
path: Optional[str] = None,
231231
query: Optional[str] = None,
232232
fragment: Optional[str] = None,

src/url.rs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ impl PyUrl {
164164
host: &str,
165165
user: Option<&str>,
166166
password: Option<&str>,
167-
port: Option<&str>,
167+
port: Option<u16>,
168168
path: Option<&str>,
169169
query: Option<&str>,
170170
fragment: Option<&str>,
@@ -178,7 +178,7 @@ impl PyUrl {
178178
let mut url = format!("{scheme}://{user_password}{host}");
179179
if let Some(port) = port {
180180
url.push(':');
181-
url.push_str(port);
181+
url.push_str(&format!("{port}"));
182182
}
183183
if let Some(path) = path {
184184
url.push('/');
@@ -373,7 +373,7 @@ impl PyMultiHostUrl {
373373
host: Option<&str>,
374374
user: Option<&str>,
375375
password: Option<&str>,
376-
port: Option<&str>,
376+
port: Option<u16>,
377377
) -> PyResult<&'a PyAny> {
378378
let mut url = if hosts.is_some() && (host.is_some() || user.is_some() || password.is_some() || port.is_some()) {
379379
return Err(PyValueError::new_err(
@@ -395,19 +395,14 @@ impl PyMultiHostUrl {
395395
};
396396
}
397397
multi_url
398-
} else if let Some(host) = host {
399-
let user_password = match (user, password) {
400-
(Some(user), None) => format!("{user}@"),
401-
(None, Some(password)) => format!(":{password}@"),
402-
(Some(user), Some(password)) => format!("{user}:{password}@"),
403-
(None, None) => String::new(),
398+
} else if host.is_some() {
399+
let url_host = MultiHostUrlHost {
400+
username: user.map(Into::into),
401+
password: password.map(Into::into),
402+
host: host.map(Into::into),
403+
port: port.map(Into::into),
404404
};
405-
let mut single_host_url = format!("{scheme}://{user_password}{host}");
406-
if let Some(port) = port {
407-
single_host_url.push(':');
408-
single_host_url.push_str(port);
409-
};
410-
single_host_url
405+
format!("{scheme}://{url_host}")
411406
} else {
412407
return Err(PyValueError::new_err("expected either `host` or `hosts` to be set"));
413408
};
@@ -432,7 +427,7 @@ pub struct MultiHostUrlHost {
432427
username: Option<String>,
433428
password: Option<String>,
434429
host: Option<String>,
435-
port: Option<String>,
430+
port: Option<u16>,
436431
}
437432

438433
impl MultiHostUrlHost {
@@ -456,21 +451,21 @@ impl FromPyObject<'_> for MultiHostUrlHost {
456451

457452
impl fmt::Display for MultiHostUrlHost {
458453
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
459-
let mut url = String::new();
460454
if self.username.is_some() && self.password.is_some() {
461-
url.push_str(&format!(
455+
write!(
456+
f,
462457
"{}:{}",
463458
self.username.as_ref().unwrap(),
464459
self.password.as_ref().unwrap()
465-
));
460+
)?
466461
}
467462
if self.host.is_some() {
468-
url.push_str(&format!("@{}", self.host.as_ref().unwrap()));
463+
write!(f, "@{}", self.host.as_ref().unwrap())?
469464
}
470465
if self.port.is_some() {
471-
url.push_str(&format!(":{}", self.port.as_ref().unwrap()));
466+
write!(f, ":{}", self.port.as_ref().unwrap())?
472467
}
473-
write!(f, "{url}")
468+
Ok(())
474469
}
475470
}
476471

tests/validators/test_url.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,7 +1224,7 @@ def test_multi_url_build() -> None:
12241224
user='testuser',
12251225
password='testpassword',
12261226
host='127.0.0.1',
1227-
port='5432',
1227+
port=5432,
12281228
path='database',
12291229
query='sslmode=require',
12301230
fragment='test',
@@ -1237,11 +1237,14 @@ def test_multi_url_build() -> None:
12371237
def test_multi_url_build_hosts_set_with_single_value(field) -> None:
12381238
"""Hosts can't be provided with any single url values."""
12391239
hosts = [
1240-
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': '5432'},
1241-
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': '5432'},
1240+
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': 5432},
1241+
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': 5432},
12421242
]
12431243
kwargs = dict(scheme='postgresql', hosts=hosts, path='database', query='sslmode=require', fragment='test')
1244-
kwargs[field] = 'test'
1244+
if field == 'port':
1245+
kwargs[field] = 5432
1246+
else:
1247+
kwargs[field] = 'test'
12451248
with pytest.raises(ValueError):
12461249
MultiHostUrl.build(**kwargs)
12471250

@@ -1256,8 +1259,8 @@ def test_multi_url_build_hosts_empty_host() -> None:
12561259
def test_multi_url_build_hosts() -> None:
12571260
"""Hosts can't be provided with any single url values."""
12581261
hosts = [
1259-
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': '5431'},
1260-
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': '5433'},
1262+
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': 5431},
1263+
{'host': '127.0.0.1', 'password': 'testpassword', 'username': 'testuser', 'port': 5433},
12611264
]
12621265
kwargs = dict(scheme='postgresql', hosts=hosts, path='database', query='sslmode=require', fragment='test')
12631266
url = MultiHostUrl.build(**kwargs)
@@ -1276,7 +1279,7 @@ def test_multi_url_build_neither_host_and_hosts_set() -> None:
12761279
scheme='postgresql',
12771280
user='testuser',
12781281
password='testpassword',
1279-
port='5432',
1282+
port=5432,
12801283
path='database',
12811284
query='sslmode=require',
12821285
fragment='test',
@@ -1289,7 +1292,7 @@ def test_url_build() -> None:
12891292
user='testuser',
12901293
password='testpassword',
12911294
host='127.0.0.1',
1292-
port='5432',
1295+
port=5432,
12931296
path='database',
12941297
query='sslmode=require',
12951298
fragment='test',

0 commit comments

Comments
 (0)