summaryrefslogtreecommitdiff
path: root/keystoneclient
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2020-07-05 13:55:10 -0400
committerDouglas Mendizábal <dmendiza@redhat.com>2022-04-22 15:48:44 +0000
commit6940b4ff0a2823228fab834bfaca6b851c60d8d3 (patch)
tree3dbc0837169d6f75e97dcb1a237c1a59a58c4849 /keystoneclient
parentea1308ad0e66f115eef4aa1cf2896256f69eab24 (diff)
downloadpython-keystoneclient-6940b4ff0a2823228fab834bfaca6b851c60d8d3.tar.gz
use importlib.metadata to get keyring version
Importing pkg_resources has a side-effect of scanning the metadata of all of the installed python modules to build an in-memory cache. That cache isn't used anywhere in keystoneclient, and it can be expensive to build. The importlib.metadata module in the 3.8 standard library (and the importlib_metadata library for earlier versions) provides the same version lookup service using a more efficient scanning implementation. Switching from pkg_resources to importlib.metadata will help application startup time, which is especially important for command line programs such as python-openstackclient. Change-Id: Ia89044ff1876eeb2793cd08ed9095ce2ffe89e09 Depends-On: Ic6db7af34c87a636bfe55bacae03c42154f4b9c7 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
Diffstat (limited to 'keystoneclient')
-rw-r--r--keystoneclient/httpclient.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/keystoneclient/httpclient.py b/keystoneclient/httpclient.py
index 8d157ce..83684e2 100644
--- a/keystoneclient/httpclient.py
+++ b/keystoneclient/httpclient.py
@@ -20,11 +20,18 @@
import logging
import warnings
+try:
+ # For Python 3.8 and later
+ import importlib.metadata as importlib_metadata
+except ImportError:
+ # For everyone else
+ import importlib_metadata
+
from debtcollector import removals
from debtcollector import renames
from keystoneauth1 import adapter
from oslo_serialization import jsonutils
-import pkg_resources
+import packaging.version
import requests
try:
@@ -33,9 +40,10 @@ try:
# NOTE(sdague): The conditional keyring import needs to only
# trigger if it's a version of keyring that's supported in global
# requirements. Update _min and _bad when that changes.
- keyring_v = pkg_resources.parse_version(
- pkg_resources.get_distribution("keyring").version)
- keyring_min = pkg_resources.parse_version('5.5.1')
+ keyring_v = packaging.version.Version(
+ importlib_metadata.version('keyring')
+ )
+ keyring_min = packaging.version.Version('5.5.1')
# This is a list of versions, e.g., pkg_resources.parse_version('3.3')
keyring_bad = []
@@ -43,7 +51,7 @@ try:
import keyring
else:
keyring = None
-except (ImportError, pkg_resources.DistributionNotFound):
+except (ImportError, importlib_metadata.PackageNotFoundError):
keyring = None
pickle = None