mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Switch to the new ProjectConfig API
This commit is contained in:
@ -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)
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user