From 5b091b602fbe3204a5fc04bec9b382e62f093f5f Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 20 Oct 2021 15:35:01 +0300 Subject: [PATCH] =?UTF-8?q?Fixed=20a=20=E2=80=9CTypeError=E2=80=9D=20issue?= =?UTF-8?q?=20when=20extending=20configuration=20option=20in=20=E2=80=9Cpl?= =?UTF-8?q?atformio.ini=E2=80=9D=20with=20the=20multi-line=20default=20val?= =?UTF-8?q?ue=20//=20Resolve=20#4082?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY.rst | 2 ++ platformio/project/config.py | 5 ++++- tests/test_projectconf.py | 30 +++++++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 4d78e58d..f2d78cfe 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -12,6 +12,8 @@ PlatformIO Core 5 ~~~~~~~~~~~~~~~~~~ - Override debugging firmware loading mode using ``--load-mode`` option for `pio debug `__ command +- Removed debugging "legacy Click" message from CLI (`issue #4083 `_) +- Fixed a "TypeError: sequence item 1: expected str instance, list found" issue when extending configuration option in `"platformio.ini" `__ with the multi-line default value (`issue #4082 `_) 5.2.1 (2021-10-11) ~~~~~~~~~~~~~~~~~~ diff --git a/platformio/project/config.py b/platformio/project/config.py index 13ff8e2b..187cb993 100644 --- a/platformio/project/config.py +++ b/platformio/project/config.py @@ -295,7 +295,10 @@ class ProjectConfigBase(object): section, option = match.group(1), match.group(2) if section == "sysenv": return os.getenv(option) - return self.getraw(section, option) + value = self.getraw(section, option) + if isinstance(value, list): + return "\n".join(value) + return value def get(self, section, option, default=MISSING): value = None diff --git a/tests/test_projectconf.py b/tests/test_projectconf.py index 832ceb71..99c71ec0 100644 --- a/tests/test_projectconf.py +++ b/tests/test_projectconf.py @@ -63,6 +63,10 @@ targets = [env:test_extends] extends = strict_settings +[env:inject_base_env] +debug_build_flags = + ${env.debug_build_flags} + -D CUSTOM_DEBUG_FLAG """ @@ -150,13 +154,20 @@ def test_sections(config): "custom", "env:base", "env:test_extends", + "env:inject_base_env", "env:extra_1", "env:extra_2", ] def test_envs(config): - assert config.envs() == ["base", "test_extends", "extra_1", "extra_2"] + assert config.envs() == [ + "base", + "test_extends", + "inject_base_env", + "extra_1", + "extra_2", + ] assert config.default_envs() == ["base", "extra_2"] @@ -274,6 +285,14 @@ def test_get_value(config): assert config.get("env:extra_2", "monitor_speed") == 9600 assert config.get("env:base", "build_flags") == ["-D DEBUG=1"] + # get default value from ConfigOption + assert config.get("env:inject_base_env", "debug_build_flags") == [ + "-Og", + "-g2", + "-ggdb2", + "-D CUSTOM_DEBUG_FLAG", + ] + def test_items(config): assert config.items("custom") == [ @@ -445,4 +464,13 @@ def test_dump(tmpdir_factory): ], ), ("env:test_extends", [("extends", ["strict_settings"])]), + ( + "env:inject_base_env", + [ + ( + "debug_build_flags", + ["${env.debug_build_flags}", "-D CUSTOM_DEBUG_FLAG"], + ) + ], + ), ]