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>
This commit is contained in:

committed by
Douglas Mendizábal

parent
ea1308ad0e
commit
6940b4ff0a
@@ -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
|
||||
|
||||
|
@@ -16,6 +16,7 @@ future==0.16.0
|
||||
gitdb==0.6.4
|
||||
GitPython==1.0.1
|
||||
idna==2.6
|
||||
importlib_metadata==1.7.0
|
||||
iso8601==0.1.11
|
||||
jsonschema==2.6.0
|
||||
keyring==5.5.1
|
||||
@@ -40,6 +41,7 @@ oslo.log==3.36.0
|
||||
oslo.serialization==2.18.0
|
||||
oslo.utils==3.33.0
|
||||
oslotest==3.2.0
|
||||
packaging==20.4
|
||||
paramiko==2.0.0
|
||||
pbr==2.0.0
|
||||
pep257==0.7.0
|
||||
|
@@ -13,3 +13,5 @@ oslo.utils>=3.33.0 # Apache-2.0
|
||||
requests>=2.14.2 # Apache-2.0
|
||||
six>=1.10.0 # MIT
|
||||
stevedore>=1.20.0 # Apache-2.0
|
||||
importlib_metadata>=1.7.0;python_version<'3.8' # Apache-2.0
|
||||
packaging>=20.4 # BSD
|
||||
|
Reference in New Issue
Block a user