import re
import urllib.parse
def url_replace_hostname(url_parse_result, hostname):
userinfo, sep, hostinfo = url_parse_result.netloc.rpartition('@')
if ':' in hostname:
hostname = f'[{hostname}]'
return url_parse_result._replace(netloc=userinfo + sep +
re.subn(r'\[[^]]*]|[^:]+', hostname, hostinfo, 1)[0])
for url, hostname in (
('https://127.0.0.1:6443', 'foo'),
('http://u...content-available-to-author-only...r.pass@bar', '1.2.3.4'),
('http://user:pass@80:80', '1111:1111:1111:1111:1111'),
('http://[fe80::822a:a8ff:fe49:470c%tESt]:1234', 'baz.com')
):
print(url_replace_hostname(urllib.parse.urlparse(url), hostname).geturl())
aW1wb3J0IHJlCmltcG9ydCB1cmxsaWIucGFyc2UKCmRlZiB1cmxfcmVwbGFjZV9ob3N0bmFtZSh1cmxfcGFyc2VfcmVzdWx0LCBob3N0bmFtZSk6CiAgICB1c2VyaW5mbywgc2VwLCBob3N0aW5mbyA9IHVybF9wYXJzZV9yZXN1bHQubmV0bG9jLnJwYXJ0aXRpb24oJ0AnKQogICAgaWYgJzonIGluIGhvc3RuYW1lOgogICAgICAgIGhvc3RuYW1lID0gZidbe2hvc3RuYW1lfV0nCiAgICByZXR1cm4gdXJsX3BhcnNlX3Jlc3VsdC5fcmVwbGFjZShuZXRsb2M9dXNlcmluZm8gKyBzZXAgKwogICAgICAgIHJlLnN1Ym4ocidcW1teXV0qXXxbXjpdKycsIGhvc3RuYW1lLCBob3N0aW5mbywgMSlbMF0pCgpmb3IgdXJsLCBob3N0bmFtZSBpbiAoCiAgICAoJ2h0dHBzOi8vMTI3LjAuMC4xOjY0NDMnLCAnZm9vJyksCiAgICAoJ2h0dHA6Ly91Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLnBhc3NAYmFyJywgJzEuMi4zLjQnKSwKICAgICgnaHR0cDovL3VzZXI6cGFzc0A4MDo4MCcsICcxMTExOjExMTE6MTExMToxMTExOjExMTEnKSwKICAgICgnaHR0cDovL1tmZTgwOjo4MjJhOmE4ZmY6ZmU0OTo0NzBjJXRFU3RdOjEyMzQnLCAnYmF6LmNvbScpCik6CiAgICBwcmludCh1cmxfcmVwbGFjZV9ob3N0bmFtZSh1cmxsaWIucGFyc2UudXJscGFyc2UodXJsKSwgaG9zdG5hbWUpLmdldHVybCgpKQ==