``psycopg`` release notes
=========================
+Future releases
+---------------
+
+Psycopg 3.1.16 (unreleased)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Fix empty ports handling in async multiple connection attempts
+ (:ticket:`#703`).
+
+
Current release
---------------
loop = asyncio.get_running_loop()
- port = _get_param(params, "port", compiled_default=True)
- assert port and "," not in port # assume a libpq default and no multi
+ port = _get_param(params, "port")
+ if not port:
+ port_def = _get_param_def("port")
+ port = port_def and port_def.compiled or "5432"
+
ans = await loop.getaddrinfo(
host, int(port), proto=socket.IPPROTO_TCP, type=socket.SOCK_STREAM
)
return timeout
-def _get_param(
- params: ConnDict, name: str, compiled_default: bool = False
-) -> str | None:
+def _get_param(params: ConnDict, name: str) -> str | None:
"""
Return a value from a connection string.
if env is not None:
return env
- return paramdef.compiled if compiled_default else None
+ return None
@dataclass
["host=1.1.1.1 port=5432", "host=2.2.2.2 port=5432"],
None,
),
+ (
+ "host=1.1.1.1,1.1.1.1 port=5432,",
+ ["host=1.1.1.1 port=5432", "host=1.1.1.1 port=''"],
+ None,
+ ),
(
"host=foo.com port=5432",
["host=foo.com port=5432"],
[
("", [""], None),
("host='' user=bar", ["host='' user=bar"], None),
+ (
+ "host=127.0.0.1 user=bar port=''",
+ ["host=127.0.0.1 user=bar port='' hostaddr=127.0.0.1"],
+ None,
+ ),
(
"host=127.0.0.1 user=bar",
["host=127.0.0.1 user=bar hostaddr=127.0.0.1"],
],
None,
),
+ (
+ "host=1.1.1.1,2.2.2.2 port=5432,",
+ [
+ "host=1.1.1.1 port=5432 hostaddr=1.1.1.1",
+ "host=2.2.2.2 port='' hostaddr=2.2.2.2",
+ ],
+ None,
+ ),
(
"port=5432",
[
],
None,
),
+ (
+ "host=foo.com,foo.com port=5432,",
+ [
+ "host=foo.com hostaddr=1.1.1.1 port=5432",
+ "host=foo.com hostaddr=1.1.1.1 port=''",
+ ],
+ None,
+ ),
(
"host=foo.com,nosuchhost.com",
["host=foo.com hostaddr=1.1.1.1"],