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>
This commit is contained in:
Doug Hellmann
2020-07-05 15:51:53 -04:00
parent b6b308ed23
commit 37f6a30794
2 changed files with 12 additions and 6 deletions

View File

@@ -17,13 +17,13 @@ from __future__ import print_function
import collections import collections
import os import os
import pkg_resources
import sys import sys
import uuid import uuid
import prettytable import prettytable
import six import six
from six.moves.urllib import parse from six.moves.urllib import parse
import stevedore
from cinderclient import exceptions from cinderclient import exceptions
from oslo_utils import encodeutils from oslo_utils import encodeutils
@@ -332,11 +332,16 @@ def safe_issubclass(*args):
def _load_entry_point(ep_name, name=None): def _load_entry_point(ep_name, name=None):
"""Try to load the entry point ep_name that matches name.""" """Try to load the entry point ep_name that matches name."""
for ep in pkg_resources.iter_entry_points(ep_name, name=name): mgr = stevedore.NamedExtensionManager(
try: namespace=ep_name,
return ep.load() names=[name],
except (ImportError, pkg_resources.UnknownExtra, AttributeError): # Ignore errors on load
continue on_load_failure_callback=lambda mgr, entry_point, error: None,
)
try:
return mgr[name].plugin
except KeyError:
pass
def get_function_name(func): def get_function_name(func):

View File

@@ -9,3 +9,4 @@ six>=1.10.0 # MIT
oslo.i18n>=3.15.3 # Apache-2.0 oslo.i18n>=3.15.3 # Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0 oslo.utils>=3.33.0 # Apache-2.0
requests!=2.20.0,>=2.14.2 # Apache-2.0 requests!=2.20.0,>=2.14.2 # Apache-2.0
stevedore>=1.20.0 # Apache-2.0