Package: src:eumdac
Version: 3.0.0-1.1
Severity: serious
Tags: ftbfs forky sid

Dear maintainer:

During a rebuild of all packages in unstable, this package failed to build.

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

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

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 cannot 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:eumdac, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
I: pybuild base:317: python3.14 setup.py clean 
running clean
removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_eumdac/build' (and everything 
under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.14' does not exist -- can't clean it
I: pybuild base:317: python3.13 setup.py clean 
running clean
removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_eumdac/build' (and everything 
under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.13' does not exist -- can't clean it
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild

[... snipped ...]

            "Download complete: MockProduct",
            "Removing successfully finished order",
        )
>       assert_eumdac_output(args, expected)

tests/test_cli_sh.py:131: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_cli_sh.py:62: in assert_eumdac_output
    out, err = eumdac(args)
               ^^^^^^^^^^^^
tests/test_cli_sh.py:53: in eumdac
    cli(args)
eumdac/cli.py:1752: in cli
    parser_search.add_argument(
/usr/lib/python3.14/argparse.py:1530: in add_argument
    kwargs = self._get_positional_kwargs(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = ArgumentParser(prog='python3.14 -m pytest search', usage=None, 
description='Search for products', formatter_class=<class 
'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
dest = 'print_help'
kwargs = {'action': <class 'eumdac.cli.HelpAction'>, 'help': '==SUPPRESS==', 
'nargs': 0}
nargs = 0

    def _get_positional_kwargs(self, dest, **kwargs):
        # make sure required is not specified
        if 'required' in kwargs:
            msg = "'required' is an invalid argument for positionals"
            raise TypeError(msg)
    
        # mark positional arguments as required if at least one is
        # always required
        nargs = kwargs.get('nargs')
        if nargs == 0:
>           raise ValueError('nargs for positionals must be != 0')
E           ValueError: nargs for positionals must be != 0

/usr/lib/python3.14/argparse.py:1665: ValueError
__________________________ test_skip_download_product __________________________

temp_credentials = 
PosixPath('config_dir_test_skip_download_product/credentials')
temp_output_dir = PosixPath('output_dir_test_skip_download_product')

    @unittest.skipIf(INTEGRATION_TESTING, "Covered by unit testing")
    def test_skip_download_product(temp_credentials, temp_output_dir):
        args = f"download -c MockCollection -p MockProduct -o {temp_output_dir} 
--test".split()
        expected = ("Processing", "Using order", "Output directory:", "Skip")
    
        # First run to ensure the file exists already
>       eumdac(args)

tests/test_cli_sh.py:140: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_cli_sh.py:53: in eumdac
    cli(args)
eumdac/cli.py:1752: in cli
    parser_search.add_argument(
/usr/lib/python3.14/argparse.py:1530: in add_argument
    kwargs = self._get_positional_kwargs(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = ArgumentParser(prog='python3.14 -m pytest search', usage=None, 
description='Search for products', formatter_class=<class 
'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
dest = 'print_help'
kwargs = {'action': <class 'eumdac.cli.HelpAction'>, 'help': '==SUPPRESS==', 
'nargs': 0}
nargs = 0

    def _get_positional_kwargs(self, dest, **kwargs):
        # make sure required is not specified
        if 'required' in kwargs:
            msg = "'required' is an invalid argument for positionals"
            raise TypeError(msg)
    
        # mark positional arguments as required if at least one is
        # always required
        nargs = kwargs.get('nargs')
        if nargs == 0:
>           raise ValueError('nargs for positionals must be != 0')
E           ValueError: nargs for positionals must be != 0

/usr/lib/python3.14/argparse.py:1665: ValueError
_________________________ test_download_product_entry __________________________

temp_credentials = 
PosixPath('config_dir_test_download_product_entry/credentials')
temp_output_dir = PosixPath('output_dir_test_download_product_entry')

    @unittest.skipIf(INTEGRATION_TESTING, "Covered by unit testing")
    def test_download_product_entry(temp_credentials, temp_output_dir):
        args = f"download -c MockCollection -p MockProduct --entry *.nc -o 
{temp_output_dir} --test".split()
        # we expect a folder with the product name to be created when --entry 
is given
        expected = (
            "Processing",
            "Using order",
            "Output directory:",
            (
                "order_does_not_matter",
                [
                    "Job 1: Preparing download",
                    "Job 1: Preparing download",
                    "Job 1: Download complete",
                    "Job 1: Download complete",
                ],
            ),
            "Removing successfully finished order",
        )
>       assert_eumdac_output(args, expected)

tests/test_cli_sh.py:163: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_cli_sh.py:62: in assert_eumdac_output
    out, err = eumdac(args)
               ^^^^^^^^^^^^
tests/test_cli_sh.py:53: in eumdac
    cli(args)
eumdac/cli.py:1752: in cli
    parser_search.add_argument(
/usr/lib/python3.14/argparse.py:1530: in add_argument
    kwargs = self._get_positional_kwargs(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = ArgumentParser(prog='python3.14 -m pytest search', usage=None, 
description='Search for products', formatter_class=<class 
'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
dest = 'print_help'
kwargs = {'action': <class 'eumdac.cli.HelpAction'>, 'help': '==SUPPRESS==', 
'nargs': 0}
nargs = 0

    def _get_positional_kwargs(self, dest, **kwargs):
        # make sure required is not specified
        if 'required' in kwargs:
            msg = "'required' is an invalid argument for positionals"
            raise TypeError(msg)
    
        # mark positional arguments as required if at least one is
        # always required
        nargs = kwargs.get('nargs')
        if nargs == 0:
>           raise ValueError('nargs for positionals must be != 0')
E           ValueError: nargs for positionals must be != 0

/usr/lib/python3.14/argparse.py:1665: ValueError
___________________________ test_download_output_dir ___________________________

temp_credentials = PosixPath('config_dir_test_download_output_dir/credentials')
temp_output_dir = PosixPath('output_dir_test_download_output_dir')

    @unittest.skipIf(INTEGRATION_TESTING, "Covered by unit testing")
    def test_download_output_dir(temp_credentials, temp_output_dir):
        args = f"download -c MockCollection --time-range 2020-03-01 
2020-03-01T12:15 -o {temp_output_dir} --test".split()
        expected = (
            "Processing",
            "Using order",
            "Output directory:",
            (
                "order_does_not_matter",
                [
                    "Job 1: Preparing download",
                    "Job 2: Preparing download",
                    "Job 1: Download complete",
                    "Job 2: Download complete",
                ],
            ),
            "Removing successfully finished order",
        )
>       assert_eumdac_output(args, expected)

tests/test_cli_sh.py:184: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_cli_sh.py:62: in assert_eumdac_output
    out, err = eumdac(args)
               ^^^^^^^^^^^^
tests/test_cli_sh.py:53: in eumdac
    cli(args)
eumdac/cli.py:1752: in cli
    parser_search.add_argument(
/usr/lib/python3.14/argparse.py:1530: in add_argument
    kwargs = self._get_positional_kwargs(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = ArgumentParser(prog='python3.14 -m pytest search', usage=None, 
description='Search for products', formatter_class=<class 
'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
dest = 'print_help'
kwargs = {'action': <class 'eumdac.cli.HelpAction'>, 'help': '==SUPPRESS==', 
'nargs': 0}
nargs = 0

    def _get_positional_kwargs(self, dest, **kwargs):
        # make sure required is not specified
        if 'required' in kwargs:
            msg = "'required' is an invalid argument for positionals"
            raise TypeError(msg)
    
        # mark positional arguments as required if at least one is
        # always required
        nargs = kwargs.get('nargs')
        if nargs == 0:
>           raise ValueError('nargs for positionals must be != 0')
E           ValueError: nargs for positionals must be != 0

/usr/lib/python3.14/argparse.py:1665: ValueError
=============================== warnings summary ===============================
.pybuild/cpython3_3.14_eumdac/build/tests/test_request.py::test_request_should_retry[0]
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_eumdac/build/eumdac/request.py:103: 
DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and 
scheduled for removal in a future version. Use timezone-aware objects to 
represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, 
datetime.UTC).
    utc_endtime = datetime.utcfromtimestamp(timestamp)

.pybuild/cpython3_3.14_eumdac/build/tests/test_request.py::test_request_should_retry[0]
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_eumdac/build/eumdac/request.py:104: 
DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for 
removal in a future version. Use timezone-aware objects to represent datetimes 
in UTC: datetime.datetime.now(datetime.UTC).
    duration = utc_endtime - datetime.utcnow()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_cli.py::TestCommandLineInterface::test_describe_collection
FAILED 
tests/test_cli.py::TestCommandLineInterface::test_describe_list_collections
FAILED tests/test_cli.py::TestCommandLineInterface::test_describe_product - V...
FAILED tests/test_cli.py::TestCommandLineInterface::test_describe_product_flat
FAILED tests/test_cli.py::TestCommandLineInterface::test_load_credentials - V...
FAILED 
tests/test_cli.py::TestCommandLineInterface::test_load_credentials_corrupted_file
FAILED 
tests/test_cli.py::TestCommandLineInterface::test_load_credentials_file_not_found
FAILED tests/test_cli.py::TestCommandLineInterface::test_local_tailor_instances
FAILED tests/test_cli.py::TestCommandLineInterface::test_local_tailor_set - V...
FAILED tests/test_cli.py::TestCommandLineInterface::test_local_tailor_show - ...
FAILED tests/test_cli.py::TestCommandLineInterface::test_pipe_in - ValueError...
FAILED tests/test_cli.py::TestCommandLineInterface::test_print_help - ValueEr...
FAILED tests/test_cli.py::TestCommandLineInterface::test_print_version - Valu...
FAILED tests/test_cli.py::TestCommandLineInterface::test_search - ValueError:...
FAILED tests/test_cli.py::TestCommandLineInterface::test_search_bbox - ValueE...
FAILED tests/test_cli.py::TestCommandLineInterface::test_set_credentials - Va...
FAILED tests/test_cli_mtg.py::TestCommandLineInterface::test_download_coverage
FAILED tests/test_cli_s3.py::TestCommandLineInterface::test_sen3_search_params
FAILED tests/test_cli_sh.py::test_set_credentials - ValueError: nargs for pos...
FAILED tests/test_cli_sh.py::test_download_product - ValueError: nargs for po...
FAILED tests/test_cli_sh.py::test_skip_download_product - ValueError: nargs f...
FAILED tests/test_cli_sh.py::test_download_product_entry - ValueError: nargs ...
FAILED tests/test_cli_sh.py::test_download_output_dir - ValueError: nargs for...
ERROR tests/test_cli_sh.py::test_download_product - FileNotFoundError: [Errno...
ERROR tests/test_cli_sh.py::test_skip_download_product - FileNotFoundError: [...
ERROR tests/test_cli_sh.py::test_download_product_entry - FileNotFoundError: ...
ERROR tests/test_cli_sh.py::test_download_output_dir - FileNotFoundError: [Er...
======= 23 failed, 92 passed, 3 skipped, 2 warnings, 4 errors in 42.49s ========
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_eumdac/build; python3.14 -m pytest tests
I: pybuild base:317: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_eumdac/build; 
python3.13 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.13.11, pytest-9.0.2, pluggy-1.6.0
rootdir: /<<PKGBUILDDIR>>
plugins: typeguard-4.4.4
collected 118 items

tests/test_cli.py .................                                      [ 14%]
tests/test_cli_mtg.py ..                                                 [ 16%]
tests/test_cli_s3.py ss.                                                 [ 18%]
tests/test_cli_sh.py .........                                           [ 26%]
tests/test_collection.py ...............                                 [ 38%]
tests/test_customisation.py ..s..                                        [ 43%]
tests/test_datastore.py ..                                               [ 44%]
tests/test_datatailor.py .......                                         [ 50%]
tests/test_download_app.py .......                                       [ 56%]
tests/test_job_id.py .....                                               [ 61%]
tests/test_local_datatailor.py ..                                        [ 62%]
tests/test_lockfile.py ..                                                [ 64%]
tests/test_order.py ........                                             [ 71%]
tests/test_order_concurrency.py .                                        [ 72%]
tests/test_product.py ....                                               [ 75%]
tests/test_request.py .......                                            [ 81%]
tests/test_tailor_app.py .................                               [ 95%]
tests/test_token.py .....                                                [100%]

=============================== warnings summary ===============================
.pybuild/cpython3_3.13_eumdac/build/tests/test_request.py::test_request_should_retry[0]
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_eumdac/build/eumdac/request.py:103: 
DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and 
scheduled for removal in a future version. Use timezone-aware objects to 
represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, 
datetime.UTC).
    utc_endtime = datetime.utcfromtimestamp(timestamp)

.pybuild/cpython3_3.13_eumdac/build/tests/test_request.py::test_request_should_retry[0]
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_eumdac/build/eumdac/request.py:104: 
DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for 
removal in a future version. Use timezone-aware objects to represent datetimes 
in UTC: datetime.datetime.now(datetime.UTC).
    duration = utc_endtime - datetime.utcnow()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================= 115 passed, 3 skipped, 2 warnings in 50.69s ==================
dh_auto_test: error: pybuild --test -i python{version} -p "3.14 3.13" returned 
exit code 13
make: *** [debian/rules:11: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------

Reply via email to