From 0b2d7806183c817fbb7854c2245cb7b538fe09b2 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Fri, 10 May 2019 15:45:52 +0300 Subject: [PATCH] Switch to the new ProjectConfig API --- platformio/commands/debug/command.py | 13 +++--- platformio/commands/debug/helpers.py | 26 ++---------- .../commands/home/rpc/handlers/project.py | 19 ++++----- platformio/commands/test/command.py | 42 ++++++++----------- platformio/commands/test/processor.py | 6 +-- 5 files changed, 38 insertions(+), 68 deletions(-) diff --git a/platformio/commands/debug/command.py b/platformio/commands/debug/command.py index c604d8b9..7e1bf62e 100644 --- a/platformio/commands/debug/command.py +++ b/platformio/commands/debug/command.py @@ -16,13 +16,14 @@ # pylint: disable=too-many-locals, too-many-branches import os -from os.path import isfile +from os.path import isfile, join import click from platformio import exception, util from platformio.commands.debug import helpers from platformio.managers.core import inject_contrib_pysite +from platformio.project.config import ProjectConfig @click.command( @@ -69,10 +70,12 @@ def cli(ctx, project_dir, project_conf, environment, verbose, interface, project_dir = os.getenv("CWD") with util.cd(project_dir): - env_name = helpers.check_env_name(project_conf or project_dir, - environment) - env_options = helpers.get_env_options(project_conf or project_dir, - env_name) + config = ProjectConfig.get_instance( + project_conf or join(project_dir, "platformio.ini")) + config.validate(envs=[environment] if environment else None) + + env_name = environment or helpers.get_default_debug_env(config) + env_options = config.items(env=env_name, as_dict=True) if not set(env_options.keys()) >= set(["platform", "board"]): raise exception.ProjectEnvsNotAvailable() debug_options = helpers.validate_debug_options(ctx, env_options) diff --git a/platformio/commands/debug/helpers.py b/platformio/commands/debug/helpers.py index 757d3ad9..139411ea 100644 --- a/platformio/commands/debug/helpers.py +++ b/platformio/commands/debug/helpers.py @@ -46,29 +46,9 @@ def escape_path(path): return path.replace("\\", "/") -def check_env_name(project_conf, environment): - config = util.load_project_config(project_conf) - envs = [] - for section in config.sections(): - if section.startswith("env:"): - envs.append(section[4:]) - if not envs: - raise exception.ProjectEnvsNotAvailable() - if not environment and config.has_option("platformio", "env_default"): - environment = config.get("platformio", "env_default").split(", ")[0] - if environment: - if environment in envs: - return environment - raise exception.UnknownEnvNames(environment, envs) - return envs[0] - - -def get_env_options(project_conf, environment): - config = util.load_project_config(project_conf) - options = {} - for k, v in config.items("env:%s" % environment): - options[k] = v - return options +def get_default_debug_env(config): + default_envs = config.default_envs() + return default_envs[0] if default_envs else config.envs()[0] def validate_debug_options(cmd_ctx, env_options): diff --git a/platformio/commands/home/rpc/handlers/project.py b/platformio/commands/home/rpc/handlers/project.py index 2a4c4032..c3f48fcc 100644 --- a/platformio/commands/home/rpc/handlers/project.py +++ b/platformio/commands/home/rpc/handlers/project.py @@ -28,11 +28,7 @@ from platformio.commands.home.rpc.handlers.app import AppRPC from platformio.commands.home.rpc.handlers.piocore import PIOCoreRPC from platformio.ide.projectgenerator import ProjectGenerator from platformio.managers.platform import PlatformManager - -try: - from configparser import Error as ConfigParserError -except ImportError: - from ConfigParser import Error as ConfigParserError +from platformio.project.config import ProjectConfig class ProjectRPC(object): @@ -42,7 +38,8 @@ class ProjectRPC(object): def _get_project_data(project_dir): data = {"boards": [], "libExtraDirs": []} - config = util.load_project_config(project_dir) + config = ProjectConfig(join(project_dir, "platformio.ini")) + config.validate(validate_options=False) if config.has_section("platformio") and \ config.has_option("platformio", "lib_extra_dirs"): @@ -87,10 +84,8 @@ class ProjectRPC(object): boards = [] try: data = _get_project_data(project_dir) - except exception.NotPlatformIOProject: + except exception.PlatformIOProjectException: continue - except ConfigParserError: - pass for board_id in data.get("boards", []): name = board_id @@ -235,13 +230,13 @@ class ProjectRPC(object): for project_dir, _, __ in os.walk(examples_dir): project_description = None try: - config = util.load_project_config(project_dir) + config = ProjectConfig(join(project_dir, "platformio.ini")) + config.validate(validate_options=False) if config.has_section("platformio") and \ config.has_option("platformio", "description"): project_description = config.get( "platformio", "description") - except (exception.NotPlatformIOProject, - exception.InvalidProjectConf): + except exception.PlatformIOProjectException: continue path_tokens = project_dir.split(sep) diff --git a/platformio/commands/test/command.py b/platformio/commands/test/command.py index 47f8571f..2fc2eca1 100644 --- a/platformio/commands/test/command.py +++ b/platformio/commands/test/command.py @@ -22,9 +22,10 @@ from time import time import click from platformio import exception, util -from platformio.commands.run import check_project_envs, print_header +from platformio.commands.run import print_header from platformio.commands.test.embedded import EmbeddedTestProcessor from platformio.commands.test.native import NativeTestProcessor +from platformio.project.config import ProjectConfig @click.command("test", short_help="Unit Testing") @@ -87,39 +88,32 @@ def cli( # pylint: disable=redefined-builtin if not isdir(test_dir): raise exception.TestDirNotExists(test_dir) test_names = get_test_names(test_dir) - projectconf = util.load_project_config(project_conf) - env_default = None - if projectconf.has_option("platformio", "env_default"): - env_default = util.parse_conf_multi_values( - projectconf.get("platformio", "env_default")) - assert check_project_envs(projectconf, environment or env_default) + + config = ProjectConfig.get_instance( + project_conf or join(project_dir, "platformio.ini")) + config.validate(envs=environment) click.echo("Verbose mode can be enabled via `-v, --verbose` option") click.echo("Collected %d items" % len(test_names)) - start_time = time() results = [] + start_time = time() + default_envs = config.default_envs() for testname in test_names: - for section in projectconf.sections(): - if not section.startswith("env:"): - continue + for envname in config.envs(): + section = "env:%s" % envname # filter and ignore patterns patterns = dict(filter=list(filter), ignore=list(ignore)) for key in patterns: - if projectconf.has_option(section, "test_%s" % key): - patterns[key].extend([ - p.strip() - for p in projectconf.get(section, "test_%s" % - key).split(", ") - if p.strip() - ]) + if config.has_option(section, "test_%s" % key): + patterns[key].extend( + config.getlist(section, "test_%s" % key)) - envname = section[4:] skip_conditions = [ environment and envname not in environment, - not environment and env_default - and envname not in env_default, + not environment and default_envs + and envname not in default_envs, testname != "*" and patterns['filter'] and not any([fnmatch(testname, p) for p in patterns['filter']]), @@ -131,13 +125,13 @@ def cli( # pylint: disable=redefined-builtin results.append((None, testname, envname)) continue - cls = (NativeTestProcessor if projectconf.get( - section, "platform") == "native" else + cls = (NativeTestProcessor + if config.get(section, "platform") == "native" else EmbeddedTestProcessor) tp = cls( ctx, testname, envname, dict( - project_config=projectconf, + project_config=config, project_dir=project_dir, upload_port=upload_port, test_port=test_port, diff --git a/platformio/commands/test/processor.py b/platformio/commands/test/processor.py index 7c3b84eb..4a4bc9dd 100644 --- a/platformio/commands/test/processor.py +++ b/platformio/commands/test/processor.py @@ -85,10 +85,8 @@ class TestProcessorBase(object): self.test_name = testname self.options = options self.env_name = envname - self.env_options = { - k: v - for k, v in options['project_config'].items("env:" + envname) - } + self.env_options = options['project_config'].items( + env=envname, as_dict=True) self._run_failed = False self._outputcpp_generated = False