summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Martz <matt@sivel.net>2020-03-13 15:47:34 -0500
committerGitHub <noreply@github.com>2020-03-13 15:47:34 -0500
commitda3a90e88e027deef152f969641d0fddc1c51758 (patch)
tree36672363ef21b22ef36b4e7865a0b4e01a4abd82
parent757fe7502de932cbb5f9407b65c78f00bd477682 (diff)
downloadansible-da3a90e88e027deef152f969641d0fddc1c51758.tar.gz
Address compat issue for collection loading on py26 (#68219)
* Address compat issue for collection loading on py26 * Move import_module shim to utils for compat across the codebase * Enable collection tests on py2.6 * Update changelog fragment * Simplify code using sys.moduls * Move compat to module_utils/compat/importlib * Add back errantly deleted newline * Remove hack comment Co-Authored-By: Matt Clay <matt@mystile.com> Co-authored-by: Matt Clay <matt@mystile.com>
-rw-r--r--changelogs/fragments/py26-collection-loader.yml2
-rw-r--r--lib/ansible/executor/module_common.py8
-rw-r--r--lib/ansible/executor/powershell/module_manifest.py7
-rw-r--r--lib/ansible/module_utils/compat/importlib.py18
-rw-r--r--lib/ansible/plugins/loader.py7
-rw-r--r--lib/ansible/template/__init__.py7
-rw-r--r--lib/ansible/utils/collection_loader.py7
-rw-r--r--test/integration/targets/collections/aliases1
-rw-r--r--test/integration/targets/collections_plugin_namespace/aliases1
-rw-r--r--test/integration/targets/collections_relative_imports/aliases1
10 files changed, 25 insertions, 34 deletions
diff --git a/changelogs/fragments/py26-collection-loader.yml b/changelogs/fragments/py26-collection-loader.yml
new file mode 100644
index 0000000000..d0a2e6adc5
--- /dev/null
+++ b/changelogs/fragments/py26-collection-loader.yml
@@ -0,0 +1,2 @@
+bugfixes:
+- Create an ``import_module`` compat util, for use across the codebase, to allow collection loading to work properly on Python26
diff --git a/lib/ansible/executor/module_common.py b/lib/ansible/executor/module_common.py
index 5451ce9586..3f5e2f1d73 100644
--- a/lib/ansible/executor/module_common.py
+++ b/lib/ansible/executor/module_common.py
@@ -37,6 +37,7 @@ from ansible.errors import AnsibleError
from ansible.executor.interpreter_discovery import InterpreterDiscoveryRequiredError
from ansible.executor.powershell import module_manifest as ps_manifest
from ansible.module_utils._text import to_bytes, to_text, to_native
+from ansible.module_utils.compat.importlib import import_module
from ansible.plugins.loader import module_utils_loader
# Must import strategy and use write_locks from there
# If we import write_locks directly then we end up binding a
@@ -53,13 +54,6 @@ try:
except ImportError:
import imp
-
-# HACK: keep Python 2.6 controller tests happy in CI until they're properly split
-try:
- from importlib import import_module
-except ImportError:
- import_module = __import__
-
# if we're on a Python that doesn't have FNFError, redefine it as IOError (since that's what we'll see)
try:
FileNotFoundError
diff --git a/lib/ansible/executor/powershell/module_manifest.py b/lib/ansible/executor/powershell/module_manifest.py
index 3d3f3dfee2..c3bc0fc2f1 100644
--- a/lib/ansible/executor/powershell/module_manifest.py
+++ b/lib/ansible/executor/powershell/module_manifest.py
@@ -14,15 +14,10 @@ import re
from distutils.version import LooseVersion
-# HACK: keep Python 2.6 controller tests happy in CI until they're properly split
-try:
- from importlib import import_module
-except ImportError:
- import_module = __import__
-
from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.module_utils._text import to_bytes, to_native, to_text
+from ansible.module_utils.compat.importlib import import_module
from ansible.plugins.loader import ps_module_utils_loader
diff --git a/lib/ansible/module_utils/compat/importlib.py b/lib/ansible/module_utils/compat/importlib.py
new file mode 100644
index 0000000000..eee0ddf7bc
--- /dev/null
+++ b/lib/ansible/module_utils/compat/importlib.py
@@ -0,0 +1,18 @@
+# Copyright (c) 2020 Matt Martz <matt@sivel.net>
+# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
+
+# Make coding more python3-ish
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import sys
+
+try:
+ from importlib import import_module
+except ImportError:
+ # importlib.import_module returns the tail
+ # whereas __import__ returns the head
+ # compat to work like importlib.import_module
+ def import_module(name):
+ __import__(name)
+ return sys.modules[name]
diff --git a/lib/ansible/plugins/loader.py b/lib/ansible/plugins/loader.py
index c383a5eb32..848cdd020f 100644
--- a/lib/ansible/plugins/loader.py
+++ b/lib/ansible/plugins/loader.py
@@ -18,6 +18,7 @@ from collections import defaultdict
from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.module_utils._text import to_bytes, to_text, to_native
+from ansible.module_utils.compat.importlib import import_module
from ansible.module_utils.six import string_types
from ansible.parsing.utils.yaml import from_yaml
from ansible.parsing.yaml.loader import AnsibleLoader
@@ -32,12 +33,6 @@ try:
except ImportError:
import imp
-# HACK: keep Python 2.6 controller tests happy in CI until they're properly split
-try:
- from importlib import import_module
-except ImportError:
- import_module = __import__
-
display = Display()
diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py
index b4e8118a4d..2a13a9fc1b 100644
--- a/lib/ansible/template/__init__.py
+++ b/lib/ansible/template/__init__.py
@@ -45,6 +45,7 @@ from ansible.module_utils.six import iteritems, string_types, text_type
from ansible.module_utils._text import to_native, to_text, to_bytes
from ansible.module_utils.common._collections_compat import Sequence, Mapping, MutableMapping
from ansible.module_utils.common.collections import is_sequence
+from ansible.module_utils.compat.importlib import import_module
from ansible.plugins.loader import filter_loader, lookup_loader, test_loader
from ansible.template.safe_eval import safe_eval
from ansible.template.template import AnsibleJ2Template
@@ -53,12 +54,6 @@ from ansible.utils.collection_loader import AnsibleCollectionRef
from ansible.utils.display import Display
from ansible.utils.unsafe_proxy import wrap_var
-# HACK: keep Python 2.6 controller tests happy in CI until they're properly split
-try:
- from importlib import import_module
-except ImportError:
- import_module = __import__
-
display = Display()
diff --git a/lib/ansible/utils/collection_loader.py b/lib/ansible/utils/collection_loader.py
index 4c32162cc9..2a70595aa2 100644
--- a/lib/ansible/utils/collection_loader.py
+++ b/lib/ansible/utils/collection_loader.py
@@ -13,15 +13,10 @@ import sys
from types import ModuleType
from ansible.module_utils._text import to_bytes, to_native, to_text
+from ansible.module_utils.compat.importlib import import_module
from ansible.module_utils.six import iteritems, string_types, with_metaclass
from ansible.utils.singleton import Singleton
-# HACK: keep Python 2.6 controller tests happy in CI until they're properly split
-try:
- from importlib import import_module
-except ImportError:
- import_module = __import__
-
_SYNTHETIC_PACKAGES = {
# these provide fallback package definitions when there are no on-disk paths
'ansible_collections': dict(type='pkg_only', allow_external_subpackages=True),
diff --git a/test/integration/targets/collections/aliases b/test/integration/targets/collections/aliases
index 853c56395b..1a9cc499c4 100644
--- a/test/integration/targets/collections/aliases
+++ b/test/integration/targets/collections/aliases
@@ -1,5 +1,4 @@
posix
shippable/posix/group4
shippable/windows/group1
-skip/python2.6
windows
diff --git a/test/integration/targets/collections_plugin_namespace/aliases b/test/integration/targets/collections_plugin_namespace/aliases
index 54ea5a3b07..a6dafcf8cd 100644
--- a/test/integration/targets/collections_plugin_namespace/aliases
+++ b/test/integration/targets/collections_plugin_namespace/aliases
@@ -1,2 +1 @@
shippable/posix/group1
-skip/python2.6
diff --git a/test/integration/targets/collections_relative_imports/aliases b/test/integration/targets/collections_relative_imports/aliases
index 54ea5a3b07..a6dafcf8cd 100644
--- a/test/integration/targets/collections_relative_imports/aliases
+++ b/test/integration/targets/collections_relative_imports/aliases
@@ -1,2 +1 @@
shippable/posix/group1
-skip/python2.6