def initialize(self): self._console_logger = logging.getLogger("octoprint.plugins.pluginmanager.console") self._repository_cache_path = os.path.join(self.get_plugin_data_folder(), "plugins.json") self._repository_cache_ttl = self._settings.get_int(["repository_ttl"]) * 60 self._pip_caller = LocalPipCaller(force_user=self._settings.get_boolean(["pip_force_user"])) self._pip_caller.on_log_call = self._log_call self._pip_caller.on_log_stdout = self._log_stdout self._pip_caller.on_log_stderr = self._log_stderr
def _install_plugin(cls, plugin, force_user=False, pip_args=None, on_log=None): if pip_args is None: pip_args = [] if on_log is None: on_log = logging.getLogger(__name__).info # prepare pip caller def log(prefix, *lines): for line in lines: on_log(u"{} {}".format(prefix, line.rstrip())) def log_call(*lines): log(u">", *lines) def log_stdout(*lines): log(u"<", *lines) def log_stderr(*lines): log(u"!", *lines) if cls._pip_caller is None: cls._pip_caller = LocalPipCaller(force_user=force_user) cls._pip_caller.on_log_call = log_call cls._pip_caller.on_log_stdout = log_stdout cls._pip_caller.on_log_stderr = log_stderr # install plugin pip = [ "install", sarge.shell_quote(plugin["archive"]), '--no-cache-dir' ] if plugin.get("follow_dependency_links"): pip.append("--process-dependency-links") if force_user: pip.append("--user") if pip_args: pip += pip_args cls._pip_caller.execute(*pip)
def _check_environment(self): import pkg_resources local_pip = LocalPipCaller() # check python and setuptools version versions = dict(python=get_python_version_string(), setuptools=pkg_resources.get_distribution("setuptools").version, pip=local_pip.version_string) supported = get_comparable_version(versions["python"]) >= get_comparable_version(MINIMUM_PYTHON) \ and get_comparable_version(versions["setuptools"]) >= get_comparable_version(MINIMUM_SETUPTOOLS) \ and get_comparable_version(versions["pip"]) >= get_comparable_version(MINIMUM_PIP) self._environment_supported = supported self._environment_versions = versions self._environment_ready.set()