From c24ba824d6a04b2ab29e8daa63b88a4ea0d2d703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 22 Jul 2015 16:57:32 +0200 Subject: [PATCH] Revert "Remove dependency_links support again" This reverts commit be423e49fda833f6049a8076de32d5881d419287. Conflicts: src/octoprint/plugins/pluginmanager/__init__.py src/octoprint/plugins/softwareupdate/updaters/pip.py --- src/octoprint/plugins/pluginmanager/__init__.py | 15 ++++++++++++++- .../pluginmanager/static/js/pluginmanager.js | 17 +++++++++++++---- .../templates/pluginmanager_settings.jinja2 | 15 +++++++++++++++ .../plugins/softwareupdate/updaters/pip.py | 5 +++++ 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/octoprint/plugins/pluginmanager/__init__.py b/src/octoprint/plugins/pluginmanager/__init__.py index 04c2f1fe..715a9472 100644 --- a/src/octoprint/plugins/pluginmanager/__init__.py +++ b/src/octoprint/plugins/pluginmanager/__init__.py @@ -39,6 +39,7 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, self._pending_uninstall = set() self._pip_caller = None + self._pip_version_dependency_links = pkg_resources.parse_version("1.5") self._repository_available = False self._repository_plugins = [] @@ -83,6 +84,7 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, repository="http://plugins.octoprint.org/plugins.json", repository_ttl=24*60, pip=None, + dependency_links=False, hidden=[] ) @@ -187,6 +189,7 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, plugin_name = data["plugin"] if "plugin" in data else None return self.command_install(url=url, force="force" in data and data["force"] in valid_boolean_trues, + dependency_links="dependency_links" in data and data["dependency_links"] in valid_boolean_trues, reinstall=plugin_name) elif command == "uninstall": @@ -205,7 +208,7 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, plugin = self._plugin_manager.plugins[plugin_name] return self.command_toggle(plugin, command) - def command_install(self, url=None, path=None, force=False, reinstall=None): + def command_install(self, url=None, path=None, force=False, reinstall=None, dependency_links=False): if url is not None: pip_args = ["install", sarge.shell_quote(url)] elif path is not None: @@ -213,6 +216,9 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, else: raise ValueError("Either url or path must be provided") + if dependency_links or self._settings.get_boolean(["dependency_links"]): + pip_args.append("--process-dependency-links") + all_plugins_before = self._plugin_manager.find_plugins() success_string = "Successfully installed" @@ -421,6 +427,10 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, def _call_pip(self, args): if self._pip_caller is None or not self._pip_caller.available: raise RuntimeError(u"No pip available, can't operate".format(**locals())) + + if "--process-dependency-links" in args and self._pip_caller < self._pip_version_dependency_links: + args.remove("--process-dependency-links") + return self._pip_caller.execute(*args) def _log_call(self, *lines): @@ -519,6 +529,9 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, def map_repository_entry(entry): result = dict(entry) + if not "follow_dependency_links" in result: + result["follow_dependency_links"] = False + result["is_compatible"] = dict( octoprint=True, os=True diff --git a/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js b/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js index eba85fad..7c5265ff 100644 --- a/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js +++ b/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js @@ -70,6 +70,8 @@ $(function() { self.loglines = ko.observableArray([]); self.installedPlugins = ko.observableArray([]); + self.followDependencyLinks = ko.observable(false); + self.working = ko.observable(false); self.workingTitle = ko.observable(); self.workingDialog = undefined; @@ -125,6 +127,9 @@ $(function() { self.uploadButton.unbind("click"); self.uploadButton.bind("click", function() { self._markWorking(gettext("Installing plugin..."), gettext("Installing plugin from uploaded archive...")); + data.formData = { + dependency_links: self.followDependencyLinks() + }; data.submit(); return false; }); @@ -240,13 +245,13 @@ $(function() { } if (self.installed(data)) { - self.installPlugin(data.archive, data.title, data.id); + self.installPlugin(data.archive, data.title, data.id, data.follow_dependency_links || self.followDependencyLinks()); } else { - self.installPlugin(data.archive, data.title, undefined); + self.installPlugin(data.archive, data.title, undefined, data.follow_dependency_links || self.followDependencyLinks()); } }; - self.installPlugin = function(url, name, reinstall) { + self.installPlugin = function(url, name, reinstall, followDependencyLinks) { if (!self.loginState.isAdmin()) { return; } @@ -260,6 +265,10 @@ $(function() { } if (!url) return; + if (followDependencyLinks === undefined) { + followDependencyLinks = self.followDependencyLinks(); + } + var workTitle, workText; if (!reinstall) { workTitle = gettext("Installing plugin..."); @@ -275,7 +284,7 @@ $(function() { self._markWorking(workTitle, workText); var command = "install"; - var payload = {url: url}; + var payload = {url: url, dependency_links: followDependencyLinks}; if (reinstall) { payload["plugin"] = reinstall; payload["force"] = true; diff --git a/src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2 b/src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2 index 559817c0..b855dc81 100644 --- a/src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2 +++ b/src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2 @@ -147,6 +147,21 @@ {{ _('This does not look like a valid plugin archive. Valid plugin archives should be either zip files or tarballs and have the extension ".zip", ".tar.gz", ".tgz" or ".tar"') }} + +
+
{{ _('Advanced options') }}
+
+
+
+
+ +
+
+
+
+