Minor fixes for dev-platform factory

This commit is contained in:
Ivan Kravets
2020-08-16 18:48:05 +03:00
parent 04694b4126
commit 67e6d177b4
2 changed files with 35 additions and 12 deletions

View File

@ -149,9 +149,16 @@ def PrintConfiguration(env): # pylint: disable=too-many-statements
def _get_plaform_data(): def _get_plaform_data():
data = [ data = [
"PLATFORM: %s (%s)" "PLATFORM: %s (%s)"
% (platform.title, pkg_metadata.version or platform.version) % (
platform.title,
pkg_metadata.version if pkg_metadata else platform.version,
)
] ]
if int(ARGUMENTS.get("PIOVERBOSE", 0)) and pkg_metadata.spec.external: if (
int(ARGUMENTS.get("PIOVERBOSE", 0))
and pkg_metadata
and pkg_metadata.spec.external
):
data.append("(%s)" % pkg_metadata.spec.url) data.append("(%s)" % pkg_metadata.spec.url)
if board_config: if board_config:
data.extend([">", board_config.get("name")]) data.extend([">", board_config.get("name")])

View File

@ -15,6 +15,7 @@
import os import os
import re import re
from platformio import fs
from platformio.compat import load_python_module from platformio.compat import load_python_module
from platformio.package.meta import PackageItem from platformio.package.meta import PackageItem
from platformio.platform.base import PlatformBase from platformio.platform.base import PlatformBase
@ -36,32 +37,47 @@ class PlatformFactory(object):
@classmethod @classmethod
def new(cls, pkg_or_spec): def new(cls, pkg_or_spec):
platform_dir = None
platform_name = None
if isinstance(pkg_or_spec, PackageItem): if isinstance(pkg_or_spec, PackageItem):
pkg = pkg_or_spec platform_dir = pkg_or_spec.path
platform_name = pkg_or_spec.metadata.name
elif os.path.isdir(pkg_or_spec):
platform_dir = pkg_or_spec
else: else:
from platformio.package.manager.platform import ( # pylint: disable=import-outside-toplevel from platformio.package.manager.platform import ( # pylint: disable=import-outside-toplevel
PlatformPackageManager, PlatformPackageManager,
) )
pkg = PlatformPackageManager().get_package( pkg = PlatformPackageManager().get_package(pkg_or_spec)
"file://%s" % pkg_or_spec if os.path.isdir(pkg_or_spec) else pkg_or_spec if not pkg:
) raise UnknownPlatform(pkg_or_spec)
if not pkg: platform_dir = pkg.path
platform_name = pkg.metadata.name
if not platform_dir or not os.path.isfile(
os.path.join(platform_dir, "platform.json")
):
raise UnknownPlatform(pkg_or_spec) raise UnknownPlatform(pkg_or_spec)
if not platform_name:
platform_name = fs.load_json(os.path.join(platform_dir, "platform.json"))[
"name"
]
platform_cls = None platform_cls = None
if os.path.isfile(os.path.join(pkg.path, "platform.py")): if os.path.isfile(os.path.join(platform_dir, "platform.py")):
platform_cls = getattr( platform_cls = getattr(
cls.load_module( cls.load_module(
pkg.metadata.name, os.path.join(pkg.path, "platform.py") platform_name, os.path.join(platform_dir, "platform.py")
), ),
cls.get_clsname(pkg.metadata.name), cls.get_clsname(platform_name),
) )
else: else:
platform_cls = type( platform_cls = type(
str(cls.get_clsname(pkg.metadata.name)), (PlatformBase,), {} str(cls.get_clsname(platform_name)), (PlatformBase,), {}
) )
_instance = platform_cls(os.path.join(pkg.path, "platform.json")) _instance = platform_cls(os.path.join(platform_dir, "platform.json"))
assert isinstance(_instance, PlatformBase) assert isinstance(_instance, PlatformBase)
return _instance return _instance