mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Export config dump/load and schema to PIO Home Project.RPC
This commit is contained in:
@ -29,6 +29,7 @@ from platformio.ide.projectgenerator import ProjectGenerator
|
||||
from platformio.managers.platform import PlatformManager
|
||||
from platformio.project.config import ProjectConfig
|
||||
from platformio.project.helpers import get_project_dir, is_platformio_project
|
||||
from platformio.project.options import get_config_options_schema
|
||||
|
||||
|
||||
class ProjectRPC(object):
|
||||
@ -42,6 +43,20 @@ class ProjectRPC(object):
|
||||
with fs.cd(project_dir):
|
||||
return getattr(ProjectConfig(**init_kwargs), method)(*args)
|
||||
|
||||
@staticmethod
|
||||
def config_load(path):
|
||||
return ProjectConfig(path).as_tuple()
|
||||
|
||||
@staticmethod
|
||||
def config_dump(path, data):
|
||||
config = ProjectConfig(path)
|
||||
config.update(data, clear=True)
|
||||
return config.save()
|
||||
|
||||
@staticmethod
|
||||
def get_config_schema():
|
||||
return get_config_options_schema()
|
||||
|
||||
@staticmethod
|
||||
def _get_projects(project_dirs=None):
|
||||
def _get_project_data():
|
||||
|
@ -15,40 +15,58 @@
|
||||
# pylint: disable=redefined-builtin, too-many-arguments
|
||||
|
||||
import os
|
||||
from collections import OrderedDict, namedtuple
|
||||
from collections import OrderedDict
|
||||
|
||||
import click
|
||||
|
||||
from platformio import fs
|
||||
|
||||
ConfigOptionClass = namedtuple(
|
||||
"ConfigOption",
|
||||
[
|
||||
"scope",
|
||||
"name",
|
||||
"type",
|
||||
"multiple",
|
||||
"sysenvvar",
|
||||
"buildenvvar",
|
||||
"oldnames",
|
||||
"default",
|
||||
],
|
||||
)
|
||||
|
||||
class ConfigOption(object): # pylint: disable=too-many-instance-attributes
|
||||
def __init__(
|
||||
self,
|
||||
scope,
|
||||
group,
|
||||
name,
|
||||
type=str,
|
||||
multiple=False,
|
||||
sysenvvar=None,
|
||||
buildenvvar=None,
|
||||
oldnames=None,
|
||||
default=None,
|
||||
description=None,
|
||||
):
|
||||
self.scope = scope
|
||||
self.group = group
|
||||
self.name = name
|
||||
self.type = type
|
||||
self.multiple = multiple
|
||||
self.sysenvvar = sysenvvar
|
||||
self.buildenvvar = buildenvvar
|
||||
self.oldnames = oldnames
|
||||
self.default = default
|
||||
self.description = description
|
||||
|
||||
def ConfigOption(
|
||||
scope,
|
||||
name,
|
||||
type=str,
|
||||
multiple=False,
|
||||
sysenvvar=None,
|
||||
buildenvvar=None,
|
||||
oldnames=None,
|
||||
default=None,
|
||||
):
|
||||
return ConfigOptionClass(
|
||||
scope, name, type, multiple, sysenvvar, buildenvvar, oldnames, default
|
||||
)
|
||||
def as_dict(self):
|
||||
result = dict(
|
||||
scope=self.scope,
|
||||
group=self.group,
|
||||
name=self.name,
|
||||
type="string",
|
||||
multiple=self.multiple,
|
||||
default=self.default,
|
||||
description=self.description,
|
||||
)
|
||||
if isinstance(self.type, click.ParamType):
|
||||
result["type"] = self.type.name
|
||||
|
||||
if isinstance(self.type, (click.IntRange, click.FloatRange)):
|
||||
result["min"] = self.type.min
|
||||
result["max"] = self.type.max
|
||||
if isinstance(self.type, click.Choice):
|
||||
result["choices"] = self.type.choices
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def ConfigPlatformioOption(*args, **kwargs):
|
||||
@ -66,90 +84,110 @@ ProjectOptions = OrderedDict(
|
||||
#
|
||||
# [platformio]
|
||||
#
|
||||
ConfigPlatformioOption(name="description"),
|
||||
ConfigPlatformioOption(group="generic", name="description"),
|
||||
ConfigPlatformioOption(
|
||||
group="generic",
|
||||
name="default_envs",
|
||||
oldnames=["env_default"],
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_DEFAULT_ENVS",
|
||||
),
|
||||
ConfigPlatformioOption(name="extra_configs", multiple=True),
|
||||
ConfigPlatformioOption(
|
||||
group="generic", name="extra_configs", multiple=True
|
||||
),
|
||||
# Dirs
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="core_dir",
|
||||
oldnames=["home_dir"],
|
||||
sysenvvar="PLATFORMIO_CORE_DIR",
|
||||
default=os.path.join(fs.expanduser("~"), ".platformio"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="globallib_dir",
|
||||
sysenvvar="PLATFORMIO_GLOBALLIB_DIR",
|
||||
default=os.path.join("$PROJECT_CORE_DIR", "lib"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="platforms_dir",
|
||||
sysenvvar="PLATFORMIO_PLATFORMS_DIR",
|
||||
default=os.path.join("$PROJECT_CORE_DIR", "platforms"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="packages_dir",
|
||||
sysenvvar="PLATFORMIO_PACKAGES_DIR",
|
||||
default=os.path.join("$PROJECT_CORE_DIR", "packages"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="cache_dir",
|
||||
sysenvvar="PLATFORMIO_CACHE_DIR",
|
||||
default=os.path.join("$PROJECT_CORE_DIR", ".cache"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
name="build_cache_dir", sysenvvar="PLATFORMIO_BUILD_CACHE_DIR"
|
||||
group="directory",
|
||||
name="build_cache_dir",
|
||||
sysenvvar="PLATFORMIO_BUILD_CACHE_DIR",
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="workspace_dir",
|
||||
sysenvvar="PLATFORMIO_WORKSPACE_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", ".pio"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="build_dir",
|
||||
sysenvvar="PLATFORMIO_BUILD_DIR",
|
||||
default=os.path.join("$PROJECT_WORKSPACE_DIR", "build"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="libdeps_dir",
|
||||
sysenvvar="PLATFORMIO_LIBDEPS_DIR",
|
||||
default=os.path.join("$PROJECT_WORKSPACE_DIR", "libdeps"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="lib_dir",
|
||||
sysenvvar="PLATFORMIO_LIB_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "lib"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="include_dir",
|
||||
sysenvvar="PLATFORMIO_INCLUDE_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "include"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="src_dir",
|
||||
sysenvvar="PLATFORMIO_SRC_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "src"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="test_dir",
|
||||
sysenvvar="PLATFORMIO_TEST_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "test"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="boards_dir",
|
||||
sysenvvar="PLATFORMIO_BOARDS_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "boards"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="data_dir",
|
||||
sysenvvar="PLATFORMIO_DATA_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "data"),
|
||||
),
|
||||
ConfigPlatformioOption(
|
||||
group="directory",
|
||||
name="shared_dir",
|
||||
sysenvvar="PLATFORMIO_SHARED_DIR",
|
||||
default=os.path.join("$PROJECT_DIR", "shared"),
|
||||
@ -157,147 +195,206 @@ ProjectOptions = OrderedDict(
|
||||
#
|
||||
# [env]
|
||||
#
|
||||
ConfigEnvOption(name="extends", multiple=True),
|
||||
# Generic
|
||||
ConfigEnvOption(name="platform", buildenvvar="PIOPLATFORM"),
|
||||
ConfigEnvOption(name="platform_packages", multiple=True),
|
||||
# Platform
|
||||
ConfigEnvOption(
|
||||
name="framework", multiple=True, buildenvvar="PIOFRAMEWORK"
|
||||
group="platform", name="platform", buildenvvar="PIOPLATFORM"
|
||||
),
|
||||
ConfigEnvOption(group="platform", name="platform_packages", multiple=True),
|
||||
ConfigEnvOption(
|
||||
group="platform",
|
||||
name="framework",
|
||||
multiple=True,
|
||||
buildenvvar="PIOFRAMEWORK",
|
||||
),
|
||||
# Board
|
||||
ConfigEnvOption(name="board", buildenvvar="BOARD"),
|
||||
ConfigEnvOption(group="board", name="board", buildenvvar="BOARD"),
|
||||
ConfigEnvOption(
|
||||
name="board_build.mcu", oldnames=["board_mcu"], buildenvvar="BOARD_MCU"
|
||||
group="board",
|
||||
name="board_build.mcu",
|
||||
oldnames=["board_mcu"],
|
||||
buildenvvar="BOARD_MCU",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="board",
|
||||
name="board_build.f_cpu",
|
||||
oldnames=["board_f_cpu"],
|
||||
buildenvvar="BOARD_F_CPU",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="board",
|
||||
name="board_build.f_flash",
|
||||
oldnames=["board_f_flash"],
|
||||
buildenvvar="BOARD_F_FLASH",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="board",
|
||||
name="board_build.flash_mode",
|
||||
oldnames=["board_flash_mode"],
|
||||
buildenvvar="BOARD_FLASH_MODE",
|
||||
),
|
||||
# Build
|
||||
ConfigEnvOption(name="build_type", type=click.Choice(["release", "debug"])),
|
||||
ConfigEnvOption(
|
||||
group="build",
|
||||
name="build_type",
|
||||
type=click.Choice(["release", "debug"]),
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="build",
|
||||
name="build_flags",
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_BUILD_FLAGS",
|
||||
buildenvvar="BUILD_FLAGS",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="build",
|
||||
name="src_build_flags",
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_SRC_BUILD_FLAGS",
|
||||
buildenvvar="SRC_BUILD_FLAGS",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="build",
|
||||
name="build_unflags",
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_BUILD_UNFLAGS",
|
||||
buildenvvar="BUILD_UNFLAGS",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="build",
|
||||
name="src_filter",
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_SRC_FILTER",
|
||||
buildenvvar="SRC_FILTER",
|
||||
),
|
||||
ConfigEnvOption(name="targets", multiple=True),
|
||||
ConfigEnvOption(group="build", name="targets", multiple=True),
|
||||
# Upload
|
||||
ConfigEnvOption(
|
||||
group="upload",
|
||||
name="upload_port",
|
||||
sysenvvar="PLATFORMIO_UPLOAD_PORT",
|
||||
buildenvvar="UPLOAD_PORT",
|
||||
),
|
||||
ConfigEnvOption(name="upload_protocol", buildenvvar="UPLOAD_PROTOCOL"),
|
||||
ConfigEnvOption(
|
||||
name="upload_speed", type=click.INT, buildenvvar="UPLOAD_SPEED"
|
||||
group="upload", name="upload_protocol", buildenvvar="UPLOAD_PROTOCOL"
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="upload",
|
||||
name="upload_speed",
|
||||
type=click.INT,
|
||||
buildenvvar="UPLOAD_SPEED",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="upload",
|
||||
name="upload_flags",
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_UPLOAD_FLAGS",
|
||||
buildenvvar="UPLOAD_FLAGS",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
name="upload_resetmethod", buildenvvar="UPLOAD_RESETMETHOD"
|
||||
group="upload",
|
||||
name="upload_resetmethod",
|
||||
buildenvvar="UPLOAD_RESETMETHOD",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="upload", name="upload_command", buildenvvar="UPLOADCMD"
|
||||
),
|
||||
ConfigEnvOption(name="upload_command", buildenvvar="UPLOADCMD"),
|
||||
# Monitor
|
||||
ConfigEnvOption(name="monitor_port"),
|
||||
ConfigEnvOption(name="monitor_speed", oldnames=["monitor_baud"]),
|
||||
ConfigEnvOption(name="monitor_rts", type=click.IntRange(0, 1)),
|
||||
ConfigEnvOption(name="monitor_dtr", type=click.IntRange(0, 1)),
|
||||
ConfigEnvOption(name="monitor_flags", multiple=True),
|
||||
ConfigEnvOption(group="monitor", name="monitor_port"),
|
||||
ConfigEnvOption(
|
||||
group="monitor", name="monitor_speed", oldnames=["monitor_baud"]
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="monitor", name="monitor_rts", type=click.IntRange(0, 1)
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="monitor", name="monitor_dtr", type=click.IntRange(0, 1)
|
||||
),
|
||||
ConfigEnvOption(group="monitor", name="monitor_flags", multiple=True),
|
||||
# Library
|
||||
ConfigEnvOption(
|
||||
group="lib",
|
||||
name="lib_deps",
|
||||
oldnames=["lib_use", "lib_force", "lib_install"],
|
||||
multiple=True,
|
||||
),
|
||||
ConfigEnvOption(name="lib_ignore", multiple=True),
|
||||
ConfigEnvOption(group="lib", name="lib_ignore", multiple=True),
|
||||
ConfigEnvOption(
|
||||
group="lib",
|
||||
name="lib_extra_dirs",
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_LIB_EXTRA_DIRS",
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="lib",
|
||||
name="lib_ldf_mode",
|
||||
type=click.Choice(["off", "chain", "deep", "chain+", "deep+"]),
|
||||
),
|
||||
ConfigEnvOption(
|
||||
name="lib_compat_mode", type=click.Choice(["off", "soft", "strict"])
|
||||
group="lib",
|
||||
name="lib_compat_mode",
|
||||
type=click.Choice(["off", "soft", "strict"]),
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="lib", name="lib_archive", type=click.BOOL, default=True
|
||||
),
|
||||
ConfigEnvOption(name="lib_archive", type=click.BOOL),
|
||||
# Test
|
||||
ConfigEnvOption(name="test_filter", multiple=True),
|
||||
ConfigEnvOption(name="test_ignore", multiple=True),
|
||||
ConfigEnvOption(name="test_port"),
|
||||
ConfigEnvOption(name="test_speed", type=click.INT),
|
||||
ConfigEnvOption(name="test_transport"),
|
||||
ConfigEnvOption(name="test_build_project_src", type=click.BOOL),
|
||||
# Debug
|
||||
ConfigEnvOption(name="debug_tool"),
|
||||
ConfigEnvOption(name="debug_init_break"),
|
||||
ConfigEnvOption(name="debug_init_cmds", multiple=True),
|
||||
ConfigEnvOption(name="debug_extra_cmds", multiple=True),
|
||||
ConfigEnvOption(group="test", name="test_filter", multiple=True),
|
||||
ConfigEnvOption(group="test", name="test_ignore", multiple=True),
|
||||
ConfigEnvOption(group="test", name="test_port"),
|
||||
ConfigEnvOption(group="test", name="test_speed", type=click.INT),
|
||||
ConfigEnvOption(group="test", name="test_transport"),
|
||||
ConfigEnvOption(
|
||||
name="debug_load_cmds", oldnames=["debug_load_cmd"], multiple=True
|
||||
group="test",
|
||||
name="test_build_project_src",
|
||||
type=click.BOOL,
|
||||
default=False,
|
||||
),
|
||||
# Debug
|
||||
ConfigEnvOption(group="debug", name="debug_tool"),
|
||||
ConfigEnvOption(group="debug", name="debug_init_break"),
|
||||
ConfigEnvOption(group="debug", name="debug_init_cmds", multiple=True),
|
||||
ConfigEnvOption(group="debug", name="debug_extra_cmds", multiple=True),
|
||||
ConfigEnvOption(
|
||||
group="debug",
|
||||
name="debug_load_cmds",
|
||||
oldnames=["debug_load_cmd"],
|
||||
multiple=True,
|
||||
),
|
||||
ConfigEnvOption(
|
||||
group="debug",
|
||||
name="debug_load_mode",
|
||||
type=click.Choice(["always", "modified", "manual"]),
|
||||
),
|
||||
ConfigEnvOption(name="debug_server", multiple=True),
|
||||
ConfigEnvOption(name="debug_port"),
|
||||
ConfigEnvOption(group="debug", name="debug_server", multiple=True),
|
||||
ConfigEnvOption(group="debug", name="debug_port"),
|
||||
ConfigEnvOption(
|
||||
group="debug",
|
||||
name="debug_svd_path",
|
||||
type=click.Path(exists=True, file_okay=True, dir_okay=False),
|
||||
),
|
||||
# Check
|
||||
ConfigEnvOption(name="check_tool", multiple=True),
|
||||
ConfigEnvOption(name="check_filter", multiple=True),
|
||||
ConfigEnvOption(name="check_flags", multiple=True),
|
||||
ConfigEnvOption(group="check", name="check_tool", multiple=True),
|
||||
ConfigEnvOption(group="check", name="check_filter", multiple=True),
|
||||
ConfigEnvOption(group="check", name="check_flags", multiple=True),
|
||||
ConfigEnvOption(
|
||||
group="check",
|
||||
name="check_severity",
|
||||
multiple=True,
|
||||
type=click.Choice(["low", "medium", "high"]),
|
||||
),
|
||||
# Other
|
||||
# Advanced
|
||||
ConfigEnvOption(
|
||||
group="advanced",
|
||||
name="extra_scripts",
|
||||
oldnames=["extra_script"],
|
||||
multiple=True,
|
||||
sysenvvar="PLATFORMIO_EXTRA_SCRIPTS",
|
||||
),
|
||||
ConfigEnvOption(group="advanced", name="extends", multiple=True),
|
||||
]
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def get_config_options_schema():
|
||||
return [option.as_dict() for option in ProjectOptions.values()]
|
||||
|
Reference in New Issue
Block a user