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():
data = [
"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)
if board_config:
data.extend([">", board_config.get("name")])

View File

@ -15,6 +15,7 @@
import os
import re
from platformio import fs
from platformio.compat import load_python_module
from platformio.package.meta import PackageItem
from platformio.platform.base import PlatformBase
@ -36,32 +37,47 @@ class PlatformFactory(object):
@classmethod
def new(cls, pkg_or_spec):
platform_dir = None
platform_name = None
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:
from platformio.package.manager.platform import ( # pylint: disable=import-outside-toplevel
PlatformPackageManager,
)
pkg = PlatformPackageManager().get_package(
"file://%s" % pkg_or_spec if os.path.isdir(pkg_or_spec) else pkg_or_spec
)
if not pkg:
pkg = PlatformPackageManager().get_package(pkg_or_spec)
if not pkg:
raise UnknownPlatform(pkg_or_spec)
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)
if not platform_name:
platform_name = fs.load_json(os.path.join(platform_dir, "platform.json"))[
"name"
]
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(
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:
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)
return _instance