summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-10-05 11:56:41 +0000
committerGerrit Code Review <review@openstack.org>2022-10-05 11:56:41 +0000
commit135e285ec6d8b33da62d13287d3372ac27964cfb (patch)
treeecec7ec9133ad4a819694f8cba65554c907d278a
parentae36c47165221abeaebcb9796521573170b05112 (diff)
parent28fc7164dace83abc3ecc06fcb56f7ca880d735a (diff)
downloadstevedore-135e285ec6d8b33da62d13287d3372ac27964cfb.tar.gz
Merge "Fix compatibility with Python 3.12, importlib-metadata 5.0"
-rw-r--r--stevedore/_cache.py12
-rw-r--r--stevedore/tests/test_cache.py8
2 files changed, 18 insertions, 2 deletions
diff --git a/stevedore/_cache.py b/stevedore/_cache.py
index 20b631d..6a76bc8 100644
--- a/stevedore/_cache.py
+++ b/stevedore/_cache.py
@@ -97,8 +97,16 @@ def _hash_settings_for_path(path):
return (h.hexdigest(), paths)
-def _build_cacheable_data(path):
+def _build_cacheable_data():
real_groups = importlib_metadata.entry_points()
+
+ if not isinstance(real_groups, dict):
+ # importlib-metadata 4.0 or later (or stdlib importlib.metadata in
+ # Python 3.9 or later)
+ real_groups = {
+ name: real_groups.select(name=name) for name in real_groups.names
+ }
+
# Convert the namedtuple values to regular tuples
groups = {}
for name, group_data in real_groups.items():
@@ -153,7 +161,7 @@ class Cache:
with open(filename, 'r') as f:
data = json.load(f)
except (IOError, json.JSONDecodeError):
- data = _build_cacheable_data(path)
+ data = _build_cacheable_data()
data['path_values'] = path_values
if not self._disable_caching:
try:
diff --git a/stevedore/tests/test_cache.py b/stevedore/tests/test_cache.py
index 8bf49c8..0c5af67 100644
--- a/stevedore/tests/test_cache.py
+++ b/stevedore/tests/test_cache.py
@@ -54,3 +54,11 @@ class TestCache(utils.TestCase):
mock_open.side_effect = IOError
sot._get_data_for_path('fake')
mock_mkdir.assert_not_called()
+
+ def test__build_cacheable_data(self):
+ # this is a rubbish test as we don't actually do anything with the
+ # data, but it's too hard to script since it's totally environmentally
+ # dependent and mocking out the underlying calls would remove the value
+ # of this test (we want to test those underlying API calls)
+ ret = _cache._build_cacheable_data()
+ self.assertIsInstance(ret['groups'], dict)