From 8eb61a9926182232703c5ef929e002a20c248cd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 29 Jun 2015 18:08:34 +0200 Subject: [PATCH] Switch to pkg_resources for compatibility check Plugin Manager now internally uses pkg_resources.parse_version and pkg_resources.parse_requirements to check for version compatibility with plugins from the repository. That will allow to directly use the OctoPrint version string once it's PEP440 compatible. --- .../plugins/pluginmanager/__init__.py | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/octoprint/plugins/pluginmanager/__init__.py b/src/octoprint/plugins/pluginmanager/__init__.py index ab228763..fe573713 100644 --- a/src/octoprint/plugins/pluginmanager/__init__.py +++ b/src/octoprint/plugins/pluginmanager/__init__.py @@ -520,25 +520,19 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, self._repository_plugins = map(map_repository_entry, repo_data) return True - def _is_octoprint_compatible(self, octoprint_version, compatibility_entries): + def _is_octoprint_compatible(self, octoprint_version_string, compatibility_entries): """ Tests if the current ``octoprint_version`` is compatible to any of the provided ``compatibility_entries``. """ - import semantic_version + octoprint_version = pkg_resources.parse_version(octoprint_version_string) for octo_compat in compatibility_entries: - for version_string in (octo_compat, ">={}".format(octo_compat)): - try: - s = semantic_version.Spec(version_string) - if semantic_version.Version(octoprint_version) in s: - break - except ValueError: - # that just means that octo_compat directly wasn't a valid version spec string, so we try - # prefixing that with ">=" next and check again - pass - else: - continue - break + if not any(octo_compat.startswith(c) for c in ("<", "<=", "!=", "==", ">=", ">", "~=", "===")): + octo_compat = ">={}".format(octo_compat) + + s = next(pkg_resources.parse_requirements("OctoPrint" + octo_compat)) + if octoprint_version in s: + break else: return False