Package: src:python-w3lib
Version: 2.1.1-1
Severity: serious
Control: close -1 2.3.1-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 clean
dh clean --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
I: pybuild base:240: python3.11 setup.py clean 
running clean
removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build' (and everything 
under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.11' does not exist -- can't clean it
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --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 
running config
   dh_auto_build -O--buildsystem=pybuild
I: pybuild base:240: /usr/bin/python3 setup.py build 
running build
running build_py
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/_infra.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/http.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/_types.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/encoding.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/_url.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/util.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/url.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
copying w3lib/html.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
running egg_info
writing w3lib.egg-info/PKG-INFO
writing dependency_links to w3lib.egg-info/dependency_links.txt
writing top-level names to w3lib.egg-info/top_level.txt
writing manifest file 'w3lib.egg-info/SOURCES.txt'
reading manifest file 'w3lib.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.txt' under directory 'tests'
adding license file 'LICENSE'
writing manifest file 'w3lib.egg-info/SOURCES.txt'
copying w3lib/py.typed -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build/w3lib
   dh_auto_test -O--buildsystem=pybuild
I: pybuild base:240: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/build; 
python3.11 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.11.2, pytest-7.2.1, pluggy-1.0.0+repack
rootdir: /<<PKGBUILDDIR>>, configfile: pytest.ini
collected 314 items

tests/test_encoding.py ...................                               [  6%]
tests/test_html.py ..................................................... [ 22%]
..                                                                       [ 23%]
tests/test_http.py .......                                               [ 25%]
tests/test_url.py x...xxx....x..x.................................xxxxxx [ 42%]
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.....Fx...xx......xxxFx....xx.x.. [ 65%]
xx....x......xxxxxx..xxxx..x....x....................................... [ 88%]
..............................                                           [ 98%]
tests/test_util.py .....                                                 [100%]

=================================== FAILURES ===================================
_ 
test_safe_url_string_url[https://"%;<=>@[]^`{|}\x7f:"%;<=>@[]^`{|}\x7f:@example.com-https://%22%25%3B%3C%3D%3E%40%5B%5D%5E%60%7B%7C%7D%7F:%22%25%3b%3c%3d%3e%40%5b%5d%5e%60%7b%7c%7d%7f...@example.com]
 _

url = 'https://"%;<=>@[]^`{|}\x7f:"%;<=>@[]^`{|}\x7f:@example.com'
output = 
'https://%22%25%3B%3C%3D%3E%40%5B%5D%5E%60%7B%7C%7D%7F:%22%25%3b%3c%3d%3e%40%5b%5d%5e%60%7b%7c%7d%7f...@example.com'

    @pytest.mark.parametrize(
        "url,output",
        tuple(
            case
            if case[0] not in KNOWN_SAFE_URL_STRING_URL_ISSUES
            else pytest.param(*case, marks=pytest.mark.xfail(strict=True))
            for case in SAFE_URL_URL_CASES
        ),
    )
    def test_safe_url_string_url(
        url: StrOrBytes, output: Union[str, Type[Exception]]
    ) -> None:
>       _test_safe_url_string(url, output=output)

tests/test_url.py:435: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_url.py:343: in _test_safe_url_string
    return _test_safe_url_func(
tests/test_url.py:332: in _test_safe_url_func
    actual = func(url, **kwargs)
w3lib/url.py:142: in safe_url_string
    parts = urlsplit(_strip(decoded))
/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 = 'example.com'

    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: 'example.com' does not appear to be an IPv4 or IPv6 address

/usr/lib/python3.11/ipaddress.py:54: ValueError
_______ test_safe_url_string_url[http://[2a01:5cc0:1:2:3:4]-ValueError] ________
[XPASS(strict)] 
=========================== short test summary info ============================
FAILED 
tests/test_url.py::test_safe_url_string_url[https:/"%;<=>@[]^`{|}\x7f:"%;<=>@[]^`{|}\x7f:@example.com-https:/%22%25%3B%3C%3D%3E%40%5B%5D%5E%60%7B%7C%7D%7F:%22%25%3b%3c%3d%3e%40%5b%5d%5e%60%7b%7c%7d%7f...@example.com]
FAILED 
tests/test_url.py::test_safe_url_string_url[http:/[2a01:5cc0:1:2:3:4]-ValueError]
================== 2 failed, 236 passed, 76 xfailed in 1.54s ===================
E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_w3lib/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:6: binary] Error 25
dpkg-buildpackage: error: debian/rules binary 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:python-w3lib, 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