def newPlatform(cls, name, requirements=None): platform_dir = None if name.endswith("platform.json") and isfile(name): platform_dir = dirname(name) name = util.load_json(name)['name'] else: if not requirements and "@" in name: name, requirements = name.rsplit("@", 1) platform_dir = PlatformManager().get_package_dir(name, requirements) if not platform_dir: raise exception.UnknownPlatform(name if not requirements else "%s@%s" % (name, requirements)) platform_cls = None if isfile(join(platform_dir, "platform.py")): platform_cls = getattr( cls.load_module(name, join(platform_dir, "platform.py")), cls.get_clsname(name)) else: platform_cls = type( str(cls.get_clsname(name)), (PlatformBase, ), {}) _instance = platform_cls(join(platform_dir, "platform.json")) assert isinstance(_instance, PlatformBase) return _instance
def newPlatform(cls, name, requirements=None): pm = PlatformManager() platform_dir = None if isdir(name): platform_dir = name name = pm.load_manifest(platform_dir)["name"] elif name.endswith("platform.json") and isfile(name): platform_dir = dirname(name) name = fs.load_json(name)["name"] else: name, requirements, url = pm.parse_pkg_uri(name, requirements) platform_dir = pm.get_package_dir(name, requirements, url) if platform_dir: name = pm.load_manifest(platform_dir)["name"] if not platform_dir: raise exception.UnknownPlatform( name if not requirements else "%s@%s" % (name, requirements)) platform_cls = None if isfile(join(platform_dir, "platform.py")): platform_cls = getattr( cls.load_module(name, join(platform_dir, "platform.py")), cls.get_clsname(name), ) else: platform_cls = type(str(cls.get_clsname(name)), (PlatformBase, ), {}) _instance = platform_cls(join(platform_dir, "platform.json")) assert isinstance(_instance, PlatformBase) return _instance
def update( # pylint: disable=arguments-differ self, package, requirements=None, only_check=False, only_packages=False): if isdir(package): pkg_dir = package else: name, requirements, url = self.parse_pkg_uri(package, requirements) pkg_dir = self.get_package_dir(name, requirements, url) if not pkg_dir: raise exception.UnknownPlatform(package) p = PlatformFactory.newPlatform(pkg_dir) pkgs_before = list(p.get_installed_packages()) missed_pkgs = set() if not only_packages: BasePkgManager.update(self, pkg_dir, requirements, only_check) p = PlatformFactory.newPlatform(pkg_dir) missed_pkgs = set(pkgs_before) & set(p.packages) missed_pkgs -= set(p.get_installed_packages()) p.update_packages(only_check) self.cleanup_packages(list(p.packages)) if missed_pkgs: p.install_packages(with_packages=list(missed_pkgs), skip_default_package=True) return True
def load_module(type_, path): module = None try: module = load_source("platformio.platforms.%s" % type_, path) except ImportError: raise exception.UnknownPlatform(type_) return module
def load_module(name, path): module = None try: module = load_source("platformio.managers.platform.%s" % name, path) except ImportError: raise exception.UnknownPlatform(name) return module
def platform_show(platform, json_output): # pylint: disable=too-many-branches data = _get_platform_data(platform) if not data: raise exception.UnknownPlatform(platform) if json_output: return click.echo(dump_json_to_unicode(data)) click.echo("{name} ~ {title}".format(name=click.style(data["name"], fg="cyan"), title=data["title"])) click.echo("=" * (3 + len(data["name"] + data["title"]))) click.echo(data["description"]) click.echo() if "version" in data: click.echo("Version: %s" % data["version"]) if data["homepage"]: click.echo("Home: %s" % data["homepage"]) if data["repository"]: click.echo("Repository: %s" % data["repository"]) if data["url"]: click.echo("Vendor: %s" % data["url"]) if data["license"]: click.echo("License: %s" % data["license"]) if data["frameworks"]: click.echo("Frameworks: %s" % ", ".join(data["frameworks"])) if not data["packages"]: return None if not isinstance(data["packages"][0], dict): click.echo("Packages: %s" % ", ".join(data["packages"])) else: click.echo() click.secho("Packages", bold=True) click.echo("--------") for item in data["packages"]: click.echo() click.echo("Package %s" % click.style(item["name"], fg="yellow")) click.echo("-" * (8 + len(item["name"]))) if item["type"]: click.echo("Type: %s" % item["type"]) click.echo("Requirements: %s" % item["requirements"]) click.echo("Installed: %s" % ("Yes" if item.get("version") else "No (optional)")) if "version" in item: click.echo("Version: %s" % item["version"]) if "originalVersion" in item: click.echo("Original version: %s" % item["originalVersion"]) if "description" in item: click.echo("Description: %s" % item["description"]) if data["boards"]: click.echo() click.secho("Boards", bold=True) click.echo("------") print_boards(data["boards"]) return True
def newPlatform(cls, type_): platforms = cls.get_platforms() if type_ not in platforms: raise exception.UnknownPlatform(type_) _instance = getattr(cls.load_module(type_, platforms[type_]), cls.get_clsname(type_))() assert isinstance(_instance, BasePlatform) return _instance
def newPlatform(cls, name): platforms = cls.get_platforms() if name not in platforms: raise exception.UnknownPlatform(name) _instance = getattr(cls.load_module(name, platforms[name]), cls.get_clsname(name))() assert isinstance(_instance, BasePlatform) return _instance
def platform_show(platform, json_output): # pylint: disable=too-many-branches data = _get_platform_data(platform) if not data: raise exception.UnknownPlatform(platform) if json_output: return click.echo(json.dumps(data)) click.echo("{name} ~ {title}".format(name=click.style(data['name'], fg="cyan"), title=data['title'])) click.echo("=" * (3 + len(data['name'] + data['title']))) click.echo(data['description']) click.echo() if "version" in data: click.echo("Version: %s" % data['version']) if data['homepage']: click.echo("Home: %s" % data['homepage']) if data['repository']: click.echo("Repository: %s" % data['repository']) if data['url']: click.echo("Vendor: %s" % data['url']) if data['license']: click.echo("License: %s" % data['license']) if data['frameworks']: click.echo("Frameworks: %s" % ", ".join(data['frameworks'])) if not data['packages']: return if not isinstance(data['packages'][0], dict): click.echo("Packages: %s" % ", ".join(data['packages'])) else: click.echo() click.secho("Packages", bold=True) click.echo("--------") for item in data['packages']: click.echo() click.echo("Package %s" % click.style(item['name'], fg="yellow")) click.echo("-" * (8 + len(item['name']))) if item['type']: click.echo("Type: %s" % item['type']) click.echo("Requirements: %s" % item['requirements']) click.echo("Installed: %s" % ("Yes" if item.get("version") else "No (optional)")) if "version" in item: click.echo("Version: %s" % item['version']) if "originalVersion" in item: click.echo("Original version: %s" % item['originalVersion']) if "description" in item: click.echo("Description: %s" % item['description']) if data['boards']: click.echo() click.secho("Boards", bold=True) click.echo("------") print_boards(data['boards'])
def uninstall(self, package, requirements=None, after_update=False): if isdir(package): pkg_dir = package else: name, requirements, url = self.parse_pkg_uri(package, requirements) pkg_dir = self.get_package_dir(name, requirements, url) if not pkg_dir: raise exception.UnknownPlatform(package) p = PlatformFactory.newPlatform(pkg_dir) BasePkgManager.uninstall(self, pkg_dir, requirements) # don't cleanup packages or install them after update # we check packages for updates in def update() if after_update: return True return self.cleanup_packages(list(p.packages))
def uninstall(self, package, requirements=None, trigger_event=True): if isdir(package): pkg_dir = package else: name, requirements, url = self.parse_pkg_uri(package, requirements) pkg_dir = self.get_package_dir(name, requirements, url) if not pkg_dir: raise exception.UnknownPlatform(package) p = PlatformFactory.newPlatform(pkg_dir) BasePkgManager.uninstall(self, pkg_dir, requirements) # @Hook: when 'update' operation (trigger_event is False), # don't cleanup packages or install them if not trigger_event: return True self.cleanup_packages(p.packages.keys()) return True
def load_module(name, path): try: return load_python_module("platformio.managers.platform.%s" % name, path) except ImportError: raise exception.UnknownPlatform(name)