Add parse_endpoints helper function that handles complicated listen structures alike server.run() already did, returning a simple list of every endpoint.

This commit is contained in:
2026-02-18 17:05:10 +00:00
parent 8b8a24a6b2
commit 79e645a263
2 changed files with 21 additions and 8 deletions
+17
View File
@@ -12,6 +12,7 @@ def parse_endpoint(value: str | None, default_port: int = 0) -> list[dict]:
Returns:
List of dicts with uvicorn bind kwargs (host/port or uds).
Two entries may be returned for IPv4 and IPv6 (all interaces).
Supported forms:
- None or empty -> [{host: "localhost", port: default_port}]
@@ -65,3 +66,19 @@ def parse_endpoint(value: str | None, default_port: int = 0) -> list[dict]:
ipaddress.ip_address(host)
return [{"host": host, "port": port}]
def parse_endpoints(
listen: str | list[str] | None = None, default_port: int = 8000
) -> list[dict]:
"""Parse listen strings into a list of endpoint dicts.
Args:
listen: Endpoint string(s) (see parse_endpoint for formats).
default_port: Port to use when not specified in listen args.
"""
if listen is None:
listen = [f"localhost:{default_port}"]
elif isinstance(listen, str):
listen = [listen]
return [ep for s in listen for ep in parse_endpoint(s, default_port)]