def config_update_description(path, text): config = ProjectConfig(path, parse_extra=False, expand_interpolations=False) if not config.has_section("platformio"): config.add_section("platformio") if text: config.set("platformio", "description", text) else: if config.has_option("platformio", "description"): config.remove_option("platformio", "description") if not config.options("platformio"): config.remove_section("platformio") return config.save()
def _process_cmd_run_or_test( # pylint: disable=too-many-locals,too-many-branches self, command, options): assert options and "project_id" in options project_dir = join(self.working_dir, "projects", options["project_id"]) origin_pio_ini = join(project_dir, "platformio.ini") back_pio_ini = join(project_dir, "platformio.ini.bak") # remove insecure project options try: conf = ProjectConfig(origin_pio_ini) if isfile(back_pio_ini): os.remove(back_pio_ini) os.rename(origin_pio_ini, back_pio_ini) # cleanup if conf.has_section("platformio"): for opt in conf.options("platformio"): if opt.endswith("_dir"): conf.remove_option("platformio", opt) else: conf.add_section("platformio") conf.set("platformio", "build_dir", ".pio/build") conf.save(origin_pio_ini) # restore A/M times os.utime(origin_pio_ini, (getatime(back_pio_ini), getmtime(back_pio_ini))) except NotPlatformIOProjectError as e: raise pb.Error(str(e)) cmd_args = ["platformio", "--force", command, "-d", project_dir] for env in options.get("environment", []): cmd_args.extend(["-e", env]) for target in options.get("target", []): cmd_args.extend(["-t", target]) for ignore in options.get("ignore", []): cmd_args.extend(["-i", ignore]) if options.get("upload_port", False): cmd_args.extend(["--upload-port", options.get("upload_port")]) if options.get("test_port", False): cmd_args.extend(["--test-port", options.get("test_port")]) if options.get("disable_auto_clean", False): cmd_args.append("--disable-auto-clean") if options.get("without_building", False): cmd_args.append("--without-building") if options.get("without_uploading", False): cmd_args.append("--without-uploading") if options.get("silent", False): cmd_args.append("-s") if options.get("verbose", False): cmd_args.append("-v") paused_acs = [] for ac in self._acs.values(): if not isinstance(ac, SerialPortAsyncCmd): continue self.log.info("Pause active monitor at {port}", port=ac.options["port"]) ac.pause() paused_acs.append(ac) def _cb_on_end(): if isfile(back_pio_ini): if isfile(origin_pio_ini): os.remove(origin_pio_ini) os.rename(back_pio_ini, origin_pio_ini) for ac in paused_acs: ac.unpause() self.log.info("Unpause active monitor at {port}", port=ac.options["port"]) return self._defer_async_cmd( ProcessAsyncCmd( { "executable": proc.where_is_program("platformio"), "args": cmd_args }, on_end_callback=_cb_on_end, ))
def test_real_config(tmpdir): tmpdir.join("platformio.ini").write(BASE_CONFIG) tmpdir.join("extra_envs.ini").write(EXTRA_ENVS_CONFIG) tmpdir.join("extra_debug.ini").write(EXTRA_DEBUG_CONFIG) config = None with tmpdir.as_cwd(): config = ProjectConfig(tmpdir.join("platformio.ini").strpath) assert config assert len(config.warnings) == 2 assert "lib_install" in config.warnings[1] config.validate(["extra_2", "base"], silent=True) with pytest.raises(UnknownEnvNames): config.validate(["non-existing-env"]) # unknown section with pytest.raises(ConfigParser.NoSectionError): config.getraw("unknown_section", "unknown_option") # unknown option with pytest.raises(ConfigParser.NoOptionError): config.getraw("custom", "unknown_option") # unknown option even if exists in [env] with pytest.raises(ConfigParser.NoOptionError): config.getraw("platformio", "monitor_speed") # sections assert config.sections() == [ "platformio", "env", "custom", "env:base", "env:extra_1", "env:extra_2" ] # envs assert config.envs() == ["base", "extra_1", "extra_2"] assert config.default_envs() == ["base", "extra_2"] # options assert config.options(env="base") == [ "build_flags", "targets", "monitor_speed", "lib_deps", "lib_ignore" ] # has_option assert config.has_option("env:base", "monitor_speed") assert not config.has_option("custom", "monitor_speed") assert not config.has_option("env:extra_1", "lib_install") # sysenv assert config.get("custom", "extra_flags") is None assert config.get("env:base", "build_flags") == ["-D DEBUG=1"] assert config.get("env:base", "upload_port") is None assert config.get("env:extra_2", "upload_port") == "/dev/extra_2/port" os.environ["PLATFORMIO_BUILD_FLAGS"] = "-DSYSENVDEPS1 -DSYSENVDEPS2" os.environ["PLATFORMIO_UPLOAD_PORT"] = "/dev/sysenv/port" os.environ["__PIO_TEST_CNF_EXTRA_FLAGS"] = "-L /usr/local/lib" assert config.get("custom", "extra_flags") == "-L /usr/local/lib" assert config.get("env:base", "build_flags") == [ "-D DEBUG=1 -L /usr/local/lib", "-DSYSENVDEPS1 -DSYSENVDEPS2" ] assert config.get("env:base", "upload_port") == "/dev/sysenv/port" assert config.get("env:extra_2", "upload_port") == "/dev/extra_2/port" # getraw assert config.getraw("env:base", "targets") == "" assert config.getraw("env:extra_1", "lib_deps") == "574" assert config.getraw("env:extra_1", "build_flags") == "-lc -lm -D DEBUG=1" # get assert config.get("custom", "debug_flags") == "-D DEBUG=1" assert config.get("env:extra_1", "build_flags") == [ "-lc -lm -D DEBUG=1", "-DSYSENVDEPS1 -DSYSENVDEPS2" ] assert config.get("env:extra_2", "build_flags") == ["-Og", "-DSYSENVDEPS1 -DSYSENVDEPS2"] assert config.get("env:extra_2", "monitor_speed") == "115200" assert config.get("env:base", "build_flags") == ([ "-D DEBUG=1 -L /usr/local/lib", "-DSYSENVDEPS1 -DSYSENVDEPS2" ]) # items assert config.items("custom") == [ ("debug_flags", "-D DEBUG=1"), ("lib_flags", "-lc -lm"), ("extra_flags", "-L /usr/local/lib"), ("lib_ignore", "LibIgnoreCustom") ] # yapf: disable assert config.items(env="base") == [ ("build_flags", [ "-D DEBUG=1 -L /usr/local/lib", "-DSYSENVDEPS1 -DSYSENVDEPS2"]), ("targets", []), ("monitor_speed", "115200"), ("lib_deps", ["Lib1", "Lib2"]), ("lib_ignore", ["LibIgnoreCustom"]), ("upload_port", "/dev/sysenv/port") ] # yapf: disable assert config.items(env="extra_1") == [ ("build_flags", ["-lc -lm -D DEBUG=1", "-DSYSENVDEPS1 -DSYSENVDEPS2"]), ("lib_deps", ["574"]), ("monitor_speed", "115200"), ("lib_ignore", ["LibIgnoreCustom"]), ("upload_port", "/dev/sysenv/port") ] # yapf: disable assert config.items(env="extra_2") == [ ("build_flags", ["-Og", "-DSYSENVDEPS1 -DSYSENVDEPS2"]), ("lib_ignore", ["LibIgnoreCustom", "Lib3"]), ("upload_port", "/dev/extra_2/port"), ("monitor_speed", "115200"), ("lib_deps", ["Lib1", "Lib2"]) ] # yapf: disable # cleanup system environment variables del os.environ["PLATFORMIO_BUILD_FLAGS"] del os.environ["PLATFORMIO_UPLOAD_PORT"] del os.environ["__PIO_TEST_CNF_EXTRA_FLAGS"]