summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2020-07-05 14:17:47 -0400
committerDoug Hellmann <doug@doughellmann.com>2020-07-05 14:17:47 -0400
commitc804ba7da61597ae3b5436ae607be24e91204639 (patch)
treea507b081c362afbe15d27b94eeee7a91c202cd4c
parent4fe75b7e1bd3144282f107ce7cb61880257c7c1e (diff)
downloadoslo-utils-c804ba7da61597ae3b5436ae607be24e91204639.tar.gz
versionutils: switch from pkg_resources to packaging4.3.0
Importing pkg_resources has a side-effect of scanning the metadata of every installed python package. That is excessive overhead for a function that needs to compare two version strings. This change replaces pkg_resources with the packaging library, which is also used as the implementation for version parsing within setuptools and pkg_resources. Change-Id: Ic9bda0783d3664e1f518d513d81b3271028335fd Signed-off-by: Doug Hellmann <doug@doughellmann.com>
-rw-r--r--lower-constraints.txt1
-rw-r--r--oslo_utils/versionutils.py13
-rw-r--r--requirements.txt1
3 files changed, 7 insertions, 8 deletions
diff --git a/lower-constraints.txt b/lower-constraints.txt
index 3555586..b1f66ad 100644
--- a/lower-constraints.txt
+++ b/lower-constraints.txt
@@ -19,6 +19,7 @@ os-client-config==1.28.0
oslo.config==5.2.0
oslo.i18n==3.15.3
oslotest==3.2.0
+packaging==20.4
pbr==2.0.0
pyparsing==2.1.0
python-mimeparse==1.6.0
diff --git a/oslo_utils/versionutils.py b/oslo_utils/versionutils.py
index 311965d..db8ed0c 100644
--- a/oslo_utils/versionutils.py
+++ b/oslo_utils/versionutils.py
@@ -19,7 +19,7 @@ Helpers for comparing version strings.
.. versionadded:: 1.6
"""
-import pkg_resources
+import packaging.version
import six
from oslo_utils._i18n import _
@@ -39,17 +39,14 @@ def is_compatible(requested_version, current_version, same_major=True):
True.
:returns: True if compatible, False if not
"""
- requested_parts = pkg_resources.parse_version(requested_version)
- current_parts = pkg_resources.parse_version(current_version)
+ requested = packaging.version.Version(requested_version)
+ current = packaging.version.Version(current_version)
if same_major:
- # NOTE(jlvillal) pkg_resources issues a warning if we try to access
- # portions of the version, for example requested_parts[0] will issue a
- # warning message. So get the major_version from the string instead.
- if requested_version.split('.')[0] != current_version.split('.')[0]:
+ if requested.major != current.major:
return False
- return current_parts >= requested_parts
+ return current >= requested
def convert_version_to_int(version):
diff --git a/requirements.txt b/requirements.txt
index 30aa6a8..22d2b78 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -16,3 +16,4 @@ netaddr>=0.7.18 # BSD
netifaces>=0.10.4 # MIT
debtcollector>=1.2.0 # Apache-2.0
pyparsing>=2.1.0 # MIT
+packaging>=20.4 # BSD