Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
 def load_module(type_, path):
     module = None
     try:
         module = load_source("platformio.platforms.%s" % type_, path)
     except ImportError:
         raise exception.UnknownPlatform(type_)
     return module
Пример #5
0
 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
Пример #6
0
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
Пример #7
0
    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
Пример #8
0
    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
Пример #9
0
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'])
Пример #10
0
    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))
Пример #11
0
    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
Пример #12
0
 def load_module(name, path):
     try:
         return load_python_module("platformio.managers.platform.%s" % name,
                                   path)
     except ImportError:
         raise exception.UnknownPlatform(name)