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.

Reply via email to