pylint icon indicating copy to clipboard operation
pylint copied to clipboard

pylint 3.1.0 test failure with pytest 8.1.1

Open Thermi opened this issue 2 months ago • 4 comments

Bug description

Failure in test suite with astroid 3.1.0,

pipeline output here: https://gitlab.alpinelinux.org/alpine/aports/-/jobs/1329826

Configuration

No response

Command used

.testenv/bin/python3 -m pytest --benchmark-disable tests

Pylint output

============================= test session starts ==============================
platform linux -- Python 3.11.8, pytest-8.1.1, pluggy-1.4.0
benchmark: 4.0.0 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /builds/alpine/aports/community/py3-pylint/src/pylint-3.1.0
configfile: pyproject.toml
plugins: xdist-3.5.0, cov-4.1.0, benchmark-4.0.0, timeout-2.3.1
collected 2158 items
tests/benchmark/test_baseline_benchmarks.py .ss.s.s.s..                  [  0%]
tests/checkers/base/unittest_base.py s                                   [  0%]
tests/checkers/base/unittest_multi_naming_style.py ....                  [  0%]
tests/checkers/base/unittest_name_preset.py ....                         [  0%]
tests/checkers/unittest_base_checker.py ....                             [  1%]
tests/checkers/unittest_deprecated.py ..........................         [  2%]
tests/checkers/unittest_design.py ...                                    [  2%]
tests/checkers/unittest_format.py .........                              [  2%]
tests/checkers/unittest_imports.py .EEE..EE                              [  3%]
tests/checkers/unittest_misc.py ...........                              [  3%]
tests/checkers/unittest_non_ascii_name.py ..........................x    [  5%]
tests/checkers/unittest_refactoring.py ..                                [  5%]
tests/checkers/unittest_similar.py ..................                    [  5%]
tests/checkers/unittest_spelling.py .sssssssssssssssssssssssssssssssssss [  7%]
sssssss                                                                  [  7%]
tests/checkers/unittest_stdlib.py .                                      [  7%]
tests/checkers/unittest_strings.py .                                     [  8%]
tests/checkers/unittest_typecheck.py ...                                 [  8%]
tests/checkers/unittest_unicode/unittest_bad_chars.py .................. [  8%]
..................................                                       [ 10%]
tests/checkers/unittest_unicode/unittest_bidirectional_unicode.py ...... [ 10%]
.............................................                            [ 12%]
tests/checkers/unittest_unicode/unittest_functions.py .................. [ 13%]
........................................................................ [ 17%]
..                                                                       [ 17%]
tests/checkers/unittest_unicode/unittest_invalid_encoding.py xx........x [ 17%]
...........                                                              [ 18%]
tests/checkers/unittest_utils.py ....................................... [ 20%]
                                                                         [ 20%]
tests/checkers/unittest_variables.py .........E                          [ 20%]
tests/config/pylint_config/test_pylint_config_generate.py ....           [ 20%]
tests/config/pylint_config/test_pylint_config_help.py .                  [ 20%]
tests/config/pylint_config/test_pylint_config_utils.py .                 [ 20%]
tests/config/pylint_config/test_run_pylint_config.py .                   [ 20%]
tests/config/test_argparse_config.py ......                              [ 21%]
tests/config/test_config.py ....................                         [ 22%]
tests/config/test_find_default_config_files.py .................         [ 22%]
tests/config/test_functional_config_loading.py ......................... [ 23%]
....                                                                     [ 24%]
tests/config/test_per_directory_config.py .                              [ 24%]
tests/extensions/test_check_docs_utils.py ...............                [ 24%]
tests/extensions/test_private_import.py .....                            [ 25%]
tests/functional/r/redundant_unittest_assert.py ss                       [ 25%]
tests/lint/test_caching.py .....ss....                                   [ 25%]
tests/lint/test_pylinter.py ..                                           [ 25%]
tests/lint/test_run_pylint.py ..                                         [ 25%]
tests/lint/test_utils.py ...                                             [ 26%]
tests/lint/unittest_expand_modules.py .........                          [ 26%]
tests/lint/unittest_lint.py ............................................ [ 28%]
sss..................                                                    [ 29%]
tests/message/test_no_removed_msgid_or_symbol_used.py .                  [ 29%]
tests/message/unittest_message.py .                                      [ 29%]
tests/message/unittest_message_definition.py .......                     [ 29%]
tests/message/unittest_message_definition_store.py .................     [ 30%]
tests/message/unittest_message_id_store.py ........                      [ 31%]
tests/primer/test_primer_stdlib.py sssssssssssssssssssssssssssssssssssss [ 32%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 36%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 39%]
sssssssssssssssss                                                        [ 40%]
tests/profile/test_profile_against_externals.py s                        [ 40%]
tests/pyreverse/test_diadefs.py ...........                              [ 40%]
tests/pyreverse/test_diagrams.py .                                       [ 40%]
tests/pyreverse/test_inspector.py ....                                   [ 41%]
tests/pyreverse/test_main.py ........................                    [ 42%]
tests/pyreverse/test_printer.py ..........                               [ 42%]
tests/pyreverse/test_printer_factory.py ....                             [ 42%]
tests/pyreverse/test_pyreverse_functional.py .............               [ 43%]
tests/pyreverse/test_utils.py ......................                     [ 44%]
tests/pyreverse/test_writer.py ..................                        [ 45%]
tests/reporters/unittest_json_reporter.py .......                        [ 45%]
tests/reporters/unittest_reporting.py ..........                         [ 46%]
tests/test_check_parallel.py ...s......sssssssssssssssssssssssssss.sss   [ 47%]
tests/test_func.py ............                                          [ 48%]
tests/test_functional.py .......................s....................... [ 50%]
........................................................................ [ 53%]
ss..s.ss....ss.......................................................... [ 57%]
........................................................................ [ 60%]
...sss.s...................s...........ssF.........................FF.s. [ 63%]
........................................................................ [ 67%]
.................................................................s..s... [ 70%]
.............................ss.......................F................. [ 74%]
........s.F....................................................s........ [ 77%]
...........s.........s.......s...ss.............................s......s [ 80%]
.......s..sF...s..............s.F........ss............sss.........F.... [ 84%]
...............................F..........s..................s.......... [ 87%]
..............                                                           [ 87%]
tests/test_functional_directories.py .                                   [ 88%]
tests/test_import_graph.py ......                                        [ 88%]
tests/test_numversion.py ...........                                     [ 88%]
tests/test_pragma_parser.py .............                                [ 89%]
tests/test_pylint_runners.py ........                                    [ 89%]
tests/test_regr.py .F................                                    [ 90%]
tests/test_self.py ............x........................................ [ 93%]
..................s..................................................... [ 96%]
.................                                                        [ 97%]
tests/test_similar.py .s............                                     [ 97%]
tests/testutils/_primer/test_package_to_lint.py ..                       [ 97%]
tests/testutils/_primer/test_primer.py .......                           [ 98%]
tests/testutils/test_configuration_test.py .                             [ 98%]
tests/testutils/test_functional_testutils.py .....                       [ 98%]
tests/testutils/test_lint_module_output_update.py ...........            [ 99%]
tests/testutils/test_output_line.py .....                                [ 99%]
tests/testutils/test_pyreverse_testutils.py ...                          [ 99%]
tests/testutils/test_testutils_utils.py ........                         [ 99%]
tests/utils/unittest_ast_walker.py ..                                    [ 99%]
tests/utils/unittest_utils.py ..                                         [100%]
==================================== ERRORS ====================================
___ ERROR at setup of TestImportsChecker.test_relative_beyond_top_level_two ____
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f2eafe0cea0>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()
/usr/lib/python3.11/site-packages/_pytest/runner.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.11/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:85: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:65: in unraisable_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/logging.py:843: in pytest_runtest_setup
    yield from self._runtest_for(item, "setup")
/usr/lib/python3.11/site-packages/_pytest/logging.py:832: in _runtest_for
    yield
/usr/lib/python3.11/site-packages/_pytest/capture.py:878: in pytest_runtest_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:82: in pytest_runtest_setup
    yield from thread_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:63: in thread_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/runner.py:158: in pytest_runtest_setup
    item.session._setupstate.setup(item)
/usr/lib/python3.11/site-packages/_pytest/runner.py:515: in setup
    raise exc
/usr/lib/python3.11/site-packages/_pytest/runner.py:512: in setup
    col.setup()
/usr/lib/python3.11/site-packages/_pytest/python.py:1775: in setup
    self._request._fillfixtures()
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:687: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:541: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:570: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:647: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1079: in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1132: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:906: in call_fixture_func
    fixture_result = next(generator)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
request = <SubRequest '_xunit_setup_method_fixture_TestImportsChecker' for <Function test_relative_beyond_top_level_two>>
    def xunit_setup_method_fixture(request) -> Generator[None, None, None]:
        instance = request.instance
        method = request.function
        if setup_method is not None:
>           func = getattr(instance, setup_name)
E           AttributeError: 'NoneType' object has no attribute 'setup_method'
/usr/lib/python3.11/site-packages/_pytest/python.py:847: AttributeError
__ ERROR at setup of TestImportsChecker.test_relative_beyond_top_level_three ___
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f2eaf94bec0>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()
/usr/lib/python3.11/site-packages/_pytest/runner.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.11/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:85: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:65: in unraisable_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/logging.py:843: in pytest_runtest_setup
    yield from self._runtest_for(item, "setup")
/usr/lib/python3.11/site-packages/_pytest/logging.py:832: in _runtest_for
    yield
/usr/lib/python3.11/site-packages/_pytest/capture.py:878: in pytest_runtest_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:82: in pytest_runtest_setup
    yield from thread_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:63: in thread_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/runner.py:158: in pytest_runtest_setup
    item.session._setupstate.setup(item)
/usr/lib/python3.11/site-packages/_pytest/runner.py:515: in setup
    raise exc
/usr/lib/python3.11/site-packages/_pytest/runner.py:512: in setup
    col.setup()
/usr/lib/python3.11/site-packages/_pytest/python.py:1775: in setup
    self._request._fillfixtures()
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:687: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:541: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:570: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:647: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1079: in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1132: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:906: in call_fixture_func
    fixture_result = next(generator)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
request = <SubRequest '_xunit_setup_method_fixture_TestImportsChecker' for <Function test_relative_beyond_top_level_three>>
    def xunit_setup_method_fixture(request) -> Generator[None, None, None]:
        instance = request.instance
        method = request.function
        if setup_method is not None:
>           func = getattr(instance, setup_name)
E           AttributeError: 'NoneType' object has no attribute 'setup_method'
/usr/lib/python3.11/site-packages/_pytest/python.py:847: AttributeError
___ ERROR at setup of TestImportsChecker.test_relative_beyond_top_level_four ___
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f2eaf8d7d80>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()
/usr/lib/python3.11/site-packages/_pytest/runner.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.11/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:85: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:65: in unraisable_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/logging.py:843: in pytest_runtest_setup
    yield from self._runtest_for(item, "setup")
/usr/lib/python3.11/site-packages/_pytest/logging.py:832: in _runtest_for
    yield
/usr/lib/python3.11/site-packages/_pytest/capture.py:878: in pytest_runtest_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:82: in pytest_runtest_setup
    yield from thread_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:63: in thread_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/runner.py:158: in pytest_runtest_setup
    item.session._setupstate.setup(item)
/usr/lib/python3.11/site-packages/_pytest/runner.py:515: in setup
    raise exc
/usr/lib/python3.11/site-packages/_pytest/runner.py:512: in setup
    col.setup()
/usr/lib/python3.11/site-packages/_pytest/python.py:1775: in setup
    self._request._fillfixtures()
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:687: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:541: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:570: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:647: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1079: in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1132: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:906: in call_fixture_func
    fixture_result = next(generator)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
request = <SubRequest '_xunit_setup_method_fixture_TestImportsChecker' for <Function test_relative_beyond_top_level_four>>
    def xunit_setup_method_fixture(request) -> Generator[None, None, None]:
        instance = request.instance
        method = request.function
        if setup_method is not None:
>           func = getattr(instance, setup_name)
E           AttributeError: 'NoneType' object has no attribute 'setup_method'
/usr/lib/python3.11/site-packages/_pytest/python.py:847: AttributeError
__________ ERROR at setup of TestImportsChecker.test_preferred_module __________
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f2eafe0cea0>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()
/usr/lib/python3.11/site-packages/_pytest/runner.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.11/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:85: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:65: in unraisable_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/logging.py:843: in pytest_runtest_setup
    yield from self._runtest_for(item, "setup")
/usr/lib/python3.11/site-packages/_pytest/logging.py:832: in _runtest_for
    yield
/usr/lib/python3.11/site-packages/_pytest/capture.py:878: in pytest_runtest_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:82: in pytest_runtest_setup
    yield from thread_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:63: in thread_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/runner.py:158: in pytest_runtest_setup
    item.session._setupstate.setup(item)
/usr/lib/python3.11/site-packages/_pytest/runner.py:515: in setup
    raise exc
/usr/lib/python3.11/site-packages/_pytest/runner.py:512: in setup
    col.setup()
/usr/lib/python3.11/site-packages/_pytest/python.py:1775: in setup
    self._request._fillfixtures()
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:687: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:541: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:570: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:647: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1079: in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1132: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:906: in call_fixture_func
    fixture_result = next(generator)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
request = <SubRequest '_xunit_setup_method_fixture_TestImportsChecker' for <Function test_preferred_module>>
    def xunit_setup_method_fixture(request) -> Generator[None, None, None]:
        instance = request.instance
        method = request.function
        if setup_method is not None:
>           func = getattr(instance, setup_name)
E           AttributeError: 'NoneType' object has no attribute 'setup_method'
/usr/lib/python3.11/site-packages/_pytest/python.py:847: AttributeError
_______ ERROR at setup of TestImportsChecker.test_allow_reexport_package _______
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f2eaf94b7e0>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()
/usr/lib/python3.11/site-packages/_pytest/runner.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.11/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:85: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:65: in unraisable_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/logging.py:843: in pytest_runtest_setup
    yield from self._runtest_for(item, "setup")
/usr/lib/python3.11/site-packages/_pytest/logging.py:832: in _runtest_for
    yield
/usr/lib/python3.11/site-packages/_pytest/capture.py:878: in pytest_runtest_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:82: in pytest_runtest_setup
    yield from thread_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:63: in thread_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/runner.py:158: in pytest_runtest_setup
    item.session._setupstate.setup(item)
/usr/lib/python3.11/site-packages/_pytest/runner.py:515: in setup
    raise exc
/usr/lib/python3.11/site-packages/_pytest/runner.py:512: in setup
    col.setup()
/usr/lib/python3.11/site-packages/_pytest/python.py:1775: in setup
    self._request._fillfixtures()
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:687: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:541: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:570: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:647: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1079: in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1132: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:906: in call_fixture_func
    fixture_result = next(generator)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
request = <SubRequest '_xunit_setup_method_fixture_TestImportsChecker' for <Function test_allow_reexport_package>>
    def xunit_setup_method_fixture(request) -> Generator[None, None, None]:
        instance = request.instance
        method = request.function
        if setup_method is not None:
>           func = getattr(instance, setup_name)
E           AttributeError: 'NoneType' object has no attribute 'setup_method'
/usr/lib/python3.11/site-packages/_pytest/python.py:847: AttributeError
___________ ERROR at setup of TestMissingSubmodule.test_package_all ____________
cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f2eae1d3ec0>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
    @classmethod
    def from_call(
        cls,
        func: Callable[[], TResult],
        when: Literal["collect", "setup", "call", "teardown"],
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()
/usr/lib/python3.11/site-packages/_pytest/runner.py:340: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.11/site-packages/_pytest/runner.py:240: in <lambda>
    lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:85: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/unraisableexception.py:65: in unraisable_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/logging.py:843: in pytest_runtest_setup
    yield from self._runtest_for(item, "setup")
/usr/lib/python3.11/site-packages/_pytest/logging.py:832: in _runtest_for
    yield
/usr/lib/python3.11/site-packages/_pytest/capture.py:878: in pytest_runtest_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:82: in pytest_runtest_setup
    yield from thread_exception_runtest_hook()
/usr/lib/python3.11/site-packages/_pytest/threadexception.py:63: in thread_exception_runtest_hook
    yield
/usr/lib/python3.11/site-packages/_pytest/runner.py:158: in pytest_runtest_setup
    item.session._setupstate.setup(item)
/usr/lib/python3.11/site-packages/_pytest/runner.py:515: in setup
    raise exc
/usr/lib/python3.11/site-packages/_pytest/runner.py:512: in setup
    col.setup()
/usr/lib/python3.11/site-packages/_pytest/python.py:1775: in setup
    self._request._fillfixtures()
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:687: in _fillfixtures
    item.funcargs[argname] = self.getfixturevalue(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:541: in getfixturevalue
    fixturedef = self._get_active_fixturedef(argname)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:570: in _get_active_fixturedef
    self._compute_fixture_value(fixturedef)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:647: in _compute_fixture_value
    fixturedef.execute(request=subrequest)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1079: in execute
    result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
/usr/lib/python3.11/site-packages/pluggy/_hooks.py:501: in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
/usr/lib/python3.11/site-packages/pluggy/_manager.py:119: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup
    return (yield)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:1132: in pytest_fixture_setup
    result = call_fixture_func(fixturefunc, request, kwargs)
/usr/lib/python3.11/site-packages/_pytest/fixtures.py:906: in call_fixture_func
    fixture_result = next(generator)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
request = <SubRequest '_xunit_setup_method_fixture_TestMissingSubmodule' for <Function test_package_all>>
    def xunit_setup_method_fixture(request) -> Generator[None, None, None]:
        instance = request.instance
        method = request.function
        if setup_method is not None:
>           func = getattr(instance, setup_name)
E           AttributeError: 'NoneType' object has no attribute 'setup_method'
/usr/lib/python3.11/site-packages/_pytest/python.py:847: AttributeError
=================================== FAILURES ===================================
____________________ test_functional[inconsistent_returns] _____________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e9d400b50>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "inconsistent_returns.py":
E       
E       Unexpected in testdata:
E        111: inconsistent-return-statements
pylint/testutils/lint_module_test.py:147: AssertionError
_________________ test_functional[invalid_all_format_valid_5] __________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e9c3c84d0>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "invalid_all_format_valid_5.py":
E       
E       Unexpected in testdata:
E          5: no-name-in-module
pylint/testutils/lint_module_test.py:147: AssertionError
_________________ test_functional[invalid_all_format_valid_6] __________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e9c54c4d0>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "invalid_all_format_valid_6.py":
E       
E       Unexpected in testdata:
E          5: no-name-in-module
pylint/testutils/lint_module_test.py:147: AssertionError
____________________ test_functional[recursion_error_3159] _____________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e9768b550>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "recursion_error_3159.py":
E       
E       Unexpected in testdata:
E         17: arguments-differ
pylint/testutils/lint_module_test.py:147: AssertionError
_______________________ test_functional[regression_4680] _______________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e9643d350>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "regression_4680.py":
E       
E       Unexpected in testdata:
E          3: no-name-in-module
E         18: c-extension-no-member
pylint/testutils/lint_module_test.py:147: AssertionError
_________________________ test_functional[unreachable] _________________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e932e03d0>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "unreachable.py":
E       
E       Expected in testdata:
E         42: unreachable
E         80: unreachable
pylint/testutils/lint_module_test.py:147: AssertionError
__________________ test_functional[undefined_variable_typing] __________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e921e69d0>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "undefined_variable_typing.py":
E       
E       Unexpected in testdata:
E         10: no-name-in-module
pylint/testutils/lint_module_test.py:147: AssertionError
__________________ test_functional[unused_import_assigned_to] __________________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e90e07550>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "unused_import_assigned_to.py":
E       
E       Unexpected in testdata:
E         25: c-extension-no-member
pylint/testutils/lint_module_test.py:147: AssertionError
_____________ test_functional[used_before_assignment_else_return] ______________
self = <pylint.testutils.lint_module_test.LintModuleTest object at 0x7f2e9a2d5310>
    def runTest(self) -> None:
>       self._runTest()
E       AssertionError: Wrong message(s) raised for "used_before_assignment_else_return.py":
E       
E       Unexpected in testdata:
E         71: used-before-assignment
pylint/testutils/lint_module_test.py:147: AssertionError
______________________ test_package[file_names1-<lambda>] ______________________
finalize_linter = Checker 'main' (responsible for 'F0001', 'F0002', 'F0010', 'F0011', 'I0001', 'I0010', 'I0011', 'I0013', 'I0020', 'I0021', 'I0022', 'E0001', 'E0011', 'W0012', 'R0022', 'E0013', 'E0014', 'E0015')
file_names = ['precedence_test']
check = <function Equals.<locals>.<lambda> at 0x7f2eb04967a0>
    @pytest.mark.parametrize(
        "file_names, check",
        [
            (["package.__init__"], Equals("")),
            (["precedence_test"], Equals("")),
            (["import_package_subpackage_module"], Equals("")),
            (["pylint.checkers.__init__"], lambda x: "__path__" not in x),
            ([join(REGR_DATA, "classdoc_usage.py")], Equals("")),
            ([join(REGR_DATA, "module_global.py")], Equals("")),
            ([join(REGR_DATA, "decimal_inference.py")], Equals("")),
            ([join(REGR_DATA, "absimp", "string.py")], Equals("")),
            ([join(REGR_DATA, "bad_package")], lambda x: "Unused import missing" in x),
        ],
    )
    def test_package(
        finalize_linter: PyLinter, file_names: list[str], check: Callable[[str], bool]
    ) -> None:
        finalize_linter.check(file_names)
        finalize_linter.reporter = cast(  # Due to fixture
            testutils.GenericTestReporter, finalize_linter.reporter
        )
        got = finalize_linter.reporter.finalize().strip()
>       assert check(got)
E       assert False
E        +  where False = <function Equals.<locals>.<lambda> at 0x7f2eb04967a0>("E: 21: Module 'package.AudioTime' has no 'DECIMAL' member")
tests/test_regr.py:77: AssertionError
=========================== short test summary info ============================
FAILED tests/test_functional.py::test_functional[inconsistent_returns] - AssertionError: Wrong message(s) raised for "inconsistent_returns.py":
Unexpected in testdata:
 111: inconsistent-return-statements
FAILED tests/test_functional.py::test_functional[invalid_all_format_valid_5] - AssertionError: Wrong message(s) raised for "invalid_all_format_valid_5.py":
Unexpected in testdata:
   5: no-name-in-module
FAILED tests/test_functional.py::test_functional[invalid_all_format_valid_6] - AssertionError: Wrong message(s) raised for "invalid_all_format_valid_6.py":
Unexpected in testdata:
   5: no-name-in-module
FAILED tests/test_functional.py::test_functional[recursion_error_3159] - AssertionError: Wrong message(s) raised for "recursion_error_3159.py":
Unexpected in testdata:
  17: arguments-differ
FAILED tests/test_functional.py::test_functional[regression_4680] - AssertionError: Wrong message(s) raised for "regression_4680.py":
Unexpected in testdata:
   3: no-name-in-module
  18: c-extension-no-member
FAILED tests/test_functional.py::test_functional[unreachable] - AssertionError: Wrong message(s) raised for "unreachable.py":
Expected in testdata:
  42: unreachable
  80: unreachable
FAILED tests/test_functional.py::test_functional[undefined_variable_typing] - AssertionError: Wrong message(s) raised for "undefined_variable_typing.py":
Unexpected in testdata:
  10: no-name-in-module
FAILED tests/test_functional.py::test_functional[unused_import_assigned_to] - AssertionError: Wrong message(s) raised for "unused_import_assigned_to.py":
Unexpected in testdata:
  25: c-extension-no-member
FAILED tests/test_functional.py::test_functional[used_before_assignment_else_return] - AssertionError: Wrong message(s) raised for "used_before_assignment_else_return.py":
Unexpected in testdata:
  71: used-before-assignment
FAILED tests/test_regr.py::test_package[file_names1-<lambda>] - assert False
 +  where False = <function Equals.<locals>.<lambda> at 0x7f2eb04967a0>("E: 21: Module 'package.AudioTime' has no 'DECIMAL' member")
ERROR tests/checkers/unittest_imports.py::TestImportsChecker::test_relative_beyond_top_level_two - AttributeError: 'NoneType' object has no attribute 'setup_method'
ERROR tests/checkers/unittest_imports.py::TestImportsChecker::test_relative_beyond_top_level_three - AttributeError: 'NoneType' object has no attribute 'setup_method'
ERROR tests/checkers/unittest_imports.py::TestImportsChecker::test_relative_beyond_top_level_four - AttributeError: 'NoneType' object has no attribute 'setup_method'
ERROR tests/checkers/unittest_imports.py::TestImportsChecker::test_preferred_module - AttributeError: 'NoneType' object has no attribute 'setup_method'
ERROR tests/checkers/unittest_imports.py::TestImportsChecker::test_allow_reexport_package - AttributeError: 'NoneType' object has no attribute 'setup_method'
ERROR tests/checkers/unittest_variables.py::TestMissingSubmodule::test_package_all - AttributeError: 'NoneType' object has no attribute 'setup_method'
= 10 failed, 1810 passed, 327 skipped, 5 xfailed, 6 errors in 98.19s (0:01:38) =
>>> ERROR: py3-pylint: check failed

Expected behavior

Test suite passes

Pylint version

pylint 3.1.0
pytest 8.1.1
astroid 3.1.0
python 3.11.8

OS / Environment

Alpine Linux Edge

Additional dependencies

No response

Thermi avatar Apr 08 '24 19:04 Thermi

Hello!

In Debian, pylint fails as well with pytest 8.1.1 and python 3.11 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1066755

Regards

epsilon77 avatar Apr 10 '24 15:04 epsilon77

Will be closed in #9483

Pierre-Sassoulas avatar Apr 11 '24 20:04 Pierre-Sassoulas

I suspect this is basically a duplicate of #9477.

mtelka avatar Apr 26 '24 12:04 mtelka

Yes, I closed https://github.com/pylint-dev/pylint/issues/9477 as a duplicate of this one :)

Pierre-Sassoulas avatar Apr 26 '24 20:04 Pierre-Sassoulas