From d478d92299d4025067e17beb4f5ec565f0b3033e Mon Sep 17 00:00:00 2001 From: Ruairidh MacLeod Date: Fri, 24 Dec 2021 01:35:27 +0000 Subject: [PATCH 1/2] add failing test for missing config file --- tests/integration/test_main.py | 18 ++++++++++++++++++ tests/unit/test_options_config.py | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index b351e9d..90877d3 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -386,3 +386,21 @@ def test_early_keyboard_interrupt_does_not_crash(capsys): out, err = capsys.readouterr() assert out == "... stopped\n" assert err == "" + + +def test_config_file_not_found(tmpdir, capsys): + """Ensure that an explicitly specified config file which is not found is an + error""" + + expected = """\ +There was a critical error during execution of Flake8: +The specified config file does not exist +""" + + with tmpdir.as_cwd(): + tmpdir.join("t.py").write("print('hello hello world')\n") + assert cli.main(["--config", "missing.cfg", "t.py"]) == 1 + + out, err = capsys.readouterr() + assert out == expected + assert err == "" diff --git a/tests/unit/test_options_config.py b/tests/unit/test_options_config.py index b288de0..c5d1476 100644 --- a/tests/unit/test_options_config.py +++ b/tests/unit/test_options_config.py @@ -2,6 +2,7 @@ import configparser import pytest +from flake8 import exceptions from flake8.main.options import register_default_options from flake8.options import config from flake8.options.manager import OptionManager @@ -164,3 +165,8 @@ def test_parse_config_ignores_unknowns(tmp_path, opt_manager, caplog): 'Option "wat" is not registered. Ignoring.', ) ] + + +def test_load_config_missing_file_raises_exception(capsys): + with pytest.raises(exceptions.ExecutionError): + config.load_config("foo.cfg", []) From d948169292388116c45febad470162ba5652dd60 Mon Sep 17 00:00:00 2001 From: Ruairidh MacLeod Date: Fri, 24 Dec 2021 01:36:41 +0000 Subject: [PATCH 2/2] add check for a missing specified config file --- src/flake8/options/config.py | 6 +++++- tests/integration/test_main.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/flake8/options/config.py b/src/flake8/options/config.py index d7519df..7cba936 100644 --- a/src/flake8/options/config.py +++ b/src/flake8/options/config.py @@ -8,6 +8,7 @@ from typing import List from typing import Optional from typing import Tuple +from flake8 import exceptions from flake8.options.manager import OptionManager LOG = logging.getLogger(__name__) @@ -60,7 +61,10 @@ def load_config( cfg = configparser.RawConfigParser() if config is not None: - cfg.read(config) + if not cfg.read(config): + raise exceptions.ExecutionError( + f"The specified config file does not exist: {config}" + ) cfg_dir = os.path.dirname(config) else: cfg_dir = pwd diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index 90877d3..fe254b7 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -394,7 +394,7 @@ def test_config_file_not_found(tmpdir, capsys): expected = """\ There was a critical error during execution of Flake8: -The specified config file does not exist +The specified config file does not exist: missing.cfg """ with tmpdir.as_cwd():