align functionality with the current state of py3.12+ loaders

pull/85319/head
Matt Martz 6 months ago
parent 3162166442
commit a5a569806a
No known key found for this signature in database
GPG Key ID: 40832D88E9FC91D8

@ -47,8 +47,7 @@ if sys.version_info >= (3, 10):
else:
# deprecated: description='reliable importlib.resources.files' python_version='3.10'
def files(name):
spec = find_spec(name)
if spec is None:
if (spec := find_spec(name)) is None:
raise ImportError(name)
origin = pathlib.Path(spec.origin)
return origin.parent
@ -144,7 +143,7 @@ class _AnsibleTraversableResources(TraversableResources):
def _get_package(self, package):
try:
# spec
return package.__parent__
return package.parent
except AttributeError:
# module
return package.__package__
@ -168,13 +167,6 @@ class _AnsibleTraversableResources(TraversableResources):
module_filename = os.path.basename(origin)
return module_filename in {'__synthetic__', '__init__.py'}
def _ensure_package(self, package):
if self._is_ansible_ns_package(package):
# Short circuit our loaders
return
if self._get_package(package) != package.__name__:
raise TypeError('%r is not a package' % package.__name__)
def files(self):
package = self._package
parts = package.split('.')
@ -191,7 +183,6 @@ class _AnsibleTraversableResources(TraversableResources):
elif not isinstance(package, ModuleType):
raise TypeError('Expected string or module, got %r' % package.__class__.__name__)
self._ensure_package(package)
if is_ns:
return _AnsibleNSTraversable(*package.submodule_search_locations)
return pathlib.Path(self._get_path(package)).parent

@ -892,6 +892,24 @@ def test_importlib_resources():
assert next(module_utils.glob('__init__.py')) == nestcoll_mu_init
@pytest.mark.skipif(sys.version_info < (3, 12), reason='Testing Python 3.12+ codepath that returns package when provided module')
def test_importlib_resources_module():
from importlib.resources import files
from pathlib import Path
f = get_default_finder()
reset_collections_loader_state(f)
module_utils = files('ansible_collections.testns.testcoll.plugins.module_utils')
my_util = files('ansible_collections.testns.testcoll.plugins.module_utils.my_util')
assert isinstance(module_utils, Path)
assert isinstance(my_util, Path)
assert module_utils.is_dir()
assert my_util.is_dir()
assert module_utils == my_util
# BEGIN TEST SUPPORT
default_test_collection_paths = [

Loading…
Cancel
Save