mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-06 04:56:54 +00:00
enable multiprocessing on other platforms
This commit is contained in:
parent
ebbb57d63c
commit
0d667a7329
7 changed files with 175 additions and 317 deletions
|
|
@ -266,17 +266,12 @@ def test_report_order(results, expected_order):
|
|||
# tuples to create the expected result lists from the indexes
|
||||
expected_results = [results[index] for index in expected_order]
|
||||
|
||||
file_checker = mock.Mock(spec=["results", "display_name"])
|
||||
file_checker.results = results
|
||||
file_checker.display_name = "placeholder"
|
||||
|
||||
style_guide = mock.MagicMock(spec=["options", "processing_file"])
|
||||
|
||||
# Create a placeholder manager without arguments or plugins
|
||||
# Just add one custom file checker which just provides the results
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []))
|
||||
manager.checkers = manager._all_checkers = [file_checker]
|
||||
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []), [])
|
||||
manager.results = [("placeholder", results, {})]
|
||||
# _handle_results is the first place which gets the sorted result
|
||||
# Should something non-private be mocked instead?
|
||||
handler = mock.Mock(side_effect=count_side_effect)
|
||||
|
|
@ -295,9 +290,9 @@ def test_acquire_when_multiprocessing_pool_can_initialize():
|
|||
This simulates the behaviour on most common platforms.
|
||||
"""
|
||||
with mock.patch("multiprocessing.Pool") as pool:
|
||||
result = checker._try_initialize_processpool(2)
|
||||
result = checker._try_initialize_processpool(2, [])
|
||||
|
||||
pool.assert_called_once_with(2, checker._pool_init)
|
||||
pool.assert_called_once_with(2, checker._mp_init, initargs=([],))
|
||||
assert result is pool.return_value
|
||||
|
||||
|
||||
|
|
@ -314,9 +309,9 @@ def test_acquire_when_multiprocessing_pool_can_not_initialize():
|
|||
https://github.com/python/cpython/blob/4e02981de0952f54bf87967f8e10d169d6946b40/Lib/multiprocessing/synchronize.py#L30-L33
|
||||
"""
|
||||
with mock.patch("multiprocessing.Pool", side_effect=ImportError) as pool:
|
||||
result = checker._try_initialize_processpool(2)
|
||||
result = checker._try_initialize_processpool(2, [])
|
||||
|
||||
pool.assert_called_once_with(2, checker._pool_init)
|
||||
pool.assert_called_once_with(2, checker._mp_init, initargs=([],))
|
||||
assert result is None
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ def style_guide_mock():
|
|||
def _parallel_checker_manager():
|
||||
"""Call Manager.run() and return the number of calls to `run_serial`."""
|
||||
style_guide = style_guide_mock()
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []))
|
||||
# multiple checkers is needed for parallel mode
|
||||
manager.checkers = [mock.Mock(), mock.Mock()]
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []), [])
|
||||
# multiple files is needed for parallel mode
|
||||
manager.filenames = ("file1", "file2")
|
||||
return manager
|
||||
|
||||
|
||||
|
|
@ -36,8 +36,7 @@ def test_oserrors_cause_serial_fall_back():
|
|||
assert serial.call_count == 1
|
||||
|
||||
|
||||
@mock.patch.object(multiprocessing, "get_start_method", return_value="fork")
|
||||
def test_oserrors_are_reraised(_):
|
||||
def test_oserrors_are_reraised():
|
||||
"""Verify that unexpected OSErrors will cause the Manager to reraise."""
|
||||
err = OSError(errno.EAGAIN, "Ominous message")
|
||||
with mock.patch("_multiprocessing.SemLock", side_effect=err):
|
||||
|
|
@ -48,14 +47,6 @@ def test_oserrors_are_reraised(_):
|
|||
assert serial.call_count == 0
|
||||
|
||||
|
||||
@mock.patch.object(multiprocessing, "get_start_method", return_value="spawn")
|
||||
def test_multiprocessing_is_disabled(_):
|
||||
"""Verify not being able to import multiprocessing forces jobs to 0."""
|
||||
style_guide = style_guide_mock()
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []))
|
||||
assert manager.jobs == 0
|
||||
|
||||
|
||||
def test_multiprocessing_cpu_count_not_implemented():
|
||||
"""Verify that jobs is 0 if cpu_count is unavailable."""
|
||||
style_guide = style_guide_mock()
|
||||
|
|
@ -66,22 +57,18 @@ def test_multiprocessing_cpu_count_not_implemented():
|
|||
"cpu_count",
|
||||
side_effect=NotImplementedError,
|
||||
):
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []))
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []), [])
|
||||
assert manager.jobs == 0
|
||||
|
||||
|
||||
@mock.patch.object(multiprocessing, "get_start_method", return_value="spawn")
|
||||
def test_make_checkers(_):
|
||||
def test_make_checkers():
|
||||
"""Verify that we create a list of FileChecker instances."""
|
||||
style_guide = style_guide_mock()
|
||||
style_guide.options.filenames = ["file1", "file2"]
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []))
|
||||
manager = checker.Manager(style_guide, finder.Checkers([], [], []), [])
|
||||
|
||||
with mock.patch("flake8.utils.fnmatch", return_value=True):
|
||||
with mock.patch("flake8.processor.FileProcessor"):
|
||||
manager.make_checkers(["file1", "file2"])
|
||||
manager.start()
|
||||
|
||||
assert manager._all_checkers
|
||||
for file_checker in manager._all_checkers:
|
||||
assert file_checker.filename in style_guide.options.filenames
|
||||
assert not manager.checkers # the files don't exist
|
||||
assert manager.filenames == ("file1", "file2")
|
||||
|
|
|
|||
|
|
@ -1,57 +1,12 @@
|
|||
"""Tests for Flake8's legacy API."""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import configparser
|
||||
import os.path
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
|
||||
from flake8.api import legacy as api
|
||||
from flake8.formatting import base as formatter
|
||||
from flake8.options import config
|
||||
|
||||
|
||||
def test_get_style_guide():
|
||||
"""Verify the methods called on our internal Application."""
|
||||
prelim_opts = argparse.Namespace(
|
||||
append_config=[],
|
||||
config=None,
|
||||
isolated=False,
|
||||
output_file=None,
|
||||
verbose=0,
|
||||
enable_extensions=None,
|
||||
require_plugins=None,
|
||||
)
|
||||
mockedapp = mock.Mock()
|
||||
mockedapp.parse_preliminary_options.return_value = (prelim_opts, [])
|
||||
mockedapp.program = "flake8"
|
||||
|
||||
cfg = configparser.RawConfigParser()
|
||||
cfg_dir = os.getcwd()
|
||||
|
||||
with mock.patch.object(config, "load_config", return_value=(cfg, cfg_dir)):
|
||||
with mock.patch("flake8.main.application.Application") as application:
|
||||
application.return_value = mockedapp
|
||||
style_guide = api.get_style_guide()
|
||||
|
||||
application.assert_called_once_with()
|
||||
mockedapp.parse_preliminary_options.assert_called_once_with([])
|
||||
mockedapp.find_plugins.assert_called_once_with(
|
||||
cfg,
|
||||
cfg_dir,
|
||||
enable_extensions=None,
|
||||
require_plugins=None,
|
||||
)
|
||||
mockedapp.register_plugin_options.assert_called_once_with()
|
||||
mockedapp.parse_configuration_and_cli.assert_called_once_with(
|
||||
cfg, cfg_dir, []
|
||||
)
|
||||
mockedapp.make_formatter.assert_called_once_with()
|
||||
mockedapp.make_guide.assert_called_once_with()
|
||||
mockedapp.make_file_checker_manager.assert_called_once_with()
|
||||
assert isinstance(style_guide, api.StyleGuide)
|
||||
|
||||
|
||||
def test_styleguide_options():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue