From 37f6a3079434186a534864b8a3e919232f56ff27 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Sun, 5 Jul 2020 15:51:53 -0400 Subject: [PATCH] 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 --- cinderclient/utils.py | 17 +++++++++++------ requirements.txt | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cinderclient/utils.py b/cinderclient/utils.py index 28c458dc0..681a2d410 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 fef5e1e44..f6567f49a 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