>>> py3-pylint: Building community/py3-pylint 3.3.7-r0 (using abuild 3.15.0-r0) started Mon, 13 Oct 2025 02:17:48 +0000 >>> py3-pylint: Validating /home/udu/aports/community/py3-pylint/APKBUILD... >>> py3-pylint: Analyzing dependencies... >>> py3-pylint: Installing for build: build-base py3-astroid py3-dill py3-isort py3-mccabe py3-platformdirs py3-tomlkit py3-gpep517 py3-installer py3-setuptools py3-wheel py3-gitpython py3-py py3-pytest py3-pytest-benchmark py3-pytest-cov py3-pytest-runner py3-pytest-timeout py3-pytest-xdist py3-requests py3-typing-extensions WARNING: opening /home/udu/packages//community: No such file or directory WARNING: opening /home/udu/packages//main: No such file or directory fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz (1/71) Installing py3-lazy-object-proxy (1.10.0-r1) (2/71) Installing py3-lazy-object-proxy-pyc (1.10.0-r1) (3/71) Installing py3-wrapt (1.17.0-r0) (4/71) Installing py3-wrapt-pyc (1.17.0-r0) (5/71) Installing py3-astroid-pyc (3.3.10-r0) (6/71) Installing py3-astroid (3.3.10-r0) (7/71) Installing py3-dill (0.4.0-r0) (8/71) Installing py3-dill-pyc (0.4.0-r0) (9/71) Installing py3-isort (6.0.1-r0) (10/71) Installing py3-isort-pyc (6.0.1-r0) (11/71) Installing py3-mccabe (0.7.0-r4) (12/71) Installing py3-mccabe-pyc (0.7.0-r4) (13/71) Installing py3-platformdirs (4.3.8-r0) (14/71) Installing py3-platformdirs-pyc (4.3.8-r0) (15/71) Installing py3-tomlkit (0.13.2-r0) (16/71) Installing py3-tomlkit-pyc (0.13.2-r0) (17/71) Installing py3-installer (0.7.0-r2) (18/71) Installing py3-installer-pyc (0.7.0-r2) (19/71) Installing py3-gpep517 (19-r0) (20/71) Installing py3-gpep517-pyc (19-r0) (21/71) Installing py3-parsing (3.2.3-r0) (22/71) Installing py3-parsing-pyc (3.2.3-r0) (23/71) Installing py3-packaging (25.0-r0) (24/71) Installing py3-packaging-pyc (25.0-r0) (25/71) Installing py3-setuptools (80.9.0-r0) (26/71) Installing py3-setuptools-pyc (80.9.0-r0) (27/71) Installing py3-wheel (0.46.1-r0) (28/71) Installing py3-wheel-pyc (0.46.1-r0) (29/71) Installing py3-smmap2 (5.0.1-r1) (30/71) Installing py3-smmap2-pyc (5.0.1-r1) (31/71) Installing py3-gitdb2 (4.0.12-r0) (32/71) Installing py3-gitdb2-pyc (4.0.12-r0) (33/71) Installing py3-typing-extensions (4.13.2-r0) (34/71) Installing py3-typing-extensions-pyc (4.13.2-r0) (35/71) Installing py3-gitpython (3.1.44-r0) (36/71) Installing py3-gitpython-pyc (3.1.44-r0) (37/71) Installing py3-py (1.11.0-r4) (38/71) Installing py3-py-pyc (1.11.0-r4) (39/71) Installing py3-iniconfig (2.1.0-r0) (40/71) Installing py3-iniconfig-pyc (2.1.0-r0) (41/71) Installing py3-pluggy (1.5.0-r0) (42/71) Installing py3-pluggy-pyc (1.5.0-r0) (43/71) Installing py3-pytest (8.3.5-r0) (44/71) Installing py3-pytest-pyc (8.3.5-r0) (45/71) Installing py3-py-cpuinfo (9.0.0-r4) (46/71) Installing py3-py-cpuinfo-pyc (9.0.0-r4) (47/71) Installing py3-pytest-benchmark (4.0.0-r4) (48/71) Installing py3-pytest-benchmark-pyc (4.0.0-r4) (49/71) Installing py3-coverage (7.8.2-r0) (50/71) Installing py3-coverage-pyc (7.8.2-r0) (51/71) Installing py3-pytest-cov (5.0.0-r0) (52/71) Installing py3-pytest-cov-pyc (5.0.0-r0) (53/71) Installing py3-pytest-runner (6.0.1-r1) (54/71) Installing py3-pytest-runner-pyc (6.0.1-r1) (55/71) Installing py3-pytest-timeout (2.3.1-r1) (56/71) Installing py3-pytest-timeout-pyc (2.3.1-r1) (57/71) Installing py3-execnet (2.1.1-r0) (58/71) Installing py3-execnet-pyc (2.1.1-r0) (59/71) Installing py3-pytest-xdist (3.6.1-r0) (60/71) Installing py3-pytest-xdist-pyc (3.6.1-r0) (61/71) Installing py3-certifi (2025.4.26-r0) (62/71) Installing py3-certifi-pyc (2025.4.26-r0) (63/71) Installing py3-charset-normalizer (3.4.2-r0) (64/71) Installing py3-charset-normalizer-pyc (3.4.2-r0) (65/71) Installing py3-idna (3.10-r0) (66/71) Installing py3-idna-pyc (3.10-r0) (67/71) Installing py3-urllib3 (1.26.20-r0) (68/71) Installing py3-urllib3-pyc (1.26.20-r0) (69/71) Installing py3-requests (2.32.5-r0) (70/71) Installing py3-requests-pyc (2.32.5-r0) (71/71) Installing .makedepends-py3-pylint (20251013.021749) Executing busybox-1.37.0-r19.trigger OK: 321 MiB in 160 packages >>> py3-pylint: Cleaning up srcdir >>> py3-pylint: Cleaning up pkgdir >>> py3-pylint: Cleaning up tmpdir >>> py3-pylint: Fetching py3-pylint-3.3.7.tar.gz::https://github.com/PyCQA/pylint/archive/refs/tags/v3.3.7.tar.gz >>> py3-pylint: Fetching py3-pylint-3.3.7.tar.gz::https://github.com/PyCQA/pylint/archive/refs/tags/v3.3.7.tar.gz >>> py3-pylint: Checking sha512sums... py3-pylint-3.3.7.tar.gz: OK >>> py3-pylint: Unpacking /var/cache/distfiles/py3-pylint-3.3.7.tar.gz... 2025-10-13 02:17:50,264 gpep517 INFO Building wheel via backend setuptools.build_meta /usr/lib/python3.12/site-packages/ptr/__init__.py:13: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81. import pkg_resources /usr/lib/python3.12/site-packages/ptr/__init__.py:81: SetuptoolsDeprecationWarning: The test command is disabled and references to it are deprecated. !! ******************************************************************************** Please remove any references to `setuptools.command.test` in all supported versions of the affected package. This deprecation is overdue, please update your project and remove deprecated calls to avoid build errors in the future. ******************************************************************************** !! class PyTest(orig.test): 2025-10-13 02:17:50,333 root INFO running bdist_wheel 2025-10-13 02:17:50,342 root INFO running build 2025-10-13 02:17:50,342 root INFO running build_py 2025-10-13 02:17:50,344 root INFO creating build/lib/pylint 2025-10-13 02:17:50,344 root INFO copying ./pylint/__pkginfo__.py -> build/lib/pylint 2025-10-13 02:17:50,344 root INFO copying ./pylint/interfaces.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO copying ./pylint/exceptions.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO copying ./pylint/typing.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO copying ./pylint/graph.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO copying ./pylint/__init__.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO copying ./pylint/__main__.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO copying ./pylint/constants.py -> build/lib/pylint 2025-10-13 02:17:50,345 root INFO creating build/lib/pylint/lint 2025-10-13 02:17:50,345 root INFO copying ./pylint/lint/run.py -> build/lib/pylint/lint 2025-10-13 02:17:50,345 root INFO copying ./pylint/lint/message_state_handler.py -> build/lib/pylint/lint 2025-10-13 02:17:50,345 root INFO copying ./pylint/lint/utils.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/parallel.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/caching.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/report_functions.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/__init__.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/pylinter.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/base_options.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO copying ./pylint/lint/expand_modules.py -> build/lib/pylint/lint 2025-10-13 02:17:50,346 root INFO creating build/lib/pylint/message 2025-10-13 02:17:50,346 root INFO copying ./pylint/message/_deleted_message_ids.py -> build/lib/pylint/message 2025-10-13 02:17:50,346 root INFO copying ./pylint/message/message_definition.py -> build/lib/pylint/message 2025-10-13 02:17:50,347 root INFO copying ./pylint/message/message_definition_store.py -> build/lib/pylint/message 2025-10-13 02:17:50,347 root INFO copying ./pylint/message/message_id_store.py -> build/lib/pylint/message 2025-10-13 02:17:50,347 root INFO copying ./pylint/message/message.py -> build/lib/pylint/message 2025-10-13 02:17:50,347 root INFO copying ./pylint/message/__init__.py -> build/lib/pylint/message 2025-10-13 02:17:50,347 root INFO creating build/lib/pylint/pyreverse 2025-10-13 02:17:50,347 root INFO copying ./pylint/pyreverse/mermaidjs_printer.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,347 root INFO copying ./pylint/pyreverse/diagrams.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,347 root INFO copying ./pylint/pyreverse/diadefslib.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,347 root INFO copying ./pylint/pyreverse/inspector.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,347 root INFO copying ./pylint/pyreverse/writer.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,347 root INFO copying ./pylint/pyreverse/utils.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO copying ./pylint/pyreverse/printer_factory.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO copying ./pylint/pyreverse/printer.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO copying ./pylint/pyreverse/dot_printer.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO copying ./pylint/pyreverse/__init__.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO copying ./pylint/pyreverse/main.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO copying ./pylint/pyreverse/plantuml_printer.py -> build/lib/pylint/pyreverse 2025-10-13 02:17:50,348 root INFO creating build/lib/pylint/config 2025-10-13 02:17:50,348 root INFO copying ./pylint/config/arguments_provider.py -> build/lib/pylint/config 2025-10-13 02:17:50,348 root INFO copying ./pylint/config/_breaking_changes.py -> build/lib/pylint/config 2025-10-13 02:17:50,348 root INFO copying ./pylint/config/find_default_config_files.py -> build/lib/pylint/config 2025-10-13 02:17:50,348 root INFO copying ./pylint/config/arguments_manager.py -> build/lib/pylint/config 2025-10-13 02:17:50,348 root INFO copying ./pylint/config/config_initialization.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/utils.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/help_formatter.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/callback_actions.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/exceptions.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/argument.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/config_file_parser.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/__init__.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO copying ./pylint/config/deprecation_actions.py -> build/lib/pylint/config 2025-10-13 02:17:50,349 root INFO creating build/lib/pylint/testutils 2025-10-13 02:17:50,349 root INFO copying ./pylint/testutils/unittest_linter.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/tokenize_str.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/configuration_test.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/get_test_info.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/_run.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/pyreverse.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/utils.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/checker_test_case.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/output_line.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/__init__.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/reporter_for_tests.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/lint_module_test.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,350 root INFO copying ./pylint/testutils/global_test_linter.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,351 root INFO copying ./pylint/testutils/decorator.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,351 root INFO copying ./pylint/testutils/constants.py -> build/lib/pylint/testutils 2025-10-13 02:17:50,351 root INFO creating build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/linterstats.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/ast_walker.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/utils.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/pragma_parser.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/docs.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/file_state.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO copying ./pylint/utils/__init__.py -> build/lib/pylint/utils 2025-10-13 02:17:50,351 root INFO creating build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/text.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/collecting_reporter.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/json_reporter.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/multi_reporter.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/base_reporter.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/reports_handler_mix_in.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO copying ./pylint/reporters/__init__.py -> build/lib/pylint/reporters 2025-10-13 02:17:50,352 root INFO creating build/lib/pylint/extensions 2025-10-13 02:17:50,352 root INFO copying ./pylint/extensions/code_style.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,352 root INFO copying ./pylint/extensions/for_any_all.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/magic_value.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/broad_try_clause.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/consider_refactoring_into_while_condition.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/no_self_use.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/_check_docs_utils.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/dunder.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/comparison_placement.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/empty_comment.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/check_elif.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/eq_without_hash.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/docparams.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,353 root INFO copying ./pylint/extensions/private_import.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/dict_init_mutate.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/overlapping_exceptions.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/while_used.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/docstyle.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/typing.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/consider_ternary_expression.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/__init__.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/redefined_loop_name.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/set_membership.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/mccabe.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/confusing_elif.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,354 root INFO copying ./pylint/extensions/bad_builtin.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,355 root INFO copying ./pylint/extensions/redefined_variable_type.py -> build/lib/pylint/extensions 2025-10-13 02:17:50,355 root INFO creating build/lib/pylint/checkers 2025-10-13 02:17:50,355 root INFO copying ./pylint/checkers/unsupported_version.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,355 root INFO copying ./pylint/checkers/variables.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,355 root INFO copying ./pylint/checkers/modified_iterating_checker.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,355 root INFO copying ./pylint/checkers/symilar.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,355 root INFO copying ./pylint/checkers/stdlib.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,355 root INFO copying ./pylint/checkers/deprecated.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/lambda_expressions.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/dataclass_checker.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/threading_checker.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/dunder_methods.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/ellipsis_checker.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/design_analysis.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/method_args.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/utils.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/exceptions.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/spelling.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,356 root INFO copying ./pylint/checkers/bad_chained_comparison.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/strings.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/base_checker.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/unicode.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/typecheck.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/misc.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/format.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/raw_metrics.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/__init__.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/nested_min_max.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/logging.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,357 root INFO copying ./pylint/checkers/imports.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,358 root INFO copying ./pylint/checkers/newstyle.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,358 root INFO copying ./pylint/checkers/async.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,358 root INFO copying ./pylint/checkers/non_ascii_names.py -> build/lib/pylint/checkers 2025-10-13 02:17:50,358 root INFO creating build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO copying ./pylint/config/_pylint_config/help_message.py -> build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO copying ./pylint/config/_pylint_config/generate_command.py -> build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO copying ./pylint/config/_pylint_config/setup.py -> build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO copying ./pylint/config/_pylint_config/utils.py -> build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO copying ./pylint/config/_pylint_config/__init__.py -> build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO copying ./pylint/config/_pylint_config/main.py -> build/lib/pylint/config/_pylint_config 2025-10-13 02:17:50,358 root INFO creating build/lib/pylint/testutils/functional 2025-10-13 02:17:50,358 root INFO copying ./pylint/testutils/functional/test_file.py -> build/lib/pylint/testutils/functional 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/functional/find_functional_tests.py -> build/lib/pylint/testutils/functional 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/functional/lint_module_output_update.py -> build/lib/pylint/testutils/functional 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/functional/__init__.py -> build/lib/pylint/testutils/functional 2025-10-13 02:17:50,359 root INFO creating build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/_primer/package_to_lint.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/_primer/primer_run_command.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/_primer/primer_prepare_command.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/_primer/primer_command.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/_primer/primer_compare_command.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,359 root INFO copying ./pylint/testutils/_primer/__init__.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,360 root INFO copying ./pylint/testutils/_primer/primer.py -> build/lib/pylint/testutils/_primer 2025-10-13 02:17:50,360 root INFO creating build/lib/pylint/reporters/ureports 2025-10-13 02:17:50,360 root INFO copying ./pylint/reporters/ureports/base_writer.py -> build/lib/pylint/reporters/ureports 2025-10-13 02:17:50,360 root INFO copying ./pylint/reporters/ureports/text_writer.py -> build/lib/pylint/reporters/ureports 2025-10-13 02:17:50,360 root INFO copying ./pylint/reporters/ureports/nodes.py -> build/lib/pylint/reporters/ureports 2025-10-13 02:17:50,360 root INFO copying ./pylint/reporters/ureports/__init__.py -> build/lib/pylint/reporters/ureports 2025-10-13 02:17:50,360 root INFO creating build/lib/pylint/checkers/refactoring 2025-10-13 02:17:50,360 root INFO copying ./pylint/checkers/refactoring/implicit_booleaness_checker.py -> build/lib/pylint/checkers/refactoring 2025-10-13 02:17:50,360 root INFO copying ./pylint/checkers/refactoring/refactoring_checker.py -> build/lib/pylint/checkers/refactoring 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/refactoring/__init__.py -> build/lib/pylint/checkers/refactoring 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/refactoring/not_checker.py -> build/lib/pylint/checkers/refactoring 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/refactoring/recommendation_checker.py -> build/lib/pylint/checkers/refactoring 2025-10-13 02:17:50,361 root INFO creating build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/comparison_checker.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/docstring_checker.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/pass_checker.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/basic_error_checker.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/function_checker.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/__init__.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,361 root INFO copying ./pylint/checkers/base/basic_checker.py -> build/lib/pylint/checkers/base 2025-10-13 02:17:50,362 root INFO creating build/lib/pylint/checkers/classes 2025-10-13 02:17:50,362 root INFO copying ./pylint/checkers/classes/special_methods_checker.py -> build/lib/pylint/checkers/classes 2025-10-13 02:17:50,362 root INFO copying ./pylint/checkers/classes/class_checker.py -> build/lib/pylint/checkers/classes 2025-10-13 02:17:50,362 root INFO copying ./pylint/checkers/classes/__init__.py -> build/lib/pylint/checkers/classes 2025-10-13 02:17:50,362 root INFO creating build/lib/pylint/checkers/base/name_checker 2025-10-13 02:17:50,362 root INFO copying ./pylint/checkers/base/name_checker/naming_style.py -> build/lib/pylint/checkers/base/name_checker 2025-10-13 02:17:50,362 root INFO copying ./pylint/checkers/base/name_checker/__init__.py -> build/lib/pylint/checkers/base/name_checker 2025-10-13 02:17:50,362 root INFO copying ./pylint/checkers/base/name_checker/checker.py -> build/lib/pylint/checkers/base/name_checker 2025-10-13 02:17:50,363 root INFO running egg_info 2025-10-13 02:17:50,364 root INFO creating pylint.egg-info 2025-10-13 02:17:50,365 root INFO writing pylint.egg-info/PKG-INFO 2025-10-13 02:17:50,365 root INFO writing dependency_links to pylint.egg-info/dependency_links.txt 2025-10-13 02:17:50,365 root INFO writing entry points to pylint.egg-info/entry_points.txt 2025-10-13 02:17:50,366 root INFO writing requirements to pylint.egg-info/requires.txt 2025-10-13 02:17:50,366 root INFO writing top-level names to pylint.egg-info/top_level.txt 2025-10-13 02:17:50,366 root INFO writing manifest file 'pylint.egg-info/SOURCES.txt' 2025-10-13 02:17:50,371 root INFO reading manifest file 'pylint.egg-info/SOURCES.txt' 2025-10-13 02:17:50,371 root INFO reading manifest template 'MANIFEST.in' 2025-10-13 02:17:50,395 root WARNING no previously-included directories found matching 'doc/_build' 2025-10-13 02:17:50,396 root WARNING no previously-included directories found matching 'tests/.benchmarks' 2025-10-13 02:17:50,397 root WARNING warning: no previously-included files matching '__pycache__' found anywhere in distribution 2025-10-13 02:17:50,399 root WARNING warning: no previously-included files matching '*.py[co]' found anywhere in distribution 2025-10-13 02:17:50,399 root INFO adding license file 'LICENSE' 2025-10-13 02:17:50,399 root INFO adding license file 'CONTRIBUTORS.txt' 2025-10-13 02:17:50,418 root INFO writing manifest file 'pylint.egg-info/SOURCES.txt' 2025-10-13 02:17:50,439 root INFO copying ./pylint/py.typed -> build/lib/pylint 2025-10-13 02:17:50,439 root INFO copying ./pylint/testutils/testing_pylintrc -> build/lib/pylint/testutils 2025-10-13 02:17:50,445 root INFO installing to build/bdist.linux-x86_64/wheel 2025-10-13 02:17:50,445 root INFO running install 2025-10-13 02:17:50,449 root INFO running install_lib 2025-10-13 02:17:50,451 root INFO creating build/bdist.linux-x86_64/wheel 2025-10-13 02:17:50,451 root INFO creating build/bdist.linux-x86_64/wheel/pylint 2025-10-13 02:17:50,451 root INFO copying build/lib/pylint/py.typed -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,452 root INFO creating build/bdist.linux-x86_64/wheel/pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/run.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/message_state_handler.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/parallel.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/caching.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/report_functions.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/pylinter.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/base_options.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/lint/expand_modules.py -> build/bdist.linux-x86_64/wheel/./pylint/lint 2025-10-13 02:17:50,452 root INFO creating build/bdist.linux-x86_64/wheel/pylint/message 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/message/_deleted_message_ids.py -> build/bdist.linux-x86_64/wheel/./pylint/message 2025-10-13 02:17:50,452 root INFO copying build/lib/pylint/message/message_definition.py -> build/bdist.linux-x86_64/wheel/./pylint/message 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/message/message_definition_store.py -> build/bdist.linux-x86_64/wheel/./pylint/message 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/message/message_id_store.py -> build/bdist.linux-x86_64/wheel/./pylint/message 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/message/message.py -> build/bdist.linux-x86_64/wheel/./pylint/message 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/message/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/message 2025-10-13 02:17:50,453 root INFO creating build/bdist.linux-x86_64/wheel/pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/mermaidjs_printer.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/diagrams.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/diadefslib.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/inspector.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/writer.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/printer_factory.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/printer.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/dot_printer.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/main.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,453 root INFO copying build/lib/pylint/pyreverse/plantuml_printer.py -> build/bdist.linux-x86_64/wheel/./pylint/pyreverse 2025-10-13 02:17:50,454 root INFO creating build/bdist.linux-x86_64/wheel/pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/arguments_provider.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_breaking_changes.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO creating build/bdist.linux-x86_64/wheel/pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_pylint_config/help_message.py -> build/bdist.linux-x86_64/wheel/./pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_pylint_config/generate_command.py -> build/bdist.linux-x86_64/wheel/./pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_pylint_config/setup.py -> build/bdist.linux-x86_64/wheel/./pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_pylint_config/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_pylint_config/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/_pylint_config/main.py -> build/bdist.linux-x86_64/wheel/./pylint/config/_pylint_config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/find_default_config_files.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/arguments_manager.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/config_initialization.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/help_formatter.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,454 root INFO copying build/lib/pylint/config/callback_actions.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/config/exceptions.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/config/argument.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/config/config_file_parser.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/config/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/config/deprecation_actions.py -> build/bdist.linux-x86_64/wheel/./pylint/config 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/__pkginfo__.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,455 root INFO creating build/bdist.linux-x86_64/wheel/pylint/testutils 2025-10-13 02:17:50,455 root INFO creating build/bdist.linux-x86_64/wheel/pylint/testutils/functional 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/functional/test_file.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/functional 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/functional/find_functional_tests.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/functional 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/functional/lint_module_output_update.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/functional 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/functional/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/functional 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/testing_pylintrc -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/unittest_linter.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/tokenize_str.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,455 root INFO copying build/lib/pylint/testutils/configuration_test.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/get_test_info.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_run.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/pyreverse.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO creating build/bdist.linux-x86_64/wheel/pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/package_to_lint.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/primer_run_command.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/primer_prepare_command.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/primer_command.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/primer_compare_command.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/_primer/primer.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils/_primer 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/checker_test_case.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/output_line.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/reporter_for_tests.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,456 root INFO copying build/lib/pylint/testutils/lint_module_test.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/testutils/global_test_linter.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/testutils/decorator.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/testutils/constants.py -> build/bdist.linux-x86_64/wheel/./pylint/testutils 2025-10-13 02:17:50,457 root INFO creating build/bdist.linux-x86_64/wheel/pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/linterstats.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/ast_walker.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/pragma_parser.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/docs.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/file_state.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/utils/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/utils 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/interfaces.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/exceptions.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/typing.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/graph.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,457 root INFO copying build/lib/pylint/__main__.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,458 root INFO creating build/bdist.linux-x86_64/wheel/pylint/reporters 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/text.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/collecting_reporter.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/json_reporter.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/multi_reporter.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO creating build/bdist.linux-x86_64/wheel/pylint/reporters/ureports 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/ureports/base_writer.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters/ureports 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/ureports/text_writer.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters/ureports 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/ureports/nodes.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters/ureports 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/ureports/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters/ureports 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/base_reporter.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/reports_handler_mix_in.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO copying build/lib/pylint/reporters/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/reporters 2025-10-13 02:17:50,458 root INFO creating build/bdist.linux-x86_64/wheel/pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/code_style.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/for_any_all.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/magic_value.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/broad_try_clause.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/consider_refactoring_into_while_condition.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/no_self_use.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/_check_docs_utils.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/dunder.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/comparison_placement.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/empty_comment.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/check_elif.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/eq_without_hash.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/docparams.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/private_import.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/dict_init_mutate.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/overlapping_exceptions.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,459 root INFO copying build/lib/pylint/extensions/while_used.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/docstyle.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/typing.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/consider_ternary_expression.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/redefined_loop_name.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/set_membership.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/mccabe.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/confusing_elif.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/bad_builtin.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/extensions/redefined_variable_type.py -> build/bdist.linux-x86_64/wheel/./pylint/extensions 2025-10-13 02:17:50,460 root INFO creating build/bdist.linux-x86_64/wheel/pylint/checkers 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/checkers/unsupported_version.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/checkers/variables.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/checkers/modified_iterating_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/checkers/symilar.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,460 root INFO copying build/lib/pylint/checkers/stdlib.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/deprecated.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/lambda_expressions.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/dataclass_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/threading_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/dunder_methods.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/ellipsis_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/design_analysis.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/method_args.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,461 root INFO creating build/bdist.linux-x86_64/wheel/pylint/checkers/refactoring 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/refactoring/implicit_booleaness_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/refactoring 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/refactoring/refactoring_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/refactoring 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/refactoring/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/refactoring 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/refactoring/not_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/refactoring 2025-10-13 02:17:50,461 root INFO copying build/lib/pylint/checkers/refactoring/recommendation_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/refactoring 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/utils.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/exceptions.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/spelling.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/bad_chained_comparison.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/strings.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/base_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,462 root INFO creating build/bdist.linux-x86_64/wheel/pylint/checkers/base 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/base/comparison_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/base/docstring_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,462 root INFO creating build/bdist.linux-x86_64/wheel/pylint/checkers/base/name_checker 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/base/name_checker/naming_style.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base/name_checker 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/base/name_checker/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base/name_checker 2025-10-13 02:17:50,462 root INFO copying build/lib/pylint/checkers/base/name_checker/checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base/name_checker 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/base/pass_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/base/basic_error_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/base/function_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/base/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/base/basic_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/base 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/unicode.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/typecheck.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/misc.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/format.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,463 root INFO creating build/bdist.linux-x86_64/wheel/pylint/checkers/classes 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/classes/special_methods_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/classes 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/classes/class_checker.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/classes 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/classes/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers/classes 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/raw_metrics.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,463 root INFO copying build/lib/pylint/checkers/__init__.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/checkers/nested_min_max.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/checkers/logging.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/checkers/imports.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/checkers/newstyle.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/checkers/async.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/checkers/non_ascii_names.py -> build/bdist.linux-x86_64/wheel/./pylint/checkers 2025-10-13 02:17:50,464 root INFO copying build/lib/pylint/constants.py -> build/bdist.linux-x86_64/wheel/./pylint 2025-10-13 02:17:50,464 root INFO running install_egg_info 2025-10-13 02:17:50,466 root INFO Copying pylint.egg-info to build/bdist.linux-x86_64/wheel/./pylint-3.3.7-py3.12.egg-info 2025-10-13 02:17:50,466 root INFO running install_scripts 2025-10-13 02:17:50,467 root INFO creating build/bdist.linux-x86_64/wheel/pylint-3.3.7.dist-info/WHEEL 2025-10-13 02:17:50,467 wheel INFO creating '/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.dist/.tmp-mg06f9ew/pylint-3.3.7-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it 2025-10-13 02:17:50,467 wheel INFO adding 'pylint/__init__.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/__main__.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/__pkginfo__.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/constants.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/exceptions.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/graph.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/interfaces.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/py.typed' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/typing.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/checkers/__init__.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/checkers/async.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/checkers/bad_chained_comparison.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/checkers/base_checker.py' 2025-10-13 02:17:50,468 wheel INFO adding 'pylint/checkers/dataclass_checker.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/deprecated.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/design_analysis.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/dunder_methods.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/ellipsis_checker.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/exceptions.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/format.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/imports.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/lambda_expressions.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/logging.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/method_args.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/misc.py' 2025-10-13 02:17:50,469 wheel INFO adding 'pylint/checkers/modified_iterating_checker.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/nested_min_max.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/newstyle.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/non_ascii_names.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/raw_metrics.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/spelling.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/stdlib.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/strings.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/symilar.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/threading_checker.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/typecheck.py' 2025-10-13 02:17:50,470 wheel INFO adding 'pylint/checkers/unicode.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/unsupported_version.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/utils.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/variables.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/base/__init__.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/base/basic_checker.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/base/basic_error_checker.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/base/comparison_checker.py' 2025-10-13 02:17:50,471 wheel INFO adding 'pylint/checkers/base/docstring_checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/base/function_checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/base/pass_checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/base/name_checker/__init__.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/base/name_checker/checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/base/name_checker/naming_style.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/classes/__init__.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/classes/class_checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/classes/special_methods_checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/refactoring/__init__.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/refactoring/implicit_booleaness_checker.py' 2025-10-13 02:17:50,472 wheel INFO adding 'pylint/checkers/refactoring/not_checker.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/checkers/refactoring/recommendation_checker.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/checkers/refactoring/refactoring_checker.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/__init__.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/_breaking_changes.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/argument.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/arguments_manager.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/arguments_provider.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/callback_actions.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/config_file_parser.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/config_initialization.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/deprecation_actions.py' 2025-10-13 02:17:50,473 wheel INFO adding 'pylint/config/exceptions.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/find_default_config_files.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/help_formatter.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/utils.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/_pylint_config/__init__.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/_pylint_config/generate_command.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/_pylint_config/help_message.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/_pylint_config/main.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/_pylint_config/setup.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/config/_pylint_config/utils.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/extensions/__init__.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/extensions/_check_docs_utils.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/extensions/bad_builtin.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/extensions/broad_try_clause.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/extensions/check_elif.py' 2025-10-13 02:17:50,474 wheel INFO adding 'pylint/extensions/code_style.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/comparison_placement.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/confusing_elif.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/consider_refactoring_into_while_condition.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/consider_ternary_expression.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/dict_init_mutate.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/docparams.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/docstyle.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/dunder.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/empty_comment.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/eq_without_hash.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/for_any_all.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/magic_value.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/mccabe.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/no_self_use.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/overlapping_exceptions.py' 2025-10-13 02:17:50,475 wheel INFO adding 'pylint/extensions/private_import.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/extensions/redefined_loop_name.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/extensions/redefined_variable_type.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/extensions/set_membership.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/extensions/typing.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/extensions/while_used.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/__init__.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/base_options.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/caching.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/expand_modules.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/message_state_handler.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/parallel.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/pylinter.py' 2025-10-13 02:17:50,476 wheel INFO adding 'pylint/lint/report_functions.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/lint/run.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/lint/utils.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/message/__init__.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/message/_deleted_message_ids.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/message/message.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/message/message_definition.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/message/message_definition_store.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/message/message_id_store.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/pyreverse/__init__.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/pyreverse/diadefslib.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/pyreverse/diagrams.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/pyreverse/dot_printer.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/pyreverse/inspector.py' 2025-10-13 02:17:50,477 wheel INFO adding 'pylint/pyreverse/main.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/pyreverse/mermaidjs_printer.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/pyreverse/plantuml_printer.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/pyreverse/printer.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/pyreverse/printer_factory.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/pyreverse/utils.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/pyreverse/writer.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/__init__.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/base_reporter.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/collecting_reporter.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/json_reporter.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/multi_reporter.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/reports_handler_mix_in.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/text.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/ureports/__init__.py' 2025-10-13 02:17:50,478 wheel INFO adding 'pylint/reporters/ureports/base_writer.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/reporters/ureports/nodes.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/reporters/ureports/text_writer.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/__init__.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/_run.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/checker_test_case.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/configuration_test.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/constants.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/decorator.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/get_test_info.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/global_test_linter.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/lint_module_test.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/output_line.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/pyreverse.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/reporter_for_tests.py' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/testing_pylintrc' 2025-10-13 02:17:50,479 wheel INFO adding 'pylint/testutils/tokenize_str.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/unittest_linter.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/utils.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/__init__.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/package_to_lint.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/primer.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/primer_command.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/primer_compare_command.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/primer_prepare_command.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/_primer/primer_run_command.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/functional/__init__.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/functional/find_functional_tests.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/functional/lint_module_output_update.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/testutils/functional/test_file.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/utils/__init__.py' 2025-10-13 02:17:50,480 wheel INFO adding 'pylint/utils/ast_walker.py' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint/utils/docs.py' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint/utils/file_state.py' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint/utils/linterstats.py' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint/utils/pragma_parser.py' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint/utils/utils.py' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint-3.3.7.dist-info/licenses/CONTRIBUTORS.txt' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint-3.3.7.dist-info/licenses/LICENSE' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint-3.3.7.dist-info/METADATA' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint-3.3.7.dist-info/WHEEL' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint-3.3.7.dist-info/entry_points.txt' 2025-10-13 02:17:50,481 wheel INFO adding 'pylint-3.3.7.dist-info/top_level.txt' 2025-10-13 02:17:50,482 wheel INFO adding 'pylint-3.3.7.dist-info/RECORD' 2025-10-13 02:17:50,482 root INFO removing build/bdist.linux-x86_64/wheel 2025-10-13 02:17:50,484 gpep517 INFO The backend produced .dist/pylint-3.3.7-py3-none-any.whl pylint-3.3.7-py3-none-any.whl ============================================================================================================================================ test session starts ============================================================================================================================================= platform linux -- Python 3.12.11, pytest-8.3.5, pluggy-1.5.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: /home/udu/aports/community/py3-pylint/src/pylint-3.3.7 configfile: pyproject.toml plugins: xdist-3.6.1, cov-5.0.0, benchmark-4.0.0, timeout-2.3.1 collected 2194 items / 853 deselected / 1341 selected tests/benchmark/test_baseline_benchmarks.py .FF........ [ 0%] tests/checkers/base/unittest_base.py s [ 0%] tests/checkers/base/unittest_multi_naming_style.py .... [ 1%] tests/checkers/base/unittest_name_preset.py .... [ 1%] tests/checkers/unittest_base_checker.py .... [ 1%] tests/checkers/unittest_deprecated.py .......................... [ 3%] tests/checkers/unittest_design.py ... [ 3%] tests/checkers/unittest_format.py ......... [ 4%] tests/checkers/unittest_imports.py ........ [ 5%] tests/checkers/unittest_misc.py ........... [ 6%] tests/checkers/unittest_non_ascii_name.py ..........................x [ 8%] tests/checkers/unittest_refactoring.py .. [ 8%] tests/checkers/unittest_spelling.py .ssssssssssssssssssssssssssssssssssssssssss [ 11%] tests/checkers/unittest_stdlib.py . [ 11%] tests/checkers/unittest_strings.py . [ 11%] tests/checkers/unittest_symilar.py ..................... [ 13%] tests/checkers/unittest_typecheck.py ........ [ 13%] tests/checkers/unittest_unicode/unittest_bad_chars.py .................................................... [ 17%] tests/checkers/unittest_unicode/unittest_bidirectional_unicode.py ................................................... [ 21%] tests/checkers/unittest_unicode/unittest_functions.py ............................................................................................ [ 28%] tests/checkers/unittest_unicode/unittest_invalid_encoding.py xx........x........... [ 29%] tests/checkers/unittest_utils.py ....................................... [ 32%] tests/checkers/unittest_variables.py .......... [ 33%] tests/config/pylint_config/test_pylint_config_generate.py .... [ 33%] tests/config/pylint_config/test_pylint_config_help.py . [ 33%] tests/config/pylint_config/test_pylint_config_utils.py . [ 34%] tests/config/pylint_config/test_run_pylint_config.py . [ 34%] tests/config/test_argparse_config.py ...... [ 34%] tests/config/test_config.py .................... [ 36%] tests/config/test_find_default_config_files.py ................. [ 37%] tests/config/test_functional_config_loading.py .............................. [ 39%] tests/config/test_per_directory_config.py . [ 39%] tests/extensions/test_check_docs_utils.py ............... [ 40%] tests/extensions/test_private_import.py ..... [ 41%] tests/functional/r/redundant_unittest_assert.py ss [ 41%] tests/lint/test_caching.py .....ss.... [ 42%] tests/lint/test_pylinter.py .... [ 42%] tests/lint/test_run_pylint.py .. [ 42%] tests/lint/test_utils.py ... [ 42%] tests/lint/unittest_expand_modules.py .......... [ 43%] tests/lint/unittest_lint.py ............................................F.F................... [ 48%] tests/message/test_no_removed_msgid_or_symbol_used.py . [ 48%] tests/message/unittest_message.py . [ 48%] tests/message/unittest_message_definition.py ....... [ 49%] tests/message/unittest_message_definition_store.py ................. [ 50%] tests/message/unittest_message_id_store.py ........ [ 50%] tests/primer/test_primer_stdlib.py ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 65%] tests/pyreverse/test_diadefs.py ........... [ 66%] tests/pyreverse/test_diagrams.py . [ 66%] tests/pyreverse/test_inspector.py .... [ 66%] tests/pyreverse/test_main.py .......................... [ 68%] tests/pyreverse/test_printer.py .......... [ 69%] tests/pyreverse/test_printer_factory.py .... [ 69%] tests/pyreverse/test_pyreverse_functional.py ............. [ 70%] tests/pyreverse/test_utils.py ...................... [ 72%] tests/pyreverse/test_writer.py .................. [ 73%] tests/reporters/unittest_json_reporter.py ....... [ 74%] tests/reporters/unittest_reporting.py .......... [ 74%] tests/test_check_parallel.py ...F....FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF [ 77%] tests/test_func.py ............ [ 78%] tests/test_functional_directories.py . [ 78%] tests/test_import_graph.py ...... [ 79%] tests/test_numversion.py ........... [ 80%] tests/test_pragma_parser.py ............. [ 81%] tests/test_pylint_runners.py ..............F.............. [ 83%] tests/test_regr.py .................. [ 84%] tests/test_self.py ...........FFx......................................................F.F..FF........................................................................ [ 95%] tests/test_similar.py .F............ [ 96%] tests/testutils/_primer/test_package_to_lint.py .. [ 96%] tests/testutils/_primer/test_primer.py ..sssss [ 97%] tests/testutils/test_configuration_test.py . [ 97%] tests/testutils/test_functional_testutils.py ..... [ 97%] tests/testutils/test_lint_module_output_update.py ........... [ 98%] tests/testutils/test_output_line.py ..... [ 98%] 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%] ================================================================================================================================================== FAILURES ================================================================================================================================================== _________________________________________________________________________________________________________________________ TestEstablishBaselineBenchmarks.test_baseline_benchmark_j2 _________________________________________________________________________________________________________________________ self = , benchmark = @pytest.mark.needs_two_cores def test_baseline_benchmark_j2(self, benchmark: BenchmarkFixture) -> None: """Establish a baseline of pylint performance with no work across threads. Same as `test_baseline_benchmark_j1` but we use -j2 with 2 fake files to ensure end-to-end-system invoked. Because this is also so simple, if this regresses something very serious has happened. """ linter = PyLinter(reporter=Reporter()) linter.config.jobs = 2 # Create file per worker, using all workers fileinfos = [self.empty_filepath for _ in range(linter.config.jobs)] assert linter.config.jobs == 2 assert len(linter._checkers) == 1, "Should have 'main'" > benchmark(linter.check, fileinfos) tests/benchmark/test_baseline_benchmarks.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/pytest_benchmark/fixture.py:125: in __call__ return self._raw(function_to_benchmark, *args, **kwargs) /usr/lib/python3.12/site-packages/pytest_benchmark/fixture.py:171: in _raw function_result = function_to_benchmark(*args, **kwargs) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________ TestEstablishBaselineBenchmarks.test_baseline_benchmark_check_parallel_j2 __________________________________________________________________________________________________________________ self = , benchmark = @pytest.mark.needs_two_cores def test_baseline_benchmark_check_parallel_j2( self, benchmark: BenchmarkFixture ) -> None: """Should demonstrate times very close to `test_baseline_benchmark_j2`.""" linter = PyLinter(reporter=Reporter()) # Create file per worker, using all workers fileinfos = [self.empty_file_info for _ in range(linter.config.jobs)] assert len(linter._checkers) == 1, "Should have 'main'" > benchmark(check_parallel, linter, jobs=2, files=fileinfos) tests/benchmark/test_baseline_benchmarks.py:168: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/pytest_benchmark/fixture.py:125: in __call__ return self._raw(function_to_benchmark, *args, **kwargs) /usr/lib/python3.12/site-packages/pytest_benchmark/fixture.py:171: in _raw function_result = function_to_benchmark(*args, **kwargs) pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ______________________________________________________________________________________________________________________________________ test_custom_should_analyze_file _______________________________________________________________________________________________________________________________________ @pytest.mark.needs_two_cores def test_custom_should_analyze_file() -> None: """Check that we can write custom should_analyze_file that work even for arguments. """ package_dir = os.path.join(REGRTEST_DATA_DIR, "bad_package") wrong_file = os.path.join(package_dir, "wrong.py") for jobs in (1, 2): reporter = testutils.GenericTestReporter() linter = _CustomPyLinter() linter.config.jobs = jobs linter.config.persistent = 0 linter.open() linter.set_reporter(reporter) try: sys.path.append(os.path.dirname(package_dir)) > linter.check([package_dir, wrong_file]) tests/lint/unittest_lint.py:975: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________________ test_multiprocessing[2] ___________________________________________________________________________________________________________________________________________ jobs = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize("jobs", [1, 2]) def test_multiprocessing(jobs: int) -> None: """Check that multiprocessing does not create duplicates.""" # For the bug (#3584) to show up we need more than one file with issues # per process filenames = [ "special_attr_scope_lookup_crash.py", "syntax_error.py", "unused_variable.py", "wildcard.py", "wrong_import_position.py", ] reporter = testutils.GenericTestReporter() linter = PyLinter() linter.config.jobs = jobs linter.config.persistent = 0 linter.open() linter.set_reporter(reporter) try: sys.path.append(os.path.dirname(REGRTEST_DATA_DIR)) > linter.check([os.path.join(REGRTEST_DATA_DIR, fname) for fname in filenames]) tests/lint/unittest_lint.py:1009: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________ TestCheckParallelFramework.test_worker_initialize_pickling _________________________________________________________________________________________________________________________ self = @pytest.mark.needs_two_cores def test_worker_initialize_pickling(self) -> None: """Test that we can pickle objects that standard pickling in multiprocessing can't. See: https://stackoverflow.com/questions/8804830/python-multiprocessing-picklingerror-cant-pickle-type-function https://github.com/pylint-dev/pylint/pull/5584 """ linter = PyLinter(reporter=Reporter()) linter.attribute = argparse.ArgumentParser() # type: ignore[attr-defined] > with ProcessPoolExecutor( max_workers=2, initializer=worker_initialize, initargs=(dill.dumps(linter),) ) as executor: tests/test_check_parallel.py:215: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ______________________________________________________________________________________________________________________________ TestCheckParallel.test_sequential_checkers_work _______________________________________________________________________________________________________________________________ self = def test_sequential_checkers_work(self) -> None: """Tests original basic types of checker works as expected in -jN. This means that a sequential checker should return the same data for a given file-stream irrespective of whether it's run in -j1 or -jN """ linter = PyLinter(reporter=Reporter()) # Add a sequential checker to ensure it records data against some streams linter.register_checker(SequentialTestChecker(linter)) # Create a dummy file, the actual contents of which will be ignored by the # register test checkers, but it will trigger at least a single-job to be run. single_file_container = _gen_file_datas(count=1) # Invoke the lint process in a multi-process way, although we only specify one # job. > check_parallel( linter, jobs=1, files=iter(single_file_container), ) tests/test_check_parallel.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_invoke_single_job __________________________________________________________________________________________________________________________________ self = def test_invoke_single_job(self) -> None: """Tests basic checkers functionality using just a single worker. This is *not* the same -j1 and does not happen under normal operation """ linter = PyLinter(reporter=Reporter()) linter.register_checker(SequentialTestChecker(linter)) # Create a dummy file, the actual contents of which will be ignored by the # register test checkers, but it will trigger at least a single-job to be run. single_file_container = _gen_file_datas(count=1) # Invoke the lint process in a multi-process way, although we only specify one # job. > check_parallel( linter, jobs=1, files=iter(single_file_container), ) tests/test_check_parallel.py:422: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[1-2-1] ________________________________________________________________________________________________________________________ self = , num_files = 1, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[1-2-2] ________________________________________________________________________________________________________________________ self = , num_files = 1, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[1-2-3] ________________________________________________________________________________________________________________________ self = , num_files = 1, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[2-2-1] ________________________________________________________________________________________________________________________ self = , num_files = 2, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[2-2-2] ________________________________________________________________________________________________________________________ self = , num_files = 2, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[2-2-3] ________________________________________________________________________________________________________________________ self = , num_files = 2, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[3-2-1] ________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[3-2-2] ________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[3-2-3] ________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[3-1-1] ________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 1, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[3-1-2] ________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 1, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[3-1-3] ________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 1, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _______________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[10-2-1] ________________________________________________________________________________________________________________________ self = , num_files = 10, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _______________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[10-2-2] ________________________________________________________________________________________________________________________ self = , num_files = 10, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _______________________________________________________________________________________________________________________ TestCheckParallel.test_compare_workers_to_single_proc[10-2-3] ________________________________________________________________________________________________________________________ self = , num_files = 10, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (1, 2, 1), (1, 2, 2), (1, 2, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_compare_workers_to_single_proc( self, num_files: int, num_jobs: int, num_checkers: int ) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to ensure that the check_parallel() operates on each file, without ordering issues, irrespective of the number of workers used and the number of checkers applied. This test becomes more important if we want to change how we parameterize the checkers, for example if we aim to batch the files across jobs. """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. expected_stats = LinterStats( by_module={ # pylint: disable-next=consider-using-f-string "--test-file_data-name-%d--" % idx: ModuleStats( convention=0, error=0, fatal=0, info=0, refactor=0, statement=18, warning=0, ) for idx in range(num_files) } ) expected_stats.by_msg = {} expected_stats.convention = 0 expected_stats.error = 0 expected_stats.fatal = 0 expected_stats.info = 0 expected_stats.refactor = 0 expected_stats.statement = 18 * num_files expected_stats.warning = 0 file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(SequentialTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraSequentialTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdSequentialTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) assert linter.msg_status == 0, "We should not fail the lint" stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[2-2-1] __________________________________________________________________________________________________________________________________ self = , num_files = 2, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[2-2-2] __________________________________________________________________________________________________________________________________ self = , num_files = 2, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[2-2-3] __________________________________________________________________________________________________________________________________ self = , num_files = 2, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[3-2-1] __________________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[3-2-2] __________________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[3-2-3] __________________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[3-1-1] __________________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 1, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[3-1-2] __________________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 1, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[3-1-3] __________________________________________________________________________________________________________________________________ self = , num_files = 3, num_jobs = 1, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[10-2-1] __________________________________________________________________________________________________________________________________ self = , num_files = 10, num_jobs = 2, num_checkers = 1 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[10-2-2] __________________________________________________________________________________________________________________________________ self = , num_files = 10, num_jobs = 2, num_checkers = 2 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________________ TestCheckParallel.test_map_reduce[10-2-3] __________________________________________________________________________________________________________________________________ self = , num_files = 10, num_jobs = 2, num_checkers = 3 @pytest.mark.needs_two_cores @pytest.mark.parametrize( "num_files,num_jobs,num_checkers", [ (2, 2, 1), (2, 2, 2), (2, 2, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (10, 2, 1), (10, 2, 2), (10, 2, 3), ], ) def test_map_reduce(self, num_files: int, num_jobs: int, num_checkers: int) -> None: """Compares the 3 key parameters for check_parallel() produces the same results. The intent here is to validate the reduce step: no stats should be lost. Checks regression of https://github.com/pylint-dev/pylint/issues/4118 """ # define the stats we expect to get back from the runs, these should only vary # with the number of files. file_infos = _gen_file_datas(num_files) # Loop for single-proc and mult-proc, so we can ensure the same linter-config for do_single_proc in range(2): linter = PyLinter(reporter=Reporter()) # Assign between 1 and 3 checkers to the linter, they should not change the # results of the lint linter.register_checker(ParallelTestChecker(linter)) if num_checkers > 1: linter.register_checker(ExtraParallelTestChecker(linter)) if num_checkers > 2: linter.register_checker(ThirdParallelTestChecker(linter)) if do_single_proc: # establish the baseline assert ( linter.config.jobs == 1 ), "jobs>1 are ignored when calling _lint_files" ast_mapping = linter._get_asts(iter(file_infos), None) with linter._astroid_module_checker() as check_astroid_module: linter._lint_files(ast_mapping, check_astroid_module) stats_single_proc = linter.stats else: > check_parallel( linter, jobs=num_jobs, files=file_infos, ) tests/test_check_parallel.py:600: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________ TestCheckParallel.test_no_deadlock_due_to_initializer_error _________________________________________________________________________________________________________________________ self = @pytest.mark.timeout(5) def test_no_deadlock_due_to_initializer_error(self) -> None: """Tests that an error in the initializer for the parallel jobs doesn't lead to a deadlock. """ linter = PyLinter(reporter=Reporter()) linter.register_checker(SequentialTestChecker(linter)) # Create a dummy file, the actual contents of which will be ignored by the # register test checkers, but it will trigger at least a single-job to be run. single_file_container = _gen_file_datas(count=1) # The error in the initializer should trigger a BrokenProcessPool exception with pytest.raises(BrokenProcessPool): > check_parallel( linter, jobs=1, files=iter(single_file_container), # This will trigger an exception in the initializer for the parallel jobs # because arguments has to be an Iterable. extra_packages_paths=1, # type: ignore[arg-type] ) tests/test_check_parallel.py:626: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _______________________________________________________________________________________________________________________________ TestCheckParallel.test_cyclic_import_parallel ________________________________________________________________________________________________________________________________ self = @pytest.mark.needs_two_cores def test_cyclic_import_parallel(self) -> None: tests_dir = Path("tests") package_path = Path("input") / "func_w0401_package" linter = PyLinter(reporter=Reporter()) linter.register_checker(ImportsChecker(linter)) with _test_cwd(tests_dir): > check_parallel( linter, jobs=2, files=[ FileItem( name="input.func_w0401_package.all_the_things", filepath=str(package_path / "all_the_things.py"), modpath="input.func_w0401_package", ), FileItem( name="input.func_w0401_package.thing2", filepath=str(package_path / "thing2.py"), modpath="input.func_w0401_package", ), ], ) tests/test_check_parallel.py:643: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ______________________________________________________________________________________________________________________ TestCheckParallel.test_cyclic_import_parallel_disabled_globally _______________________________________________________________________________________________________________________ self = , mock = @pytest.mark.needs_two_cores @patch("pylint.checkers.imports.ImportsChecker.close") def test_cyclic_import_parallel_disabled_globally(self, mock: MagicMock) -> None: tests_dir = Path("tests") package_path = Path("input") / "func_w0401_package" linter = PyLinter(reporter=Reporter()) linter.register_checker(ImportsChecker(linter)) linter.disable("cyclic-import") with _test_cwd(tests_dir): > check_parallel( linter, jobs=2, files=[ FileItem( name="input.func_w0401_package.all_the_things", filepath=str(package_path / "all_the_things.py"), modpath="input.func_w0401_package", ), FileItem( name="input.func_w0401_package.thing2", filepath=str(package_path / "thing2.py"), modpath="input.func_w0401_package", ), ], ) tests/test_check_parallel.py:672: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _______________________________________________________________________________________________________________________ TestCheckParallel.test_cyclic_import_parallel_disabled_locally _______________________________________________________________________________________________________________________ self = @pytest.mark.needs_two_cores def test_cyclic_import_parallel_disabled_locally(self) -> None: tests_dir = Path("tests") package_path = Path("input") / "func_noerror_cycle" linter = PyLinter(reporter=Reporter()) linter.register_checker(ImportsChecker(linter)) with _test_cwd(tests_dir): > check_parallel( linter, jobs=2, files=[ FileItem( name="input.func_noerror_cycle.a", filepath=str(package_path / "a.py"), modpath="input.func_noerror_cycle", ), FileItem( name="input.func_noerror_cycle.b", filepath=str(package_path / "b.py"), modpath="input.func_noerror_cycle", ), ], ) tests/test_check_parallel.py:700: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ____________________________________________________________________________________________________________________________ test_pylint_run_dont_crash_with_cgroupv2[max 100000] ____________________________________________________________________________________________________________________________ tmp_path = PosixPath('/tmp/pytest-of-udu/pytest-0/test_pylint_run_dont_crash_wit7'), contents = 'max 100000' @pytest.mark.parametrize( "contents", [ "1 2", "max 100000", ], ) def test_pylint_run_dont_crash_with_cgroupv2( tmp_path: pathlib.Path, contents: str, ) -> None: """Check that the pylint runner does not crash if `pylint.lint.run._query_cpu` determines only a fraction of a CPU core to be available. """ filepath = os.path.abspath(__file__) testargs = [filepath, "--jobs=0"] with _test_cwd(tmp_path): with pytest.raises(SystemExit) as err: with patch("builtins.open", mock_cgroup_fs(max_v2=contents)): with patch("pylint.lint.run.Path", mock_cgroup_path(v2=True)): > Run(testargs, reporter=Reporter()) tests/test_pylint_runners.py:131: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _____________________________________________________________________________________________________________________________________ TestRunTC.test_parallel_execution ______________________________________________________________________________________________________________________________________ self = def test_parallel_execution(self) -> None: out = StringIO() > self._runtest( [ "-j 2", join(HERE, "functional", "a", "arguments.py"), ], out=out, code=MSG_TYPES_STATUS["E"], ) tests/test_self.py:277: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_self.py:122: in _runtest pylint_code = self._run_pylint(args, reporter=reporter, out=out) tests/test_self.py:141: in _run_pylint Run(args, reporter=reporter) pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ____________________________________________________________________________________________________________________________ TestRunTC.test_parallel_execution_missing_arguments _____________________________________________________________________________________________________________________________ self = def test_parallel_execution_missing_arguments(self) -> None: > self._runtest(["-j 2", "not_here", "not_here_too"], code=1) tests/test_self.py:291: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_self.py:122: in _runtest pylint_code = self._run_pylint(args, reporter=reporter, out=out) tests/test_self.py:141: in _run_pylint Run(args, reporter=reporter) pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _______________________________________________________________________________________________________________________ TestRunTC.test_do_not_import_files_from_local_directory[args1] _______________________________________________________________________________________________________________________ self = , tmp_path = PosixPath('/tmp/pytest-of-udu/pytest-0/test_do_not_import_files_from_1'), args = ['-j2', '--disable=import-error,unused-import'] @pytest.mark.parametrize( "args", [ ["--disable=import-error,unused-import"], # Test with multiple jobs for 'hmac.py' for which we have a # CVE against: https://github.com/pylint-dev/pylint/issues/959 ["-j2", "--disable=import-error,unused-import"], ], ) def test_do_not_import_files_from_local_directory( self, tmp_path: Path, args: list[str] ) -> None: for path in ("astroid.py", "hmac.py"): file_path = tmp_path / path file_path.write_text("'Docstring'\nimport completely_unknown\n") pylint_call = [sys.executable, "-m", "pylint", *args, path] with _test_cwd(tmp_path): > subprocess.check_output(pylint_call, cwd=str(tmp_path)) tests/test_self.py:951: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/subprocess.py:466: in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ input = None, capture_output = False, timeout = None, check = True, popenargs = (['/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/bin/python3', '-m', 'pylint', '-j2', '--disable=import-error,unused-import', 'astroid.py'],) kwargs = {'cwd': '/tmp/pytest-of-udu/pytest-0/test_do_not_import_files_from_1', 'stdout': -1}, process = , stdout = b'', stderr = None, retcode = 1 def run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs): """Run command with arguments and return a CompletedProcess instance. The returned instance will have attributes args, returncode, stdout and stderr. By default, stdout and stderr are not captured, and those attributes will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them, or pass capture_output=True to capture both. If check is True and the exit code was non-zero, it raises a CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute, and output & stderr attributes if those streams were captured. If timeout (seconds) is given and the process takes too long, a TimeoutExpired exception will be raised. There is an optional argument "input", allowing you to pass bytes or a string to the subprocess's stdin. If you use this argument you may not also use the Popen constructor's "stdin" argument, as it will be used internally. By default, all communication is in bytes, and therefore any "input" should be bytes, and the stdout and stderr will be bytes. If in text mode, any "input" should be a string, and stdout and stderr will be strings decoded according to locale encoding, or by "encoding" if set. Text mode is triggered by setting any of text, encoding, errors or universal_newlines. The other arguments are the same as for the Popen constructor. """ if input is not None: if kwargs.get('stdin') is not None: raise ValueError('stdin and input arguments may not both be used.') kwargs['stdin'] = PIPE if capture_output: if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None: raise ValueError('stdout and stderr arguments may not be used ' 'with capture_output.') kwargs['stdout'] = PIPE kwargs['stderr'] = PIPE with Popen(*popenargs, **kwargs) as process: try: stdout, stderr = process.communicate(input, timeout=timeout) except TimeoutExpired as exc: process.kill() if _mswindows: # Windows accumulates the output in a single blocking # read() call run on child threads, with the timeout # being done in a join() on those threads. communicate() # _after_ kill() is required to collect that and add it # to the exception. exc.stdout, exc.stderr = process.communicate() else: # POSIX _communicate already populated the output so # far into the TimeoutExpired exception. process.wait() raise except: # Including KeyboardInterrupt, communicate handled that. process.kill() # We don't call process.wait() as .__exit__ does that for us. raise retcode = process.poll() if check and retcode: > raise CalledProcessError(retcode, process.args, output=stdout, stderr=stderr) E subprocess.CalledProcessError: Command '['/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/bin/python3', '-m', 'pylint', '-j2', '--disable=import-error,unused-import', 'astroid.py']' returned non-zero exit status 1. /usr/lib/python3.12/subprocess.py:571: CalledProcessError -------------------------------------------------------------------------------------------------------------------------------------------- Captured stderr call -------------------------------------------------------------------------------------------------------------------------------------------- Traceback (most recent call last): File "", line 198, in _run_module_as_main File "", line 88, in _run_code File "/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/lib/python3.12/site-packages/pylint/__main__.py", line 10, in pylint.run_pylint() File "/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/lib/python3.12/site-packages/pylint/__init__.py", line 34, in run_pylint PylintRun(argv or sys.argv[1:]) File "/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/lib/python3.12/site-packages/pylint/lint/run.py", line 240, in __init__ linter.check(args) File "/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/lib/python3.12/site-packages/pylint/lint/pylinter.py", line 679, in check check_parallel( File "/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/lib/python3.12/site-packages/pylint/lint/parallel.py", line 141, in check_parallel with ProcessPoolExecutor( ^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/concurrent/futures/process.py", line 747, in __init__ self._call_queue = _SafeQueue( ^^^^^^^^^^^ File "/usr/lib/python3.12/concurrent/futures/process.py", line 177, in __init__ super().__init__(max_size, ctx=ctx) File "/usr/lib/python3.12/multiprocessing/queues.py", line 43, in __init__ self._rlock = ctx.Lock() ^^^^^^^^^^ File "/usr/lib/python3.12/multiprocessing/context.py", line 68, in Lock return Lock(ctx=self.get_context()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/multiprocessing/synchronize.py", line 169, in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) File "/usr/lib/python3.12/multiprocessing/synchronize.py", line 57, in __init__ sl = self._semlock = _multiprocessing.SemLock( ^^^^^^^^^^^^^^^^^^^^^^^^^ PermissionError: [Errno 13] Permission denied ________________________________________________________________________________________________________________ TestRunTC.test_allow_import_of_files_found_in_modules_during_parallel_check _________________________________________________________________________________________________________________ self = , tmp_path = PosixPath('/tmp/pytest-of-udu/pytest-0/test_allow_import_of_files_fou0') def test_allow_import_of_files_found_in_modules_during_parallel_check( self, tmp_path: Path ) -> None: test_directory = tmp_path / "test_directory" test_directory.mkdir() spam_module = test_directory / "spam.py" spam_module.write_text("'Empty'") init_module = test_directory / "__init__.py" init_module.write_text("'Empty'") # For multiple jobs we could not find the `spam.py` file. with _test_cwd(tmp_path): args = [ "-j2", "--disable=missing-docstring, missing-final-newline", "test_directory", ] > self._runtest(args, code=0) tests/test_self.py:996: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_self.py:122: in _runtest pylint_code = self._run_pylint(args, reporter=reporter, out=out) tests/test_self.py:141: in _run_pylint Run(args, reporter=reporter) pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________________________ TestRunTC.test_jobs_score __________________________________________________________________________________________________________________________________________ self = @pytest.mark.needs_two_cores def test_jobs_score(self) -> None: path = join(HERE, "regrtest_data", "unused_variable.py") expected = "Your code has been rated at 7.50/10" > self._test_output([path, "--jobs=2", "-ry"], expected_output=expected) tests/test_self.py:1035: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_self.py:155: in _test_output self._run_pylint(args, out=out) tests/test_self.py:141: in _run_pylint Run(args, reporter=reporter) pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError __________________________________________________________________________________________________________________________ TestRunTC.test_regression_parallel_mode_without_filepath __________________________________________________________________________________________________________________________ self = def test_regression_parallel_mode_without_filepath(self) -> None: # Test that parallel mode properly passes filepath # https://github.com/pylint-dev/pylint/issues/3564 path = join( HERE, "regrtest_data", "regression_missing_init_3564", "subdirectory/" ) > self._test_output([path, "-j2"], expected_output="") tests/test_self.py:1043: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_self.py:155: in _test_output self._run_pylint(args, out=out) tests/test_self.py:141: in _run_pylint Run(args, reporter=reporter) pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ____________________________________________________________________________________________________________________________ TestSymilarCodeChecker.test_duplicate_code_parallel _____________________________________________________________________________________________________________________________ self = @pytest.mark.needs_two_cores def test_duplicate_code_parallel(self) -> None: path = join(DATA, "raw_strings_all") expected_output = "Similar lines in 2 files" > self._test_output( [ path, "--disable=all", "--enable=duplicate-code", "--ignore-imports=no", "--ignore-signatures=no", "--min-similarity-lines=4", "--jobs=2", ], expected_output=expected_output, ) tests/test_similar.py:89: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_similar.py:62: in _test_output self._run_pylint(args, out=out) tests/test_similar.py:50: in _run_pylint Run(args) pylint/testutils/_run.py:41: in __init__ super().__init__(args, reporter, exit) pylint/lint/run.py:240: in __init__ linter.check(args) pylint/lint/pylinter.py:679: in check check_parallel( pylint/lint/parallel.py:141: in check_parallel with ProcessPoolExecutor( /usr/lib/python3.12/concurrent/futures/process.py:747: in __init__ self._call_queue = _SafeQueue( /usr/lib/python3.12/concurrent/futures/process.py:177: in __init__ super().__init__(max_size, ctx=ctx) /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ========================================================================================================================================== short test summary info =========================================================================================================================================== FAILED tests/benchmark/test_baseline_benchmarks.py::TestEstablishBaselineBenchmarks::test_baseline_benchmark_j2 - PermissionError: [Errno 13] Permission denied FAILED tests/benchmark/test_baseline_benchmarks.py::TestEstablishBaselineBenchmarks::test_baseline_benchmark_check_parallel_j2 - PermissionError: [Errno 13] Permission denied FAILED tests/lint/unittest_lint.py::test_custom_should_analyze_file - PermissionError: [Errno 13] Permission denied FAILED tests/lint/unittest_lint.py::test_multiprocessing[2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallelFramework::test_worker_initialize_pickling - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_sequential_checkers_work - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_invoke_single_job - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[1-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[1-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[1-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[2-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[2-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[2-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[3-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[3-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[3-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[3-1-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[3-1-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[3-1-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[10-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[10-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_compare_workers_to_single_proc[10-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[2-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[2-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[2-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[3-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[3-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[3-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[3-1-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[3-1-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[3-1-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[10-2-1] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[10-2-2] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_map_reduce[10-2-3] - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_no_deadlock_due_to_initializer_error - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_cyclic_import_parallel - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_cyclic_import_parallel_disabled_globally - PermissionError: [Errno 13] Permission denied FAILED tests/test_check_parallel.py::TestCheckParallel::test_cyclic_import_parallel_disabled_locally - PermissionError: [Errno 13] Permission denied FAILED tests/test_pylint_runners.py::test_pylint_run_dont_crash_with_cgroupv2[max 100000] - PermissionError: [Errno 13] Permission denied FAILED tests/test_self.py::TestRunTC::test_parallel_execution - PermissionError: [Errno 13] Permission denied FAILED tests/test_self.py::TestRunTC::test_parallel_execution_missing_arguments - PermissionError: [Errno 13] Permission denied FAILED tests/test_self.py::TestRunTC::test_do_not_import_files_from_local_directory[args1] - subprocess.CalledProcessError: Command '['/home/udu/aports/community/py3-pylint/src/pylint-3.3.7/.testenv/bin/python3', '-m', 'pylint', '-j2', '--disable=import-error,unused-import', 'astroid.py']' returned... FAILED tests/test_self.py::TestRunTC::test_allow_import_of_files_found_in_modules_during_parallel_check - PermissionError: [Errno 13] Permission denied FAILED tests/test_self.py::TestRunTC::test_jobs_score - PermissionError: [Errno 13] Permission denied FAILED tests/test_self.py::TestRunTC::test_regression_parallel_mode_without_filepath - PermissionError: [Errno 13] Permission denied FAILED tests/test_similar.py::TestSymilarCodeChecker::test_duplicate_code_parallel - PermissionError: [Errno 13] Permission denied ================================================================================================================== 46 failed, 1044 passed, 246 skipped, 853 deselected, 5 xfailed in 32.86s ================================================================================================================== >>> ERROR: py3-pylint: check failed >>> py3-pylint: Uninstalling dependencies... (1/71) Purging .makedepends-py3-pylint (20251013.021749) (2/71) Purging py3-astroid-pyc (3.3.10-r0) (3/71) Purging py3-astroid (3.3.10-r0) (4/71) Purging py3-lazy-object-proxy-pyc (1.10.0-r1) (5/71) Purging py3-lazy-object-proxy (1.10.0-r1) (6/71) Purging py3-wrapt-pyc (1.17.0-r0) (7/71) Purging py3-wrapt (1.17.0-r0) (8/71) Purging py3-dill-pyc (0.4.0-r0) (9/71) Purging py3-dill (0.4.0-r0) (10/71) Purging py3-isort-pyc (6.0.1-r0) (11/71) Purging py3-isort (6.0.1-r0) (12/71) Purging py3-mccabe-pyc (0.7.0-r4) (13/71) Purging py3-mccabe (0.7.0-r4) (14/71) Purging py3-platformdirs-pyc (4.3.8-r0) (15/71) Purging py3-platformdirs (4.3.8-r0) (16/71) Purging py3-tomlkit-pyc (0.13.2-r0) (17/71) Purging py3-tomlkit (0.13.2-r0) (18/71) Purging py3-gpep517-pyc (19-r0) (19/71) Purging py3-gpep517 (19-r0) (20/71) Purging py3-installer-pyc (0.7.0-r2) (21/71) Purging py3-installer (0.7.0-r2) (22/71) Purging py3-wheel-pyc (0.46.1-r0) (23/71) Purging py3-wheel (0.46.1-r0) (24/71) Purging py3-gitpython-pyc (3.1.44-r0) (25/71) Purging py3-gitpython (3.1.44-r0) (26/71) Purging py3-gitdb2-pyc (4.0.12-r0) (27/71) Purging py3-gitdb2 (4.0.12-r0) (28/71) Purging py3-smmap2-pyc (5.0.1-r1) (29/71) Purging py3-smmap2 (5.0.1-r1) (30/71) Purging py3-pytest-benchmark-pyc (4.0.0-r4) (31/71) Purging py3-pytest-benchmark (4.0.0-r4) (32/71) Purging py3-py-cpuinfo-pyc (9.0.0-r4) (33/71) Purging py3-py-cpuinfo (9.0.0-r4) (34/71) Purging py3-pytest-cov-pyc (5.0.0-r0) (35/71) Purging py3-pytest-cov (5.0.0-r0) (36/71) Purging py3-coverage-pyc (7.8.2-r0) (37/71) Purging py3-coverage (7.8.2-r0) (38/71) Purging py3-pytest-runner-pyc (6.0.1-r1) (39/71) Purging py3-pytest-runner (6.0.1-r1) (40/71) Purging py3-setuptools-pyc (80.9.0-r0) (41/71) Purging py3-setuptools (80.9.0-r0) (42/71) Purging py3-pytest-timeout-pyc (2.3.1-r1) (43/71) Purging py3-pytest-timeout (2.3.1-r1) (44/71) Purging py3-pytest-xdist-pyc (3.6.1-r0) (45/71) Purging py3-pytest-xdist (3.6.1-r0) (46/71) Purging py3-execnet-pyc (2.1.1-r0) (47/71) Purging py3-execnet (2.1.1-r0) (48/71) Purging py3-pytest-pyc (8.3.5-r0) (49/71) Purging py3-pytest (8.3.5-r0) (50/71) Purging py3-iniconfig-pyc (2.1.0-r0) (51/71) Purging py3-iniconfig (2.1.0-r0) (52/71) Purging py3-packaging-pyc (25.0-r0) (53/71) Purging py3-packaging (25.0-r0) (54/71) Purging py3-parsing-pyc (3.2.3-r0) (55/71) Purging py3-parsing (3.2.3-r0) (56/71) Purging py3-pluggy-pyc (1.5.0-r0) (57/71) Purging py3-pluggy (1.5.0-r0) (58/71) Purging py3-py-pyc (1.11.0-r4) (59/71) Purging py3-py (1.11.0-r4) (60/71) Purging py3-requests-pyc (2.32.5-r0) (61/71) Purging py3-requests (2.32.5-r0) (62/71) Purging py3-certifi-pyc (2025.4.26-r0) (63/71) Purging py3-certifi (2025.4.26-r0) (64/71) Purging py3-charset-normalizer-pyc (3.4.2-r0) (65/71) Purging py3-charset-normalizer (3.4.2-r0) (66/71) Purging py3-idna-pyc (3.10-r0) (67/71) Purging py3-idna (3.10-r0) (68/71) Purging py3-urllib3-pyc (1.26.20-r0) (69/71) Purging py3-urllib3 (1.26.20-r0) (70/71) Purging py3-typing-extensions-pyc (4.13.2-r0) (71/71) Purging py3-typing-extensions (4.13.2-r0) Executing busybox-1.37.0-r19.trigger OK: 296 MiB in 89 packages