You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
928 B
30 lines
928 B
import urllib.parse
|
|
|
|
|
|
def collect_hosts(hosts):
|
|
"""
|
|
Collect a set of hosts and an optional chroot from
|
|
a string or a list of strings.
|
|
"""
|
|
if isinstance(hosts, list):
|
|
if hosts[-1].strip().startswith("/"):
|
|
host_ports, chroot = hosts[:-1], hosts[-1]
|
|
else:
|
|
host_ports, chroot = hosts, None
|
|
else:
|
|
host_ports, chroot = hosts.partition("/")[::2]
|
|
host_ports = host_ports.split(",")
|
|
chroot = "/" + chroot if chroot else None
|
|
|
|
result = []
|
|
for host_port in host_ports:
|
|
# put all complexity of dealing with
|
|
# IPv4 & IPv6 address:port on the urlsplit
|
|
res = urllib.parse.urlsplit("xxx://" + host_port)
|
|
host = res.hostname
|
|
if host is None:
|
|
raise ValueError("bad hostname")
|
|
port = int(res.port) if res.port else 2181
|
|
result.append((host.strip(), port))
|
|
|
|
return result, chroot
|