def validate_boards(ctx, param, value): # pylint: disable=W0613 pm = PlatformManager() for id_ in value: try: pm.board_config(id_) except exception.UnknownBoard: raise click.BadParameter( "`%s`. Please search for board ID using `platformio boards` " "command" % id_) return value
def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, force_download): content = [] used_boards = [] used_platforms = [] config = util.load_project_config(project_dir) for section in config.sections(): cond = [ section.startswith("env:"), config.has_option(section, "board") ] if all(cond): used_boards.append(config.get(section, "board")) pm = PlatformManager() for id_ in board_ids: board_config = pm.board_config(id_) used_platforms.append(board_config['platform']) if id_ in used_boards: continue used_boards.append(id_) envopts = {"platform": board_config['platform'], "board": id_} # find default framework for board frameworks = board_config.get("frameworks") if frameworks: envopts['framework'] = frameworks[0] for item in project_option: if "=" not in item: continue _name, _value = item.split("=", 1) envopts[_name.strip()] = _value.strip() content.append("") content.append("[env:%s%s]" % (env_prefix, id_)) for name, value in envopts.items(): content.append("%s = %s" % (name, value)) if force_download and used_platforms: _install_dependent_platforms(ctx, used_platforms) if not content: return with open(join(project_dir, "platformio.ini"), "a") as f: content.append("") f.write("\n".join(content))
def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, force_download): content = [] used_boards = [] used_platforms = [] config = util.load_project_config(project_dir) for section in config.sections(): if not all([section.startswith("env:"), config.has_option(section, "board")]): continue used_boards.append(config.get(section, "board")) pm = PlatformManager() for id_ in board_ids: board_config = pm.board_config(id_) used_platforms.append(board_config['platform']) if id_ in used_boards: continue used_boards.append(id_) envopts = {"platform": board_config['platform'], "board": id_} # find default framework for board frameworks = board_config.get("frameworks") if frameworks: envopts['framework'] = frameworks[0] for item in project_option: if "=" not in item: continue _name, _value = item.split("=", 1) envopts[_name.strip()] = _value.strip() content.append("") content.append("[env:%s%s]" % (env_prefix, id_)) for name, value in envopts.items(): content.append("%s = %s" % (name, value)) if force_download and used_platforms: _install_dependent_platforms(ctx, used_platforms) if not content: return with open(join(project_dir, "platformio.ini"), "a") as f: content.append("") f.write("\n".join(content))
def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, force_download): config = ProjectConfig(os.path.join(project_dir, "platformio.ini"), parse_extra=False) used_boards = [] for section in config.sections(): cond = [ section.startswith("env:"), config.has_option(section, "board") ] if all(cond): used_boards.append(config.get(section, "board")) pm = PlatformManager() used_platforms = [] modified = False for id_ in board_ids: board_config = pm.board_config(id_) used_platforms.append(board_config["platform"]) if id_ in used_boards: continue used_boards.append(id_) modified = True envopts = {"platform": board_config["platform"], "board": id_} # find default framework for board frameworks = board_config.get("frameworks") if frameworks: envopts["framework"] = frameworks[0] for item in project_option: if "=" not in item: continue _name, _value = item.split("=", 1) envopts[_name.strip()] = _value.strip() section = "env:%s%s" % (env_prefix, id_) config.add_section(section) for option, value in envopts.items(): config.set(section, option, value) if force_download and used_platforms: _install_dependent_platforms(ctx, used_platforms) if modified: config.save()
def _get_projects(project_dirs=None): def _get_project_data(project_dir): data = {"boards": [], "envLibdepsDirs": [], "libExtraDirs": []} config = ProjectConfig(join(project_dir, "platformio.ini")) libdeps_dir = get_project_libdeps_dir() data['libExtraDirs'].extend( config.get("platformio", "lib_extra_dirs", [])) for section in config.sections(): if not section.startswith("env:"): continue data['envLibdepsDirs'].append(join(libdeps_dir, section[4:])) if config.has_option(section, "board"): data['boards'].append(config.get(section, "board")) data['libExtraDirs'].extend( config.get(section, "lib_extra_dirs", [])) # skip non existing folders and resolve full path for key in ("envLibdepsDirs", "libExtraDirs"): data[key] = [ expanduser(d) if d.startswith("~") else realpath(d) for d in data[key] if isdir(d) ] return data def _path_to_name(path): return (sep).join(path.split(sep)[-2:]) if not project_dirs: project_dirs = AppRPC.load_state()['storage']['recentProjects'] result = [] pm = PlatformManager() for project_dir in project_dirs: data = {} boards = [] try: with util.cd(project_dir): data = _get_project_data(project_dir) except exception.PlatformIOProjectException: continue for board_id in data.get("boards", []): name = board_id try: name = pm.board_config(board_id)['name'] except (exception.UnknownBoard, exception.UnknownPlatform): pass boards.append({"id": board_id, "name": name}) result.append({ "path": project_dir, "name": _path_to_name(project_dir), "modified": int(getmtime(project_dir)), "boards": boards, "envLibStorages": [{ "name": basename(d), "path": d } for d in data.get("envLibdepsDirs", [])], "extraLibStorages": [{ "name": _path_to_name(d), "path": d } for d in data.get("libExtraDirs", [])] }) return result
def get_projects(): def _get_project_data(): data = {"boards": [], "envLibdepsDirs": [], "libExtraDirs": []} config = ProjectConfig() data["envs"] = config.envs() data["description"] = config.get("platformio", "description") data["libExtraDirs"].extend( config.get("platformio", "lib_extra_dirs", [])) libdeps_dir = config.get_optional_dir("libdeps") for section in config.sections(): if not section.startswith("env:"): continue data["envLibdepsDirs"].append( os.path.join(libdeps_dir, section[4:])) if config.has_option(section, "board"): data["boards"].append(config.get(section, "board")) data["libExtraDirs"].extend( config.get(section, "lib_extra_dirs", [])) # skip non existing folders and resolve full path for key in ("envLibdepsDirs", "libExtraDirs"): data[key] = [ fs.expanduser(d) if d.startswith("~") else os.path.realpath(d) for d in data[key] if os.path.isdir(d) ] return data def _path_to_name(path): return (os.path.sep).join(path.split(os.path.sep)[-2:]) result = [] pm = PlatformManager() for project_dir in AppRPC.load_state()["storage"]["recentProjects"]: if not os.path.isdir(project_dir): continue data = {} boards = [] try: with fs.cd(project_dir): data = _get_project_data() except ProjectError: continue for board_id in data.get("boards", []): name = board_id try: name = pm.board_config(board_id)["name"] except exception.PlatformioException: pass boards.append({"id": board_id, "name": name}) result.append({ "path": project_dir, "name": _path_to_name(project_dir), "modified": int(os.path.getmtime(project_dir)), "boards": boards, "description": data.get("description"), "envs": data.get("envs", []), "envLibStorages": [{ "name": os.path.basename(d), "path": d } for d in data.get("envLibdepsDirs", [])], "extraLibStorages": [{ "name": _path_to_name(d), "path": d } for d in data.get("libExtraDirs", [])], }) return result