Esempio n. 1
0
    def install(self,
                name,
                requirements=None,
                with_packages=None,
                without_packages=None,
                skip_default_package=False,
                trigger_event=True,
                silent=False,
                force=False,
                **_):  # pylint: disable=too-many-arguments, arguments-differ
        platform_dir = BasePkgManager.install(
            self, name, requirements, silent=silent, force=force)
        p = PlatformFactory.newPlatform(platform_dir)

        # @Hook: when 'update' operation (trigger_event is False),
        # don't cleanup packages or install them
        if not trigger_event:
            return True
        p.install_packages(
            with_packages,
            without_packages,
            skip_default_package,
            silent=silent,
            force=force)
        self.cleanup_packages(p.packages.keys())
        return True
Esempio n. 2
0
    def install(self,
                name,
                requirements=None,
                with_packages=None,
                without_packages=None,
                skip_default_package=False,
                after_update=False,
                silent=False,
                force=False,
                **_):  # pylint: disable=too-many-arguments, arguments-differ
        platform_dir = BasePkgManager.install(self,
                                              name,
                                              requirements,
                                              silent=silent,
                                              force=force)
        p = PlatformFactory.newPlatform(platform_dir)

        # don't cleanup packages or install them after update
        # we check packages for updates in def update()
        if after_update:
            return True

        p.install_packages(with_packages,
                           without_packages,
                           skip_default_package,
                           silent=silent,
                           force=force)
        return self.cleanup_packages(list(p.packages))
Esempio n. 3
0
    def install(  # pylint: disable=arguments-differ
            self,
            name,
            requirements=None,
            silent=False,
            trigger_event=True,
            interactive=False):
        pkg_dir = None
        try:
            _name, _requirements, _url = self.parse_pkg_input(
                name, requirements)
            if not _url:
                name = "id=%d" % self.get_pkg_id_by_name(
                    _name,
                    _requirements,
                    silent=silent,
                    interactive=interactive)
                requirements = _requirements
            pkg_dir = BasePkgManager.install(self, name, requirements, silent,
                                             trigger_event)
        except exception.InternetIsOffline as e:
            if not silent:
                click.secho(str(e), fg="yellow")
            return

        if not pkg_dir:
            return

        manifest = self.load_manifest(pkg_dir)
        if "dependencies" not in manifest:
            return pkg_dir

        if not silent:
            click.secho("Installing dependencies", fg="yellow")

        for filters in self.normalize_dependencies(manifest['dependencies']):
            assert "name" in filters
            if any([s in filters.get("version", "") for s in ("\\", "/")]):
                self.install("{name}={version}".format(**filters))
            else:
                try:
                    lib_info = self.search_for_library(filters, silent,
                                                       interactive)
                except exception.LibNotFound as e:
                    if not silent:
                        click.secho("Warning! %s" % e, fg="yellow")
                    continue

                if filters.get("version"):
                    self.install(
                        lib_info['id'],
                        requirements=filters.get("version"),
                        silent=silent,
                        trigger_event=trigger_event)
                else:
                    self.install(
                        lib_info['id'],
                        silent=silent,
                        trigger_event=trigger_event)
        return pkg_dir
Esempio n. 4
0
 def install(self,  # pylint: disable=too-many-arguments
             name,
             requirements=None,
             with_packages=None,
             without_packages=None,
             skip_default_package=False,
             **_):
     platform_dir = BasePkgManager.install(self, name, requirements)
     p = PlatformFactory.newPlatform(self.get_manifest_path(platform_dir))
     p.install_packages(with_packages, without_packages,
                        skip_default_package)
     self.cleanup_packages(p.packages.keys())
     return True
Esempio n. 5
0
    def install(
            self,  # pylint: disable=too-many-arguments
            name,
            requirements=None,
            silent=False,
            trigger_event=True,
            interactive=False):
        _name, _requirements, _url = self.parse_pkg_name(name, requirements)
        if not _url:
            _name = "id=%d" % self._get_pkg_id_by_name(
                _name, _requirements, silent=silent, interactive=interactive)
        already_installed = self.get_package(_name, _requirements, _url)
        pkg_dir = BasePkgManager.install(self, _name if not _url else name,
                                         _requirements, silent, trigger_event)

        if already_installed:
            return

        manifest = self.load_manifest(pkg_dir)
        if "dependencies" not in manifest:
            return pkg_dir

        if not silent:
            click.secho("Installing dependencies", fg="yellow")

        for filters in self.normalize_dependencies(manifest['dependencies']):
            assert "name" in filters
            if any([s in filters.get("version", "") for s in ("\\", "/")]):
                self.install("{name}={version}".format(**filters))
            else:
                lib_info = self.search_for_library(filters, silent,
                                                   interactive)
                if filters.get("version"):
                    self.install(lib_info['id'],
                                 requirements=filters.get("version"),
                                 silent=silent,
                                 trigger_event=trigger_event)
                else:
                    self.install(lib_info['id'],
                                 silent=silent,
                                 trigger_event=trigger_event)
        return pkg_dir
Esempio n. 6
0
    def install(  # pylint: disable=arguments-differ
            self,
            name,
            requirements=None,
            silent=False,
            trigger_event=True,
            interactive=False,
            force=False):
        _name, _requirements, _url = self.parse_pkg_uri(name, requirements)
        if not _url:
            name = "id=%d" % self.search_lib_id(
                {
                    "name": _name,
                    "requirements": _requirements
                },
                silent=silent,
                interactive=interactive)
            requirements = _requirements
        pkg_dir = BasePkgManager.install(self,
                                         name,
                                         requirements,
                                         silent=silent,
                                         trigger_event=trigger_event,
                                         force=force)

        if not pkg_dir:
            return None

        manifest = self.load_manifest(pkg_dir)
        if "dependencies" not in manifest:
            return pkg_dir

        if not silent:
            click.secho("Installing dependencies", fg="yellow")

        for filters in self.normalize_dependencies(manifest['dependencies']):
            assert "name" in filters
            if any([s in filters.get("version", "") for s in ("\\", "/")]):
                self.install("{name}={version}".format(**filters),
                             silent=silent,
                             trigger_event=trigger_event,
                             interactive=interactive,
                             force=force)
            else:
                try:
                    lib_id = self.search_lib_id(filters, silent, interactive)
                except exception.LibNotFound as e:
                    if not silent or is_builtin_lib(filters['name']):
                        click.secho("Warning! %s" % e, fg="yellow")
                    continue

                if filters.get("version"):
                    self.install(lib_id,
                                 filters.get("version"),
                                 silent=silent,
                                 trigger_event=trigger_event,
                                 interactive=interactive,
                                 force=force)
                else:
                    self.install(lib_id,
                                 silent=silent,
                                 trigger_event=trigger_event,
                                 interactive=interactive,
                                 force=force)
        return pkg_dir
Esempio n. 7
0
    def install(  # pylint: disable=arguments-differ
        self,
        name,
        requirements=None,
        silent=False,
        after_update=False,
        interactive=False,
        force=False,
    ):
        _name, _requirements, _url = self.parse_pkg_uri(name, requirements)
        if not _url:
            name = "id=%d" % self.search_lib_id(
                {
                    "name": _name,
                    "requirements": _requirements
                },
                silent=silent,
                interactive=interactive,
            )
            requirements = _requirements
        pkg_dir = BasePkgManager.install(
            self,
            name,
            requirements,
            silent=silent,
            after_update=after_update,
            force=force,
        )

        if not pkg_dir:
            return None

        manifest = None
        try:
            manifest = ManifestParserFactory.new_from_dir(pkg_dir).as_dict()
        except ManifestException:
            pass
        if not manifest or not manifest.get("dependencies"):
            return pkg_dir

        if not silent:
            click.secho("Installing dependencies", fg="yellow")

        builtin_lib_storages = None
        for filters in manifest["dependencies"]:
            assert "name" in filters

            # avoid circle dependencies
            if not self.INSTALL_HISTORY:
                self.INSTALL_HISTORY = []
            history_key = str(filters)
            if history_key in self.INSTALL_HISTORY:
                continue
            self.INSTALL_HISTORY.append(history_key)

            if any(s in filters.get("version", "") for s in ("\\", "/")):
                self.install(
                    "{name}={version}".format(**filters),
                    silent=silent,
                    after_update=after_update,
                    interactive=interactive,
                    force=force,
                )
            else:
                try:
                    lib_id = self.search_lib_id(filters, silent, interactive)
                except exception.LibNotFound as e:
                    if builtin_lib_storages is None:
                        builtin_lib_storages = get_builtin_libs()
                    if not silent or is_builtin_lib(builtin_lib_storages,
                                                    filters["name"]):
                        click.secho("Warning! %s" % e, fg="yellow")
                    continue

                if filters.get("version"):
                    self.install(
                        lib_id,
                        filters.get("version"),
                        silent=silent,
                        after_update=after_update,
                        interactive=interactive,
                        force=force,
                    )
                else:
                    self.install(
                        lib_id,
                        silent=silent,
                        after_update=after_update,
                        interactive=interactive,
                        force=force,
                    )
        return pkg_dir