how did you install flake8?
also when cloned from github master
unmodified output of flake8 --bug-report
{
"platform": {
"python_implementation": "CPython",
"python_version": "3.10.8",
"system": "Linux"
},
"plugins": [
{
"plugin": "mccabe",
"version": "0.7.0"
},
{
"plugin": "pycodestyle",
"version": "2.10.0"
},
{
"plugin": "pyflakes",
"version": "3.0.1"
}
],
"version": "6.0.0"
}
describe the problem
what I expected to happen
my argparse.Action to be called regardless of if the parameter is specified on the command line or in the config
sample code
I implemented a test that reproduces the error. The first one passes, the second one doesn't.
from collections.abc import Sequence
from flake8.options import config
# always sets the value to bar regardless of what `values` is
class MyAction(argparse.Action):
def __call__(
self,
parser: argparse.ArgumentParser,
namespace: argparse.Namespace,
values: Sequence[str] | None,
option_string: str | None = None,
) -> None:
setattr(namespace, self.dest, "bar")
def test_action_cmdline(optmanager):
optmanager.add_option(
"--my-option",
parse_from_config=True,
required=False,
action=MyAction,
)
options = optmanager.parse_args(["--my-option", "foo"])
assert options.my_option == 'bar'
def test_action_config(tmpdir):
tmpdir.join("setup.cfg").write("[flake8]\nmy-option=foo\n")
with tmpdir.as_cwd():
cfg, cfg_dir = config.load_config(None, [], isolated=False)
assert cfg.get("flake8", "my-option") == "bar"
commands ran
$ pytest -k test_action_
===================================== test session starts =====================================
platform linux -- Python 3.10.8, pytest-7.2.0, pluggy-1.0.0
rootdir: /home/h/Git/flake8, configfile: pytest.ini
collected 465 items / 463 deselected / 2 selected
tests/unit/test_option_manager.py .F [100%]
========================================== FAILURES ===========================================
_____________________________________ test_action_config ______________________________________
tmpdir = local('/tmp/pytest-of-h/pytest-62/test_action_config0')
def test_action_config(tmpdir):
tmpdir.join("setup.cfg").write("[flake8]\nmy-option=foo\n")
with tmpdir.as_cwd():
cfg, cfg_dir = config.load_config(None, [], isolated=False)
> assert cfg.get("flake8", "my-option") == "bar"
E AssertionError: assert 'foo' == 'bar'
E - bar
E + foo
tests/unit/test_option_manager.py:243: AssertionError
========================= 1 failed, 1 passed, 463 deselected in 0.26s =========================
The value is foo, which it would be if there's no action specified, but it completely sidesteps calling the action completely.
how did you install flake8?
pip install flake8also when cloned from github master
unmodified output of
flake8 --bug-report{ "platform": { "python_implementation": "CPython", "python_version": "3.10.8", "system": "Linux" }, "plugins": [ { "plugin": "mccabe", "version": "0.7.0" }, { "plugin": "pycodestyle", "version": "2.10.0" }, { "plugin": "pyflakes", "version": "3.0.1" } ], "version": "6.0.0" }describe the problem
what I expected to happen
my argparse.Action to be called regardless of if the parameter is specified on the command line or in the config
sample code
I implemented a test that reproduces the error. The first one passes, the second one doesn't.
commands ran
The value is
foo, which it would be if there's noactionspecified, but it completely sidesteps calling the action completely.