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
from platformio import app, util
from platformio.commands.init import cli as cmd_init
from platformio.commands.init import validate_boards
from platformio.commands.init import cli as cmd_init, validate_boards
from platformio.commands.run import cli as cmd_run
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
pm = PlatformManager()
# check installed boards
known_boards = set([b['id'] for b in pm.get_installed_boards()])
# if boards are not listed as installed, check registered boards
if set(value) - known_boards:
known_boards = set([b['id'] for b in pm.get_registered_boards()])
unknown_boards = set(value) - known_boards
for id_ in value:
try:
assert not unknown_boards
pm.board_config(id_)
except exception.UnknownBoard:
raise click.BadParameter(
"`%s`. Please search for board ID using `platformio boards` "
"command" % id_)
return value
except AssertionError:
raise click.BadParameter("%s. Please search for the board ID using "
"`platformio boards` command" %
", ".join(unknown_boards))
@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,
force_download):
installed_boards = PlatformManager().get_installed_boards()
content = []
used_boards = []
used_platforms = []
@ -303,24 +297,17 @@ def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix,
continue
used_boards.append(config.get(section, "board"))
pm = PlatformManager()
for id_ in board_ids:
manifest = None
for boards in (installed_boards,
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'])
board_config = pm.board_config(id_)
used_platforms.append(board_config['platform'])
if id_ in used_boards:
continue
used_boards.append(id_)
envopts = {"platform": manifest['platform'], "board": id_}
envopts = {"platform": board_config['platform'], "board": id_}
# find default framework for board
frameworks = manifest.get("frameworks")
frameworks = board_config.get("frameworks")
if frameworks:
envopts['framework'] = frameworks[0]

View File

@ -118,6 +118,15 @@ class PlatformManager(BasePkgManager):
def get_registered_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):