Allow to initialize project in off-line mode

This commit is contained in:
Ivan Kravets
2016-09-14 14:46:10 +03:00
parent d2a45245e2
commit 7116deaf54
3 changed files with 23 additions and 28 deletions

View File

@ -21,8 +21,7 @@ from tempfile import mkdtemp
import click import click
from platformio import app, util from platformio import app, util
from platformio.commands.init import cli as cmd_init from platformio.commands.init import cli as cmd_init, validate_boards
from platformio.commands.init import validate_boards
from platformio.commands.run import cli as cmd_run from platformio.commands.run import cli as cmd_run
from platformio.exception import CIBuildEnvsEmpty from platformio.exception import CIBuildEnvsEmpty

View File

@ -29,19 +29,14 @@ from platformio.managers.platform import PlatformManager
def validate_boards(ctx, param, value): # pylint: disable=W0613 def validate_boards(ctx, param, value): # pylint: disable=W0613
pm = PlatformManager() pm = PlatformManager()
# check installed boards for id_ in value:
known_boards = set([b['id'] for b in pm.get_installed_boards()]) try:
# if boards are not listed as installed, check registered boards pm.board_config(id_)
if set(value) - known_boards: except exception.UnknownBoard:
known_boards = set([b['id'] for b in pm.get_registered_boards()]) raise click.BadParameter(
unknown_boards = set(value) - known_boards "`%s`. Please search for board ID using `platformio boards` "
try: "command" % id_)
assert not unknown_boards return value
return value
except AssertionError:
raise click.BadParameter("%s. Please search for the board ID using "
"`platformio boards` command" %
", ".join(unknown_boards))
@click.command( @click.command(
@ -291,7 +286,6 @@ def init_cvs_ignore(project_dir):
def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix,
force_download): force_download):
installed_boards = PlatformManager().get_installed_boards()
content = [] content = []
used_boards = [] used_boards = []
used_platforms = [] used_platforms = []
@ -303,24 +297,17 @@ def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix,
continue continue
used_boards.append(config.get(section, "board")) used_boards.append(config.get(section, "board"))
pm = PlatformManager()
for id_ in board_ids: for id_ in board_ids:
manifest = None board_config = pm.board_config(id_)
for boards in (installed_boards, used_platforms.append(board_config['platform'])
PlatformManager.get_registered_boards()):
for b in boards:
if b['id'] == id_:
manifest = b
break
assert manifest is not None
used_platforms.append(manifest['platform'])
if id_ in used_boards: if id_ in used_boards:
continue continue
used_boards.append(id_) used_boards.append(id_)
envopts = {"platform": manifest['platform'], "board": id_} envopts = {"platform": board_config['platform'], "board": id_}
# find default framework for board # find default framework for board
frameworks = manifest.get("frameworks") frameworks = board_config.get("frameworks")
if frameworks: if frameworks:
envopts['framework'] = frameworks[0] envopts['framework'] = frameworks[0]

View File

@ -118,6 +118,15 @@ class PlatformManager(BasePkgManager):
def get_registered_boards(): def get_registered_boards():
return util.get_api_result("/boards") return util.get_api_result("/boards")
def board_config(self, id_):
for manifest in self.get_installed_boards():
if manifest['id'] == id_:
return manifest
for manifest in self.get_registered_boards():
if manifest['id'] == id_:
return manifest
raise exception.UnknownBoard(id_)
class PlatformFactory(object): class PlatformFactory(object):