Package: src:python-tld
Version: 0.13-1
Severity: serious
Tags: ftbfs

Dear maintainer:

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

--------------------------------------------------------------------------------
[...]
 debian/rules binary
dh binary --with sphinxdoc --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
I: pybuild base:311: python3.12 setup.py config
/usr/lib/python3/dist-packages/setuptools/dist.py:744: 
SetuptoolsDeprecationWarning: Invalid dash-separated options
!!

        
********************************************************************************
        Usage of dash-separated 'license-file' will not be supported in future
        versions. Please use the underscore name 'license_file' instead.

        This deprecation is overdue, please update your project and remove 
deprecated

[... snipped ...]

                and os.path.dirname(executable)
                and preexec_fn is None
                and not close_fds
                and not pass_fds
                and cwd is None
                and (p2cread == -1 or p2cread > 2)
                and (c2pwrite == -1 or c2pwrite > 2)
                and (errwrite == -1 or errwrite > 2)
                and not start_new_session
                and process_group == -1
                and gid is None
                and gids is None
                and uid is None
                and umask < 0):
            self._posix_spawn(args, executable, env, restore_signals,
                              p2cread, p2cwrite,
                              c2pread, c2pwrite,
                              errread, errwrite)
            return
orig_executable = executable # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()
if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable 
name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session,
                        process_group, gid, gids, uid, umask,
                        preexec_fn, _USE_VFORK)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)
self._close_pipe_fds(p2cread, p2cwrite,
                                 c2pread, c2pwrite,
                                 errread, errwrite)
# Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)
if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass
try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                if err_msg == "noexec:chdir":
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                elif err_msg == "noexec":
                    err_msg = ""
                    err_filename = None
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                if err_filename is not None:
                  raise child_exception_type(errno_num, err_msg, err_filename)
E                   FileNotFoundError: [Errno 2] No such file or directory: 
'update-tld-names'

/usr/lib/python3.11/subprocess.py:1955: FileNotFoundError
_____________ TestCommands.test_1_update_tld_names_mozilla_command _____________

self = <tld.tests.test_commands.TestCommands 
testMethod=test_1_update_tld_names_mozilla_command>
args = (), kwargs = {}

    def inner(self, *args, **kwargs):
        """Inner."""
        if not is_internet_available():
            LOGGER.debug("\n\n%s", func.__name__)
            LOGGER.debug("============================")
            if func.__doc__:
                LOGGER.debug('""" %s """', func.__doc__.strip())
            LOGGER.debug("----------------------------")
            LOGGER.debug("Skipping because no Internet connection available.")
            LOGGER.debug("\n++++++++++++++++++++++++++++")
            return None
      result = func(self, *args, **kwargs)

tld/tests/base.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tld/tests/base.py:26: in inner
    result = func(self, *args, **kwargs)
tld/tests/test_commands.py:35: in test_1_update_tld_names_mozilla_command
    res = subprocess.check_output(["update-tld-names", "mozilla"]).strip()
/usr/lib/python3.11/subprocess.py:466: in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
/usr/lib/python3.11/subprocess.py:548: in run
    with Popen(*popenargs, **kwargs) as process:
/usr/lib/python3.11/subprocess.py:1026: in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Popen: returncode: 255 args: ['update-tld-names', 'mozilla']>
args = ['update-tld-names', 'mozilla'], executable = b'update-tld-names'
preexec_fn = None, close_fds = True, pass_fds = (), cwd = None, env = None
startupinfo = None, creationflags = 0, shell = False, p2cread = -1
p2cwrite = -1, c2pread = 5, c2pwrite = 6, errread = -1, errwrite = -1
restore_signals = True, gid = None, gids = None, uid = None, umask = -1
start_new_session = False, process_group = -1

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals,
                       gid, gids, uid, umask,
                       start_new_session, process_group):
        """Execute program (POSIX version)"""
if isinstance(args, (str, bytes)):
            args = [args]
        elif isinstance(args, os.PathLike):
            if shell:
                raise TypeError('path-like args is not allowed when '
                                'shell is true')
            args = [args]
        else:
            args = list(args)
if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable
if executable is None:
            executable = args[0]
sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN
                and os.path.dirname(executable)
                and preexec_fn is None
                and not close_fds
                and not pass_fds
                and cwd is None
                and (p2cread == -1 or p2cread > 2)
                and (c2pwrite == -1 or c2pwrite > 2)
                and (errwrite == -1 or errwrite > 2)
                and not start_new_session
                and process_group == -1
                and gid is None
                and gids is None
                and uid is None
                and umask < 0):
            self._posix_spawn(args, executable, env, restore_signals,
                              p2cread, p2cwrite,
                              c2pread, c2pwrite,
                              errread, errwrite)
            return
orig_executable = executable # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()
if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable 
name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session,
                        process_group, gid, gids, uid, umask,
                        preexec_fn, _USE_VFORK)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)
self._close_pipe_fds(p2cread, p2cwrite,
                                 c2pread, c2pwrite,
                                 errread, errwrite)
# Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)
if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass
try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                if err_msg == "noexec:chdir":
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                elif err_msg == "noexec":
                    err_msg = ""
                    err_filename = None
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                if err_filename is not None:
                  raise child_exception_type(errno_num, err_msg, err_filename)
E                   FileNotFoundError: [Errno 2] No such file or directory: 
'update-tld-names'

/usr/lib/python3.11/subprocess.py:1955: FileNotFoundError
____________________ TestCore.test_19_update_tld_names_cli _____________________

self = <tld.tests.test_core.TestCore testMethod=test_19_update_tld_names_cli>
args = (), kwargs = {}

    def inner(self, *args, **kwargs):
        """Inner."""
        if not is_internet_available():
            LOGGER.debug("\n\n%s", func.__name__)
            LOGGER.debug("============================")
            if func.__doc__:
                LOGGER.debug('""" %s """', func.__doc__.strip())
            LOGGER.debug("----------------------------")
            LOGGER.debug("Skipping because no Internet connection available.")
            LOGGER.debug("\n++++++++++++++++++++++++++++")
            return None
      result = func(self, *args, **kwargs)

tld/tests/base.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tld/tests/base.py:26: in inner
    result = func(self, *args, **kwargs)
tld/tests/test_core.py:686: in test_19_update_tld_names_cli
    res = update_tld_names_cli()
tld/utils.py:133: in update_tld_names_cli
    args = parser.parse_args(sys.argv[1:])
/usr/lib/python3.11/argparse.py:1889: in parse_args
    self.error(msg % ' '.join(argv))
/usr/lib/python3.11/argparse.py:2652: in error
    self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = ArgumentParser(prog='__main__.py', usage=None, description='Update TLD names', 
formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', 
add_help=True)
status = 2, message = '__main__.py: error: unrecognized arguments: -k\n'

    def exit(self, status=0, message=None):
        if message:
            self._print_message(message, _sys.stderr)
      _sys.exit(status)
E       SystemExit: 2

/usr/lib/python3.11/argparse.py:2639: SystemExit
=============================== warnings summary ===============================
tld/tests/test_core.py::TestCore::test_0_tld_names_loaded
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_0_tld_names_loaded>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_10_tld_bad_patterns_pass
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_10_tld_bad_patterns_pass>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_11_parse_tld_good_patterns
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_11_parse_tld_good_patterns>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_1_update_tld_names
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method 
internet_available_only.<locals>.inner of <tld.tests.test_core.TestCore 
testMethod=test_1_update_tld_names>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_20_parse_tld_custom_tld_names_good_patterns
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore 
testMethod=test_20_parse_tld_custom_tld_names_good_patterns>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_21_tld_custom_tld_names_good_patterns_pass_parsed_object
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore 
testMethod=test_21_tld_custom_tld_names_good_patterns_pass_parsed_object>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_22_reset_tld_names_for_custom_parser
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_22_reset_tld_names_for_custom_parser>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_27_tld_fail_silently_pass
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_27_tld_fail_silently_pass>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_2_fld_good_patterns_pass
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_2_fld_good_patterns_pass>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_3_fld_bad_patterns_pass
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_3_fld_bad_patterns_pass>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_4_override_settings
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_4_override_settings>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_5_tld_good_patterns_pass_parsed_object
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_5_tld_good_patterns_pass_parsed_object>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_8_fld_bad_patterns_exceptions
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_8_fld_bad_patterns_exceptions>>)
    return self.run(*args, **kwds)

tld/tests/test_core.py::TestCore::test_9_tld_good_patterns_pass
  /usr/lib/python3.11/unittest/case.py:678: DeprecationWarning: It is deprecated to return a 
value that is not None from a test case (<bound method log_info.<locals>.inner of 
<tld.tests.test_core.TestCore testMethod=test_9_tld_good_patterns_pass>>)
    return self.run(*args, **kwds)

tld/tests/test_registry.py::TestRegistry::test_import_from_registry
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_tld/build/tld/registry.py:10: 
DeprecationWarning: The `Registry` class is moved from `tld.registry` to `tld.base`.
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

---------- coverage: platform linux, python 3.11.9-final-0 -----------
Name                         Stmts   Miss  Cover
------------------------------------------------
tld/__init__.py                  7      0   100%
tld/base.py                     59      7    88%
tld/conf.py                     25      1    96%
tld/defaults.py                  7      0   100%
tld/exceptions.py               12      0   100%
tld/helpers.py                  10      0   100%
tld/registry.py                  7      0   100%
tld/result.py                   29      0   100%
tld/tests/__init__.py            0      0   100%
tld/tests/base.py               47     12    74%
tld/tests/test_commands.py      23      4    83%
tld/tests/test_core.py         289     20    93%
tld/tests/test_registry.py       8      0   100%
tld/trie.py                     37      0   100%
tld/utils.py                   206     13    94%
------------------------------------------------
TOTAL                          766     57    93%
Coverage annotated source written next to source
Coverage HTML written to dir htmlcov

=========================== short test summary info ============================
FAILED tld/tests/test_commands.py::TestCommands::test_1_update_tld_names_command
FAILED 
tld/tests/test_commands.py::TestCommands::test_1_update_tld_names_mozilla_command
FAILED tld/tests/test_core.py::TestCore::test_19_update_tld_names_cli - Syste...
=========== 3 failed, 26 passed, 2 deselected, 15 warnings in 1.10s ============
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_tld/build; python3.11 -m pytest -k 'not 
test_7_public_private and not test_26_case'
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.12 
3.11" returned exit code 13
make: *** [debian/rules:10: 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/202406/

About the archive rebuild: The build was made on virtual machines
of type m6a.large and r6a.large 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 affects, so that this is still visible in the BTS web
page for this package.

Thanks.

Reply via email to