diff --git a/news/13548.bugfix.rst b/news/13548.bugfix.rst new file mode 100644 index 00000000000..1dff4989a5a --- /dev/null +++ b/news/13548.bugfix.rst @@ -0,0 +1,2 @@ +Fix regression in configuration parsing that was turning a single value +into a list and thus leading to a validation error. diff --git a/src/pip/_internal/cli/parser.py b/src/pip/_internal/cli/parser.py index f8b8ac43bec..3905a91f2e1 100644 --- a/src/pip/_internal/cli/parser.py +++ b/src/pip/_internal/cli/parser.py @@ -203,9 +203,9 @@ def _get_ordered_configuration_items( if section in override_order: section_items[section].append((key, val)) - # Yield each group in their override order - for section in override_order: - yield from section_items[section] + # Yield each group in their override order + for section in override_order: + yield from section_items[section] def _update_defaults(self, defaults: dict[str, Any]) -> dict[str, Any]: """Updates the given defaults with values from the config files and diff --git a/tests/functional/test_configuration.py b/tests/functional/test_configuration.py index af3000e7f77..eb84343a6de 100644 --- a/tests/functional/test_configuration.py +++ b/tests/functional/test_configuration.py @@ -9,12 +9,14 @@ import sys import textwrap +import pytest + from pip._internal.cli.status_codes import ERROR from pip._internal.configuration import CONFIG_BASENAME, Kind from pip._internal.configuration import get_configuration_files as _get_config_files from pip._internal.utils.compat import WINDOWS -from tests.lib import PipTestEnvironment +from tests.lib import PipTestEnvironment, TestData from tests.lib.configuration_helpers import ConfigurationMixin, kinds from tests.lib.venv import VirtualEnvironment @@ -212,3 +214,21 @@ def test_config_separated( ), result.stdout, ) + + @pytest.mark.network + def test_editable_mode_default_config( + self, script: PipTestEnvironment, data: TestData + ) -> None: + """Test that setting default editable mode through configuration works + as expected. + """ + script.pip( + "config", "--site", "set", "install.config-settings", "editable_mode=strict" + ) + to_install = data.src.joinpath("simplewheel-1.0") + script.pip("install", "-e", to_install) + assert os.path.isdir( + os.path.join( + to_install, "build", "__editable__.simplewheel-1.0-py3-none-any" + ) + )