Introduce platform names

This commit is contained in:
Ivan Kravets
2015-03-16 14:15:57 +02:00
parent 0bfc6dfe3e
commit 19822ff08f
14 changed files with 63 additions and 33 deletions

View File

@ -18,18 +18,18 @@ def cli(query, json_output):
platforms.sort()
for platform in platforms:
p = PlatformFactory.newPlatform(platform)
name = p.get_name()
type_ = p.get_type()
description = p.get_description()
if query == "all":
query = ""
search_data = "%s %s %s" % (name, description, p.get_packages())
search_data = "%s %s %s" % (type_, description, p.get_packages())
if query and query.lower() not in search_data.lower():
continue
data.append({
"name": name,
"type": type_,
"description": description,
"packages": p.get_packages()
})
@ -38,9 +38,9 @@ def cli(query, json_output):
click.echo(json.dumps(data))
else:
for item in data:
click.secho(item['name'], fg="cyan", nl=False)
click.secho(item['type'], fg="cyan", nl=False)
click.echo(" (available packages: %s)" % ", ".join(
p.get_packages().keys()))
click.secho("-" * len(item['name']), fg="cyan")
click.secho("-" * len(item['type']), fg="cyan")
click.echo(item['description'])
click.echo()

View File

@ -30,7 +30,7 @@ def cli(ctx, platform):
p = PlatformFactory.newPlatform(platform)
click.echo("{name:<20} - {description} [ {url} ]".format(
name=click.style(p.get_name(), fg="cyan"),
name=click.style(p.get_type(), fg="cyan"),
description=p.get_description(), url=p.get_vendor_url()))
installed_packages = PackageManager.get_installed()

View File

@ -37,6 +37,9 @@ class AtmelavrPlatform(BasePlatform):
}
}
def get_name(self):
return "Atmel AVR"
def on_run_err(self, line): # pylint: disable=R0201
# fix STDERR "flash written" for avrdude
if "avrdude" in line:

View File

@ -34,3 +34,6 @@ class AtmelsamPlatform(BasePlatform):
"default": True
}
}
def get_name(self):
return "Atmel SAM"

View File

@ -100,17 +100,17 @@ def get_packages():
class PlatformFactory(object):
@staticmethod
def get_clsname(name):
return "%sPlatform" % name.title()
def get_clsname(type_):
return "%sPlatform" % type_.title()
@staticmethod
def load_module(name, path):
def load_module(type_, path):
module = None
try:
module = load_source(
"platformio.platforms.%s" % name, path)
"platformio.platforms.%s" % type_, path)
except ImportError:
raise exception.UnknownPlatform(name)
raise exception.UnknownPlatform(type_)
return module
@classmethod
@ -123,15 +123,15 @@ class PlatformFactory(object):
for p in listdir(pdir):
if p in ("__init__.py", "base.py") or not p.endswith(".py"):
continue
name = p[:-3]
type_ = p[:-3]
path = join(pdir, p)
try:
isplatform = hasattr(
cls.load_module(name, path),
cls.get_clsname(name)
cls.load_module(type_, path),
cls.get_clsname(type_)
)
if isplatform:
platforms[name] = path
platforms[type_] = path
except exception.UnknownPlatform:
pass
@ -139,20 +139,20 @@ class PlatformFactory(object):
return platforms
installed_platforms = {}
for name in get_state_item("installed_platforms", []):
if name in platforms:
installed_platforms[name] = platforms[name]
for type_ in get_state_item("installed_platforms", []):
if type_ in platforms:
installed_platforms[type_] = platforms[type_]
return installed_platforms
@classmethod
def newPlatform(cls, name):
def newPlatform(cls, type_):
platforms = cls.get_platforms()
if name not in platforms:
raise exception.UnknownPlatform(name)
if type_ not in platforms:
raise exception.UnknownPlatform(type_)
_instance = getattr(
cls.load_module(name, platforms[name]),
cls.get_clsname(name)
cls.load_module(type_, platforms[type_]),
cls.get_clsname(type_)
)()
assert isinstance(_instance, BasePlatform)
return _instance
@ -166,12 +166,15 @@ class BasePlatform(object):
def __init__(self):
self._found_error = False
def get_name(self):
def get_type(self):
return self.__class__.__name__[:-8].lower()
def get_name(self):
return self.get_type().title()
def get_build_script(self):
builtin = join(util.get_source_dir(), "builder", "scripts", "%s.py" %
self.get_name())
self.get_type())
if isfile(builtin):
return builtin
raise NotImplementedError()
@ -235,14 +238,14 @@ class BasePlatform(object):
# register installed platform
data = get_state_item("installed_platforms", [])
if self.get_name() not in data:
data.append(self.get_name())
if self.get_type() not in data:
data.append(self.get_type())
set_state_item("installed_platforms", data)
return len(requirements)
def uninstall(self):
platform = self.get_name()
platform = self.get_type()
installed_platforms = PlatformFactory.get_platforms(
installed=True).keys()
@ -286,8 +289,8 @@ class BasePlatform(object):
installed=True).keys()
installed_packages = PackageManager.get_installed()
if self.get_name() not in installed_platforms:
raise exception.PlatformNotInstalledYet(self.get_name())
if self.get_type() not in installed_platforms:
raise exception.PlatformNotInstalledYet(self.get_type())
if "clean" in targets:
targets.remove("clean")

View File

@ -26,3 +26,6 @@ class FreescalekinetisPlatform(BasePlatform):
"default": True
}
}
def get_name(self):
return "Freescale Kinetis"

View File

@ -28,3 +28,6 @@ class Nordicnrf51Platform(BasePlatform):
"default": True
}
}
def get_name(self):
return "Nordic nRF51"

View File

@ -28,3 +28,6 @@ class NxplpcPlatform(BasePlatform):
"default": True
}
}
def get_name(self):
return "NXP LPC"

View File

@ -49,3 +49,6 @@ class Ststm32Platform(BasePlatform):
"default": True
}
}
def get_name(self):
return "ST STM32"

View File

@ -41,6 +41,9 @@ class TeensyPlatform(BasePlatform):
}
}
def get_name(self):
return "Teensy"
def run(self, variables, targets):
for v in variables:
if "BOARD=" not in v:

View File

@ -31,3 +31,6 @@ class Timsp430Platform(BasePlatform):
"default": True
}
}
def get_name(self):
return "TI MSP430"

View File

@ -39,3 +39,6 @@ class TitivaPlatform(BasePlatform):
"default": True
}
}
def get_name(self):
return "TI TIVA"

View File

@ -34,9 +34,9 @@ def test_board_options(platformio_setup, clirunner, validate_cliresult):
search_result = json.loads(result.output)
assert isinstance(search_result, list)
assert len(search_result)
platforms = [item['name'] for item in search_result]
platforms = [item['type'] for item in search_result]
for name, opts in util.get_boards().iteritems():
for _, opts in util.get_boards().iteritems():
assert required_opts.issubset(set(opts))
assert opts['platform'] in platforms

View File

@ -12,7 +12,7 @@ def test_search_json_output(clirunner, validate_cliresult):
search_result = json.loads(result.output)
assert isinstance(search_result, list)
assert len(search_result)
platforms = [item['name'] for item in search_result]
platforms = [item['type'] for item in search_result]
assert "atmelsam" in platforms