summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2020-07-05 15:51:53 -0400
committerDoug Hellmann <doug@doughellmann.com>2020-07-05 15:51:53 -0400
commit37f6a3079434186a534864b8a3e919232f56ff27 (patch)
treef85022fd7f17af4e5fb849afa9d0f94d1a70c4a6
parentb6b308ed23b5b3d9ddd8aa946a31edec6b35cbe4 (diff)
downloadpython-cinderclient-37f6a3079434186a534864b8a3e919232f56ff27.tar.gz
use stevedore to load util plugins
Importing pkg_resources has a side-effect of scanning all of the installed python modules looking for entrypoints to build an in-memory cache. Stevedore will be adding an on-disk cache to speed that process up, which should provide significant performance benefits for client applications such as python-openstackclient. This change introduces stevedore to replace pkg_resources. Change-Id: I66decf6d5a4f79ddaa6617737e9334a56dbbbad4 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
-rw-r--r--cinderclient/utils.py17
-rw-r--r--requirements.txt1
2 files changed, 12 insertions, 6 deletions
diff --git a/cinderclient/utils.py b/cinderclient/utils.py
index 28c458d..681a2d4 100644
--- a/cinderclient/utils.py
+++ b/cinderclient/utils.py
@@ -17,13 +17,13 @@ from __future__ import print_function
import collections
import os
-import pkg_resources
import sys
import uuid
import prettytable
import six
from six.moves.urllib import parse
+import stevedore
from cinderclient import exceptions
from oslo_utils import encodeutils
@@ -332,11 +332,16 @@ def safe_issubclass(*args):
def _load_entry_point(ep_name, name=None):
"""Try to load the entry point ep_name that matches name."""
- for ep in pkg_resources.iter_entry_points(ep_name, name=name):
- try:
- return ep.load()
- except (ImportError, pkg_resources.UnknownExtra, AttributeError):
- continue
+ mgr = stevedore.NamedExtensionManager(
+ namespace=ep_name,
+ names=[name],
+ # Ignore errors on load
+ on_load_failure_callback=lambda mgr, entry_point, error: None,
+ )
+ try:
+ return mgr[name].plugin
+ except KeyError:
+ pass
def get_function_name(func):
diff --git a/requirements.txt b/requirements.txt
index fef5e1e..f6567f4 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,3 +9,4 @@ six>=1.10.0 # MIT
oslo.i18n>=3.15.3 # Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0
requests!=2.20.0,>=2.14.2 # Apache-2.0
+stevedore>=1.20.0 # Apache-2.0