diff --git a/lib/ansible/executor/module_common.py b/lib/ansible/executor/module_common.py index 5658af38182..912d60d3d3c 100644 --- a/lib/ansible/executor/module_common.py +++ b/lib/ansible/executor/module_common.py @@ -50,13 +50,8 @@ from ansible.executor import action_write_locks from ansible.utils.display import Display from collections import namedtuple - -try: - import importlib.util - import importlib.machinery - imp = None -except ImportError: - import imp +import importlib.util +import importlib.machinery # if we're on a Python that doesn't have FNFError, redefine it as IOError (since that's what we'll see) try: @@ -812,34 +807,14 @@ class LegacyModuleUtilLocator(ModuleUtilLocatorBase): paths = [os.path.join(p, *rel_name_parts[:-1]) for p in self._mu_paths] # extend the MU paths with the relative bit - if imp is None: # python3 find module - # find_spec needs the full module name - self._info = info = importlib.machinery.PathFinder.find_spec('.'.join(name_parts), paths) - if info is not None and os.path.splitext(info.origin)[1] in importlib.machinery.SOURCE_SUFFIXES: - self.is_package = info.origin.endswith('/__init__.py') - path = info.origin - else: - return False - self.source_code = _slurp(path) - else: # python2 find module - try: - # imp just wants the leaf module/package name being searched for - info = imp.find_module(name_parts[-1], paths) - except ImportError: - return False - - if info[2][2] == imp.PY_SOURCE: - fd = info[0] - elif info[2][2] == imp.PKG_DIRECTORY: - self.is_package = True - fd = open(os.path.join(info[1], '__init__.py')) - else: - return False - - try: - self.source_code = fd.read() - finally: - fd.close() + # find_spec needs the full module name + self._info = info = importlib.machinery.PathFinder.find_spec('.'.join(name_parts), paths) + if info is not None and os.path.splitext(info.origin)[1] in importlib.machinery.SOURCE_SUFFIXES: + self.is_package = info.origin.endswith('/__init__.py') + path = info.origin + else: + return False + self.source_code = _slurp(path) return True diff --git a/lib/ansible/plugins/loader.py b/lib/ansible/plugins/loader.py index c9cba055b93..59ebd4b142f 100644 --- a/lib/ansible/plugins/loader.py +++ b/lib/ansible/plugins/loader.py @@ -38,11 +38,7 @@ except ImportError: SpecifierSet = None Version = None -try: - import importlib.util - imp = None -except ImportError: - import imp +import importlib.util display = Display() @@ -788,15 +784,10 @@ class PluginLoader: with warnings.catch_warnings(): warnings.simplefilter("ignore", RuntimeWarning) - if imp is None: - spec = importlib.util.spec_from_file_location(to_native(full_name), to_native(path)) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - sys.modules[full_name] = module - else: - with open(to_bytes(path), 'rb') as module_file: - # to_native is used here because imp.load_source's path is for tracebacks and python's traceback formatting uses native strings - module = imp.load_source(to_native(full_name), to_native(path), module_file) + spec = importlib.util.spec_from_file_location(to_native(full_name), to_native(path)) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + sys.modules[full_name] = module return module def _update_object(self, obj, name, path, redirected_names=None): diff --git a/lib/ansible/utils/hashing.py b/lib/ansible/utils/hashing.py index 1fd4457e80d..71300d6192b 100644 --- a/lib/ansible/utils/hashing.py +++ b/lib/ansible/utils/hashing.py @@ -23,15 +23,11 @@ import os from hashlib import sha1 -# Backwards compat only try: from hashlib import md5 as _md5 except ImportError: - try: - from md5 import md5 as _md5 - except ImportError: - # Assume we're running in FIPS mode here - _md5 = None + # Assume we're running in FIPS mode here + _md5 = None from ansible.errors import AnsibleError from ansible.module_utils._text import to_bytes diff --git a/lib/ansible/utils/multiprocessing.py b/lib/ansible/utils/multiprocessing.py index dcc186597aa..2912f71230c 100644 --- a/lib/ansible/utils/multiprocessing.py +++ b/lib/ansible/utils/multiprocessing.py @@ -14,8 +14,4 @@ import multiprocessing # # This exists in utils to allow it to be easily imported into various places # without causing circular import or dependency problems -try: - context = multiprocessing.get_context('fork') -except AttributeError: - # Py2 has no context functionality, and only supports fork - context = multiprocessing +context = multiprocessing.get_context('fork')