• Bug#1106067: yarl: FTBFS: E ValueError: 'host' does not appear to be an

    From Santiago Vila@21:1/5 to All on Mon May 19 12:00:01 2025
    Package: src:yarl
    Version: 1.8.2-1
    Severity: serious
    Control: close -1 1.19.0-1
    Tags: ftbfs bookworm

    Dear maintainer:

    During a rebuild of all packages in bookworm, your package failed to build:

    [ Note: The bug is closed with the version in trixie/sid, but
    packages in bookworm must still build in bookworm ].

    --------------------------------------------------------------------------------
    [...]
    debian/rules build
    dh build --with python3,sphinxdoc --buildsystem=pybuild
    dh_update_autotools_config -O--buildsystem=pybuild
    dh_autoreconf -O--buildsystem=pybuild
    dh_auto_configure -O--buildsystem=pybuild
    I: pybuild base:240: python3.11 setup.py config /usr/lib/python3/dist-packages/setuptools/config/setupcfg.py:515: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
    warnings.warn(msg, warning_class)
    **********************
    * Accelerated build *

    [... snipped ...]

    tests/test_url.py::test_join_from_rfc_3986_abnormal[/g-http:/a/g] PASSED [ 82%] tests/test_url.py::test_join_from_rfc_3986_abnormal[/../g-http:/a/g] PASSED [ 82%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g.-http:/a/b/c/g.] PASSED [ 82%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[.g-http:/a/b/c/.g] PASSED [ 82%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g..-http:/a/b/c/g..] PASSED [ 82%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[..g-http:/a/b/c/..g] PASSED [ 82%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[./../g-http:/a/b/g] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[./g/.-http:/a/b/c/g/] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g/h-http:/a/b/c/g/h] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g/../h-http:/a/b/c/h] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g;x=1/y-http:/a/b/c/g;x=1/y] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g;x=1/../y-http:/a/b/c/y] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g?y/x-http:/a/b/c/g?y/x] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g?y/../x-http:/a/b/c/g?y/../x] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g#s/x-http:/a/b/c/g#s/x] PASSED [ 83%]
    tests/test_url.py::test_join_from_rfc_3986_abnormal[g#s/../x-http:/a/b/c/g#s/../x] PASSED [ 83%]
    tests/test_url.py::test_split_result_non_decoded PASSED [ 84%] tests/test_url.py::test_human_repr PASSED [ 84%] tests/test_url.py::test_human_repr_defaults PASSED [ 84%] tests/test_url.py::test_human_repr_default_port PASSED [ 84%] tests/test_url.py::test_human_repr_ipv6 PASSED [ 84%] tests/test_url.py::test_human_repr_delimiters FAILED [ 84%] tests/test_url.py::test_human_repr_non_printable PASSED [ 84%] tests/test_url.py::test_relative PASSED [ 84%] tests/test_url.py::test_relative_is_relative PASSED [ 84%] tests/test_url.py::test_relative_abs_parts_are_removed PASSED [ 84%] tests/test_url.py::test_relative_fails_on_rel_url PASSED [ 85%] tests/test_url.py::test_slash_and_question_in_query PASSED [ 85%] tests/test_url.py::test_slash_and_question_in_fragment PASSED [ 85%] tests/test_url.py::test_requoting PASSED [ 85%] tests/test_url_build.py::test_build_without_arguments PASSED [ 85%] tests/test_url_build.py::test_build_simple PASSED [ 85%] tests/test_url_build.py::test_build_with_scheme PASSED [ 85%] tests/test_url_build.py::test_build_with_host PASSED [ 85%] tests/test_url_build.py::test_build_with_scheme_and_host PASSED [ 85%] tests/test_url_build.py::test_build_with_port PASSED [ 85%] tests/test_url_build.py::test_build_with_user PASSED [ 85%] tests/test_url_build.py::test_build_with_user_password PASSED [ 86%] tests/test_url_build.py::test_build_with_query_and_query_string PASSED [ 86%] tests/test_url_build.py::test_build_with_all PASSED [ 86%] tests/test_url_build.py::test_build_with_authority_and_host PASSED [ 86%] tests/test_url_build.py::test_build_with_authority PASSED [ 86%] tests/test_url_build.py::test_build_with_authority_without_encoding PASSED [ 86%]
    tests/test_url_build.py::test_query_str PASSED [ 86%] tests/test_url_build.py::test_query_dict PASSED [ 86%] tests/test_url_build.py::test_build_path_quoting PASSED [ 86%] tests/test_url_build.py::test_build_query_quoting PASSED [ 86%] tests/test_url_build.py::test_build_query_only PASSED [ 87%] tests/test_url_build.py::test_build_drop_dots PASSED [ 87%] tests/test_url_build.py::test_build_encode PASSED [ 87%] tests/test_url_build.py::test_build_already_encoded PASSED [ 87%] tests/test_url_build.py::test_build_percent_encoded PASSED [ 87%] tests/test_url_build.py::test_build_with_authority_percent_encoded PASSED [ 87%]
    tests/test_url_build.py::test_build_with_authority_percent_encoded_already_encoded PASSED [ 87%]
    tests/test_url_build.py::test_build_with_authority_with_path_with_leading_slash PASSED [ 87%]
    tests/test_url_build.py::test_build_with_authority_with_empty_path PASSED [ 87%]
    tests/test_url_build.py::test_build_with_authority_with_path_without_leading_slash PASSED [ 87%]
    tests/test_url_build.py::test_build_with_none_path PASSED [ 87%] tests/test_url_build.py::test_build_with_none_query_string PASSED [ 88%] tests/test_url_build.py::test_build_with_none_fragment PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_ne_str PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_eq PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_hash PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_hash_double_call PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_le_less PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_le_eq PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_le_not_implemented PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_lt PASSED [ 88%] tests/test_url_cmp_and_hash.py::test_lt_not_implemented PASSED [ 89%] tests/test_url_cmp_and_hash.py::test_ge_more PASSED [ 89%] tests/test_url_cmp_and_hash.py::test_ge_eq PASSED [ 89%] tests/test_url_cmp_and_hash.py::test_ge_not_implemented PASSED [ 89%] tests/test_url_cmp_and_hash.py::test_gt PASSED [ 89%] tests/test_url_cmp_and_hash.py::test_gt_not_implemented PASSED [ 89%] tests/test_url_parsing.py::TestScheme::test_scheme_path PASSED [ 89%] tests/test_url_parsing.py::TestScheme::test_scheme_path_other PASSED [ 89%] tests/test_url_parsing.py::TestScheme::test_complex_scheme PASSED [ 89%] tests/test_url_parsing.py::TestScheme::test_scheme_only PASSED [ 89%] tests/test_url_parsing.py::TestScheme::test_no_scheme1 PASSED [ 89%] tests/test_url_parsing.py::TestScheme::test_no_scheme2 PASSED [ 90%] tests/test_url_parsing.py::TestScheme::test_not_a_scheme1 PASSED [ 90%] tests/test_url_parsing.py::TestScheme::test_not_a_scheme2 PASSED [ 90%] tests/test_url_parsing.py::TestScheme::test_scheme_rel_path1 PASSED [ 90%] tests/test_url_parsing.py::TestScheme::test_scheme_rel_path2 PASSED [ 90%] tests/test_url_parsing.py::TestScheme::test_scheme_weird PASSED [ 90%] tests/test_url_parsing.py::TestHost::test_canonical PASSED [ 90%] tests/test_url_parsing.py::TestHost::test_absolute_no_scheme PASSED [ 90%] tests/test_url_parsing.py::TestHost::test_absolute_no_scheme_complex_host PASSED [ 90%]
    tests/test_url_parsing.py::TestHost::test_absolute_no_scheme_simple_host PASSED [ 90%]
    tests/test_url_parsing.py::TestHost::test_weird_host PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_scheme_no_host PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_scheme_no_host2 PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_no_scheme_no_host PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_ipv4 PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_masked_ipv4 FAILED [ 91%] tests/test_url_parsing.py::TestHost::test_ipv6 PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_strange_ip FAILED [ 91%] tests/test_url_parsing.py::TestHost::test_strange_ip_2 PASSED [ 91%] tests/test_url_parsing.py::TestHost::test_strange_ip_3 FAILED [ 91%] tests/test_url_parsing.py::TestPort::test_canonical PASSED [ 91%] tests/test_url_parsing.py::TestPort::test_no_path PASSED [ 92%] tests/test_url_parsing.py::TestPort::test_no_host PASSED [ 92%] tests/test_url_parsing.py::TestPort::test_double_port PASSED [ 92%] tests/test_url_parsing.py::TestPort::test_bad_port PASSED [ 92%] tests/test_url_parsing.py::TestPort::test_another_bad_port PASSED [ 92%] tests/test_url_parsing.py::TestPort::test_bad_port_again PASSED [ 92%] tests/test_url_parsing.py::TestUserInfo::test_canonical PASSED [ 92%] tests/test_url_parsing.py::TestUserInfo::test_user_pass PASSED [ 92%] tests/test_url_parsing.py::TestUserInfo::test_complex_userinfo PASSED [ 92%] tests/test_url_parsing.py::TestUserInfo::test_no_user PASSED [ 92%] tests/test_url_parsing.py::TestUserInfo::test_weird_user PASSED [ 93%] tests/test_url_parsing.py::TestUserInfo::test_weird_user2 PASSED [ 93%] tests/test_url_parsing.py::TestUserInfo::test_weird_user3 FAILED [ 93%] tests/test_url_parsing.py::TestQuery_String::test_simple PASSED [ 93%] tests/test_url_parsing.py::TestQuery_String::test_scheme_query PASSED [ 93%] tests/test_url_parsing.py::TestQuery_String::test_abs_url_query PASSED [ 93%] tests/test_url_parsing.py::TestQuery_String::test_abs_url_path_query PASSED [ 93%]
    tests/test_url_parsing.py::TestQuery_String::test_double_question_mark PASSED [ 93%]
    tests/test_url_parsing.py::TestQuery_String::test_complex_query PASSED [ 93%] tests/test_url_parsing.py::TestQuery_String::test_query_in_fragment PASSED [ 93%]
    tests/test_url_parsing.py::TestFragment::test_simple PASSED [ 93%] tests/test_url_parsing.py::TestFragment::test_scheme_frag PASSED [ 94%] tests/test_url_parsing.py::TestFragment::test_host_frag PASSED [ 94%] tests/test_url_parsing.py::TestFragment::test_scheme_path_frag PASSED [ 94%] tests/test_url_parsing.py::TestFragment::test_scheme_query_frag PASSED [ 94%] tests/test_url_parsing.py::TestFragment::test_host_frag_query PASSED [ 94%] tests/test_url_parsing.py::TestFragment::test_complex_frag PASSED [ 94%] tests/test_url_parsing.py::TestStripEmptyParts::test_all_empty PASSED [ 94%] tests/test_url_parsing.py::TestStripEmptyParts::test_path_only PASSED [ 94%] tests/test_url_parsing.py::TestStripEmptyParts::test_empty_user PASSED [ 94%] tests/test_url_parsing.py::TestStripEmptyParts::test_empty_port PASSED [ 94%] tests/test_url_parsing.py::TestStripEmptyParts::test_empty_port_and_path PASSED [ 95%]
    tests/test_url_parsing.py::TestStripEmptyParts::test_empty_path_only PASSED [ 95%]
    tests/test_url_parsing.py::TestStripEmptyParts::test_relative_path_only PASSED [ 95%]
    tests/test_url_parsing.py::TestStripEmptyParts::test_path PASSED [ 95%] tests/test_url_parsing.py::TestStripEmptyParts::test_empty_query_with_path PASSED [ 95%]
    tests/test_url_parsing.py::TestStripEmptyParts::test_empty_query PASSED [ 95%] tests/test_url_parsing.py::TestStripEmptyParts::test_empty_query_with_frag PASSED [ 95%]
    tests/test_url_parsing.py::TestStripEmptyParts::test_path_empty_frag PASSED [ 95%]
    tests/test_url_parsing.py::TestStripEmptyParts::test_empty_path PASSED [ 95%] tests/test_url_query.py::test_query_spaces PASSED [ 95%] tests/test_url_query.py::test_query_empty PASSED [ 95%] tests/test_url_query.py::test_query PASSED [ 96%] tests/test_url_query.py::test_query_repeated_args PASSED [ 96%] tests/test_url_query.py::test_query_empty_arg PASSED [ 96%] tests/test_url_query.py::test_query_dont_unqoute_twice PASSED [ 96%] tests/test_url_query.py::test_query_nonascii PASSED [ 96%] tests/test_url_query.py::test_ampersand_as_separator PASSED [ 96%] tests/test_url_query.py::test_ampersand_as_value PASSED [ 96%] tests/test_url_update_netloc.py::test_with_scheme PASSED [ 96%] tests/test_url_update_netloc.py::test_with_scheme_uppercased PASSED [ 96%] tests/test_url_update_netloc.py::test_with_scheme_for_relative_url PASSED [ 96%]
    tests/test_url_update_netloc.py::test_with_scheme_invalid_type PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_non_ascii PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_percent_encoded PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_for_relative_url PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_invalid_type PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_None PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_ipv6 PASSED [ 97%] tests/test_url_update_netloc.py::test_with_user_None_when_password_present PASSED [ 97%]
    tests/test_url_update_netloc.py::test_with_password PASSED [ 97%] tests/test_url_update_netloc.py::test_with_password_ipv6 PASSED [ 97%] tests/test_url_update_netloc.py::test_with_password_non_ascii PASSED [ 98%] tests/test_url_update_netloc.py::test_with_password_percent_encoded PASSED [ 98%]
    tests/test_url_update_netloc.py::test_with_password_non_ascii_with_colon PASSED [ 98%]
    tests/test_url_update_netloc.py::test_with_password_for_relative_url PASSED [ 98%]
    tests/test_url_update_netloc.py::test_with_password_None PASSED [ 98%] tests/test_url_update_netloc.py::test_with_password_invalid_type PASSED [ 98%] tests/test_url_update_netloc.py::test_with_password_and_empty_user PASSED [ 98%]
    tests/test_url_update_netloc.py::test_from_str_with_host_ipv4 PASSED [ 98%] tests/test_url_update_netloc.py::test_from_str_with_host_ipv6 PASSED [ 98%] tests/test_url_update_netloc.py::test_with_host PASSED [ 98%] tests/test_url_update_netloc.py::test_with_host_empty PASSED [ 99%] tests/test_url_update_netloc.py::test_with_host_non_ascii PASSED [ 99%] tests/test_url_update_netloc.py::test_with_host_percent_encoded PASSED [ 99%] tests/test_url_update_netloc.py::test_with_host_for_relative_url PASSED [ 99%] tests/test_url_update_netloc.py::test_with_host_invalid_type PASSED [ 99%] tests/test_url_update_netloc.py::test_with_port PASSED [ 99%] tests/test_url_update_netloc.py::test_with_port_ipv6 PASSED [ 99%] tests/test_url_update_netloc.py::test_with_port_keeps_query_and_fragment PASSED [ 99%]
    tests/test_url_update_netloc.py::test_with_port_percent_encoded PASSED [ 99%] tests/test_url_update_netloc.py::test_with_port_for_relative_url PASSED [ 99%] tests/test_url_update_netloc.py::test_with_port_invalid_type PASSED [100%]

    =================================== FAILURES ===================================
    ________________________________ test_ipv6_zone ________________________________

    def test_ipv6_zone():
    url = URL("http://[fe80::822a:a8ff:fe49:470c%тест%42]:123")

    tests/test_url.py:239:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ yarl/_url.py:147: in __new__
    val = urlsplit(val)
    /usr/lib/python3.11/urllib/parse.py:516: in urlsplit
    _check_bracketed_netloc(netloc)
    /usr/lib/python3.11/urllib/parse.py:454: in _check_bracketed_netloc
    _check_bracketed_host(hostname)
    /usr/lib/python3.11/urllib/parse.py:463: in _check_bracketed_host
    ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    address = 'fe80::822a:a8ff:fe49:470c%тест%42'

    def ip_address(address):
    """Take an IP string/int and return an object of the correct type.

    Args:
    address: A string or integer, the IP address. Either IPv4 or
    IPv6 addresses may be supplied; integers less than 2**32 will
    be considered to be IPv4 by default.

    Returns:
    An IPv4Address or IPv6Address object.

    Raises:
    ValueError: if the *address* passed isn't either a v4 or a v6
    address

    """
    try:
    return IPv4Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    try:
    return IPv6Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 address')
    E ValueError: 'fe80::822a:a8ff:fe49:470c%тест%42' does not appear to be an IPv4 or IPv6 address

    /usr/lib/python3.11/ipaddress.py:54: ValueError
    __________________________ test_human_repr_delimiters __________________________

    def test_human_repr_delimiters():
    url = URL.build(
    scheme="http",
    user=" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
    password=" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
    host="хост.домен",
    port=8080,
    path="/ !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
    query={
    " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~": " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
    },
    fragment=" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
    )
    s = url.human_repr()
    assert URL(s) == url

    tests/test_url.py:1515:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ yarl/_url.py:147: in __new__
    val = urlsplit(val)
    /usr/lib/python3.11/urllib/parse.py:516: in urlsplit
    _check_bracketed_netloc(netloc)
    /usr/lib/python3.11/urllib/parse.py:454: in _check_bracketed_netloc
    _check_bracketed_host(hostname)
    /usr/lib/python3.11/urllib/parse.py:463: in _check_bracketed_host
    ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    address = 'хост.домен'

    def ip_address(address):
    """Take an IP string/int and return an object of the correct type.

    Args:
    address: A string or integer, the IP address. Either IPv4 or
    IPv6 addresses may be supplied; integers less than 2**32 will
    be considered to be IPv4 by default.

    Returns:
    An IPv4Address or IPv6Address object.

    Raises:
    ValueError: if the *address* passed isn't either a v4 or a v6
    address

    """
    try:
    return IPv4Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    try:
    return IPv6Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 address')
    E ValueError: 'хост.домен' does not appear to be an IPv4 or IPv6 address

    /usr/lib/python3.11/ipaddress.py:54: ValueError
    __________________________ TestHost.test_masked_ipv4 ___________________________

    self = <test_url_parsing.TestHost object at 0x7f4f8aac6e50>

    def test_masked_ipv4(self):
    u = URL("//[127.0.0.1]/")

    tests/test_url_parsing.py:182:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ yarl/_url.py:147: in __new__
    val = urlsplit(val)
    /usr/lib/python3.11/urllib/parse.py:516: in urlsplit
    _check_bracketed_netloc(netloc)
    /usr/lib/python3.11/urllib/parse.py:454: in _check_bracketed_netloc
    _check_bracketed_host(hostname)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    hostname = '127.0.0.1'

    def _check_bracketed_host(hostname):
    if hostname.startswith('v'):
    if not re.match(r"\Av[a-fA-F0-9]+\..+\Z", hostname):
    raise ValueError(f"IPvFuture address is invalid")
    else:
    ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
    if isinstance(ip, ipaddress.IPv4Address):
    raise ValueError(f"An IPv4 address cannot be in brackets")
    E ValueError: An IPv4 address cannot be in brackets

    /usr/lib/python3.11/urllib/parse.py:465: ValueError
    ___________________________ TestHost.test_strange_ip ___________________________

    self = <test_url_parsing.TestHost object at 0x7f4f8aac57d0>

    def test_strange_ip(self):
    u = URL("//[-1]/")

    tests/test_url_parsing.py:198:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ yarl/_url.py:147: in __new__
    val = urlsplit(val)
    /usr/lib/python3.11/urllib/parse.py:516: in urlsplit
    _check_bracketed_netloc(netloc)
    /usr/lib/python3.11/urllib/parse.py:454: in _check_bracketed_netloc
    _check_bracketed_host(hostname)
    /usr/lib/python3.11/urllib/parse.py:463: in _check_bracketed_host
    ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    address = '-1'

    def ip_address(address):
    """Take an IP string/int and return an object of the correct type.

    Args:
    address: A string or integer, the IP address. Either IPv4 or
    IPv6 addresses may be supplied; integers less than 2**32 will
    be considered to be IPv4 by default.

    Returns:
    An IPv4Address or IPv6Address object.

    Raises:
    ValueError: if the *address* passed isn't either a v4 or a v6
    address

    """
    try:
    return IPv4Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    try:
    return IPv6Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 address')
    E ValueError: '-1' does not appear to be an IPv4 or IPv6 address

    /usr/lib/python3.11/ipaddress.py:54: ValueError
    __________________________ TestHost.test_strange_ip_3 __________________________

    self = <test_url_parsing.TestHost object at 0x7f4f8aac1910>

    def test_strange_ip_3(self):
    u = URL("//v1.[::1]/")

    tests/test_url_parsing.py:214:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ yarl/_url.py:147: in __new__
    val = urlsplit(val)
    /usr/lib/python3.11/urllib/parse.py:516: in urlsplit
    _check_bracketed_netloc(netloc)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    netloc = 'v1.[::1]'

    def _check_bracketed_netloc(netloc):
    # Note that this function must mirror the splitting
    # done in NetlocResultMixins._hostinfo().
    hostname_and_port = netloc.rpartition('@')[2]
    before_bracket, have_open_br, bracketed = hostname_and_port.partition('[')
    if have_open_br:
    # No data is allowed before a bracket.
    if before_bracket:
    raise ValueError("Invalid IPv6 URL")
    E ValueError: Invalid IPv6 URL

    /usr/lib/python3.11/urllib/parse.py:447: ValueError
    ________________________ TestUserInfo.test_weird_user3 _________________________

    self = <test_url_parsing.TestUserInfo object at 0x7f4f8ab06790>

    def test_weird_user3(self):
    u = URL("//[some]@host")

    tests/test_url_parsing.py:323:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ yarl/_url.py:147: in __new__
    val = urlsplit(val)
    /usr/lib/python3.11/urllib/parse.py:516: in urlsplit
    _check_bracketed_netloc(netloc)
    /usr/lib/python3.11/urllib/parse.py:454: in _check_bracketed_netloc
    _check_bracketed_host(hostname)
    /usr/lib/python3.11/urllib/parse.py:463: in _check_bracketed_host
    ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or IPv4
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    address = 'host'

    def ip_address(address):
    """Take an IP string/int and return an object of the correct type.

    Args:
    address: A string or integer, the IP address. Either IPv4 or
    IPv6 addresses may be supplied; integers less than 2**32 will
    be considered to be IPv4 by default.

    Returns:
    An IPv4Address or IPv6Address object.

    Raises:
    ValueError: if the *address* passed isn't either a v4 or a v6
    address

    """
    try:
    return IPv4Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    try:
    return IPv6Address(address)
    except (AddressValueError, NetmaskValueError):
    pass

    raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 address')
    E ValueError: 'host' does not appear to be an IPv4 or IPv6 address

    /usr/lib/python3.11/ipaddress.py:54: ValueError

    ---------- coverage: platform linux, python 3.11.2-final-0 -----------
    Name Stmts Miss Cover -----------------------------------------
    yarl/__init__.py 3 0 100%
    yarl/_quoting.py 10 2 80%
    yarl/_quoting_py.py 155 0 100%
    yarl/_url.py 582 2 99% -----------------------------------------
    TOTAL 750 4 99%

    =========================== short test summary info ============================
    FAILED tests/test_url.py::test_ipv6_zone - ValueError: 'fe80::822a:a8ff:fe49:...
    FAILED tests/test_url.py::test_human_repr_delimiters - ValueError: 'хост.доме...
    FAILED tests/test_url_parsing.py::TestHost::test_masked_ipv4 - ValueError: An...
    FAILED tests/test_url_parsing.py::TestHost::test_strange_ip - ValueError: '-1...
    FAILED tests/test_url_parsing.py::TestHost::test_strange_ip_3 - ValueError: I...
    FAILED tests/test_url_parsing.py::TestUserInfo::test_weird_user3 - ValueError...
    ================== 6 failed, 1039 passed, 2 xfailed in 2.06s ===================
    E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build; python3.11 -m pytest tests
    dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13
    make: *** [debian/rules:9: build] Error 25
    dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2 --------------------------------------------------------------------------------

    The above is just how the build ends and not necessarily the most relevant part.
    If required, the full build log is available here:

    https://people.debian.org/~sanvila/build-logs/bookworm/

    About the archive rebuild: The build was made on virtual machines from AWS, using sbuild and a reduced chroot with only build-essential packages.

    If you could not reproduce the bug please contact me privately, as I
    am willing to provide ssh access to a virtual machine where the bug is
    fully reproducible.

    If this is really a bug in one of the build-depends, please use
    reassign and add an affects on src:yarl, so that this is still
    visible in the BTS web page for this package.

    Note: The following packages fail in a similar weird way:

    asyncpg
    python-taskflow
    python-w3lib
    yarl

    Maybe there is a common reason, or maybe the packages need to adapt anyway.

    Thanks.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)