Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
def test_init_custom_framework(clirunner, validate_cliresult):
    with clirunner.isolated_filesystem():
        result = clirunner.invoke(
            cmd_init, ["-b", "teensy31", "--project-option", "framework=mbed"])
        validate_cliresult(result)
        validate_pioproject(getcwd())
        config = ProjectConfig(join(getcwd(), "platformio.ini"))
        config.validate()
        expected_result = dict(platform="teensy",
                               board="teensy31",
                               framework=["mbed"])
        assert config.has_section("env:teensy31")
        assert sorted(config.items(env="teensy31",
                                   as_dict=True).items()) == sorted(
                                       expected_result.items())
Ejemplo n.º 3
0
def test_init_enable_auto_uploading(clirunner, validate_cliresult):
    with clirunner.isolated_filesystem():
        result = clirunner.invoke(
            cmd_init, ["-b", "uno", "--project-option", "targets=upload"])
        validate_cliresult(result)
        validate_pioproject(getcwd())
        config = ProjectConfig(join(getcwd(), "platformio.ini"))
        config.validate()
        expected_result = dict(targets=["upload"],
                               platform="atmelavr",
                               board="uno",
                               framework=["arduino"])
        assert config.has_section("env:uno")
        assert sorted(config.items(env="uno", as_dict=True).items()) == sorted(
            expected_result.items())
Ejemplo n.º 4
0
def update_project_env(project_dir, environment, project_option):
    if not project_option:
        return
    config = ProjectConfig(os.path.join(project_dir, "platformio.ini"),
                           parse_extra=False)

    section = "env:%s" % environment
    if not config.has_section(section):
        config.add_section(section)

    for item in project_option:
        if "=" not in item:
            continue
        _name, _value = item.split("=", 1)
        config.set(section, _name.strip(), _value.strip())

    config.save()
Ejemplo n.º 5
0
def test_init_special_board(clirunner, validate_cliresult):
    with clirunner.isolated_filesystem():
        result = clirunner.invoke(cmd_init, ["-b", "uno"])
        validate_cliresult(result)
        validate_pioproject(getcwd())

        result = clirunner.invoke(cmd_boards, ["Arduino Uno", "--json-output"])
        validate_cliresult(result)
        boards = json.loads(result.output)

        config = ProjectConfig(join(getcwd(), "platformio.ini"))
        config.validate()

        expected_result = dict(platform=str(boards[0]['platform']),
                               board="uno",
                               framework=[str(boards[0]['frameworks'][0])])
        assert config.has_section("env:uno")
        assert sorted(config.items(env="uno", as_dict=True).items()) == sorted(
            expected_result.items())
Ejemplo n.º 6
0
    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,
            ))
Ejemplo n.º 7
0
def _copy_project_conf(build_dir, project_conf):
    config = ProjectConfig(project_conf, parse_extra=False)
    if config.has_section("platformio"):
        config.remove_section("platformio")
    config.save(join(build_dir, "platformio.ini"))