diff --git a/CHANGELOG.md b/CHANGELOG.md index e8eaceba7b..e71d78c4b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Ansible Changes By Release ### Minor Changes * removed previously deprecated config option 'hostfile' and env var 'ANSIBLE_HOSTS' * removed unused and deprecated config option 'pattern' +* Updated the copy of six bundled for modules to use from 1.4.1 to 1.10.0 #### New: Tests diff --git a/contrib/inventory/apstra_aos.py b/contrib/inventory/apstra_aos.py index 65838c0814..f0efdc2555 100755 --- a/contrib/inventory/apstra_aos.py +++ b/contrib/inventory/apstra_aos.py @@ -53,20 +53,20 @@ import os import argparse import re -from ansible.compat.six.moves import configparser - -try: - from apstra.aosom.session import Session - - HAS_AOS_PYEZ = True -except ImportError: - HAS_AOS_PYEZ = False - try: import json except ImportError: import simplejson as json +try: + from apstra.aosom.session import Session + HAS_AOS_PYEZ = True +except ImportError: + HAS_AOS_PYEZ = False + +from ansible.module_utils.six.moves import configparser + + """ ## Expected output format in Device mode diff --git a/docs/docsite/rst/dev_guide/developing_module_utilities.rst b/docs/docsite/rst/dev_guide/developing_module_utilities.rst index 71fccb53be..3ecaa56dda 100644 --- a/docs/docsite/rst/dev_guide/developing_module_utilities.rst +++ b/docs/docsite/rst/dev_guide/developing_module_utilities.rst @@ -41,7 +41,7 @@ The following is a list of module_utils files and a general description. The mod - redhat.py - Functions for modules that manage Red Hat Network registration and subscriptions - service.py - Contains utilities to enable modules to work with Linux services (placeholder, not in use). - shell.py - Functions to allow modules to create shells and work with shell commands -- six.py - Module utils for working with the Six python 2 and 3 compatibility library +- six/__init__.py - Bundled copy of the `Six Python library `_ to aid in writing code compatible with both Python 2 and Python 3. - splitter.py - String splitting and manipulation utilities for working with Jinja2 templates - urls.py - Utilities for working with http and https requests - vca.py - Contains utilities for modules that work with VMware vCloud Air diff --git a/docs/docsite/rst/dev_guide/developing_modules_python3.rst b/docs/docsite/rst/dev_guide/developing_modules_python3.rst index cf93c2c360..fe3cf5066a 100644 --- a/docs/docsite/rst/dev_guide/developing_modules_python3.rst +++ b/docs/docsite/rst/dev_guide/developing_modules_python3.rst @@ -325,20 +325,16 @@ Bundled six The third-party `python-six `_ library exists to help projects create code that runs on both Python-2 and Python-3. Ansible -includes version 1.4.1 in module_utils so that other modules can use it +includes a version of the library in module_utils so that other modules can use it without requiring that it is installed on the remote system. To make use of it, import it like this:: from ansible.module_utils import six -.. note:: Why version 1.4.1? +.. note:: Ansible can also use a system copy of six - six-1.4.1 is the last version of python-six to support Python-2.4. Until - Ansible-2.4, most Ansible modules were required to run on Python-2.4. So - the bundled version of six could not be newer than 1.4.1. - - Ansible-2.4 now targets Python-2.6 or greater for modules. We'll be - updating the bundled six soon. + Ansible will use a system copy of six if the system copy is a later + version than the one Ansible bundles. ------------------------------------- Porting module_utils code to Python 3 diff --git a/lib/ansible/cli/__init__.py b/lib/ansible/cli/__init__.py index 23c0fb95b9..cdfd4a2b89 100644 --- a/lib/ansible/cli/__init__.py +++ b/lib/ansible/cli/__init__.py @@ -33,8 +33,8 @@ from abc import ABCMeta, abstractmethod from ansible.release import __version__ from ansible import constants as C -from ansible.compat.six import with_metaclass from ansible.errors import AnsibleError, AnsibleOptionsError +from ansible.module_utils.six import with_metaclass from ansible.module_utils._text import to_bytes, to_text from ansible.utils.path import unfrackpath diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py index 42ff62488b..8e45e7cb66 100644 --- a/lib/ansible/cli/doc.py +++ b/lib/ansible/cli/doc.py @@ -25,12 +25,11 @@ import traceback import textwrap import yaml -from ansible.compat.six import iteritems, string_types - from ansible import constants as C -from ansible.errors import AnsibleError, AnsibleOptionsError -from ansible.plugins import module_loader, action_loader, lookup_loader, callback_loader, cache_loader, connection_loader, strategy_loader from ansible.cli import CLI +from ansible.errors import AnsibleError, AnsibleOptionsError +from ansible.module_utils.six import iteritems, string_types +from ansible.plugins import module_loader, action_loader, lookup_loader, callback_loader, cache_loader, connection_loader, strategy_loader from ansible.utils import plugin_docs try: diff --git a/lib/ansible/compat/six/__init__.py b/lib/ansible/compat/six/__init__.py deleted file mode 100644 index 61d9ac5646..0000000000 --- a/lib/ansible/compat/six/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -''' -Compat six library. RHEL7 has python-six 1.3.0 which is too old -''' -# The following makes it easier for us to script updates of the bundled code -_BUNDLED_METADATA = { "pypi_name": "six", "version": "1.10.0" } - -import os.path - -try: - import six as _system_six -except ImportError: - _system_six = None - -if _system_six: - # If we need some things from even newer versions of six, then we need to - # use our bundled copy instead - - if ( # Added in six-1.8.0 - not hasattr(_system_six.moves, 'shlex_quote') or - # Added in six-1.4.0 - not hasattr(_system_six, 'byte2int') or - not hasattr(_system_six, 'add_metaclass') or - not hasattr(_system_six.moves, 'urllib') - ): - - _system_six = False - -if _system_six: - six = _system_six -else: - from . import _six as six -six_py_file = '{0}.py'.format(os.path.splitext(six.__file__)[0]) -exec(open(six_py_file, 'rb').read()) diff --git a/lib/ansible/constants.py b/lib/ansible/constants.py index 7abf402968..c40320462d 100644 --- a/lib/ansible/constants.py +++ b/lib/ansible/constants.py @@ -23,9 +23,9 @@ import os import tempfile from string import ascii_letters, digits -from ansible.compat.six import string_types -from ansible.compat.six.moves import configparser from ansible.errors import AnsibleOptionsError +from ansible.module_utils.six import string_types +from ansible.module_utils.six.moves import configparser from ansible.module_utils._text import to_text from ansible.parsing.quoting import unquote from ansible.utils.path import makedirs_safe diff --git a/lib/ansible/executor/module_common.py b/lib/ansible/executor/module_common.py index c1d337dcba..e7384b92af 100644 --- a/lib/ansible/executor/module_common.py +++ b/lib/ansible/executor/module_common.py @@ -406,7 +406,11 @@ class ModuleDepFinder(ast.NodeVisitor): self.generic_visit(node) def visit_ImportFrom(self, node): - if node.module.startswith('ansible.module_utils'): + # Specialcase: six is a special case because of its + # import logic + if node.names[0].name == '_six': + self.submodules.add(('_six',)) + elif node.module.startswith('ansible.module_utils'): where_from = node.module[self.IMPORT_PREFIX_SIZE:] if where_from: # from ansible.module_utils.MODULE1[.MODULEn] import IDENTIFIER [as asname] @@ -484,6 +488,12 @@ def recursive_finder(name, data, py_module_names, py_module_cache, zf): module_info = imp.find_module('six', module_utils_paths) py_module_name = ('six',) idx = 0 + elif py_module_name[0] == '_six': + # Special case the python six library because it messes up the + # import process in an incompatible way + module_info = imp.find_module('_six', [os.path.join(p, 'six') for p in module_utils_paths]) + py_module_name = ('six', '_six') + idx = 0 else: # Check whether either the last or the second to last identifier is # a module name @@ -499,7 +509,7 @@ def recursive_finder(name, data, py_module_names, py_module_cache, zf): # Could not find the module. Construct a helpful error message. if module_info is None: - msg = ['Could not find imported module support code for %s. Looked for' % name] + msg = ['Could not find imported module support code for %s. Looked for' % (name,)] if idx == 2: msg.append('either %s.py or %s.py' % (py_module_name[-1], py_module_name[-2])) else: diff --git a/lib/ansible/executor/play_iterator.py b/lib/ansible/executor/play_iterator.py index 616076cc5b..b3808021f0 100644 --- a/lib/ansible/executor/play_iterator.py +++ b/lib/ansible/executor/play_iterator.py @@ -21,14 +21,14 @@ __metaclass__ = type import fnmatch -from ansible.compat.six import iteritems from ansible import constants as C from ansible.errors import AnsibleError -from ansible.module_utils.six import cmp +from ansible.module_utils.six import iteritems from ansible.playbook.block import Block from ansible.playbook.task import Task from ansible.playbook.role_include import IncludeRole + boolean = C.mk_boolean __all__ = ['PlayIterator'] diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py index 033b3743f4..32b121d311 100644 --- a/lib/ansible/executor/task_executor.py +++ b/lib/ansible/executor/task_executor.py @@ -24,11 +24,10 @@ import sys import time import traceback -from ansible.compat.six import iteritems, string_types, binary_type - from ansible import constants as C from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable, AnsibleConnectionFailure from ansible.executor.task_result import TaskResult +from ansible.module_utils.six import iteritems, string_types, binary_type from ansible.module_utils._text import to_text from ansible.playbook.conditional import Conditional from ansible.playbook.task import Task @@ -44,6 +43,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + __all__ = ['TaskExecutor'] diff --git a/lib/ansible/executor/task_queue_manager.py b/lib/ansible/executor/task_queue_manager.py index a68eb70a38..1b27a887d6 100644 --- a/lib/ansible/executor/task_queue_manager.py +++ b/lib/ansible/executor/task_queue_manager.py @@ -24,10 +24,10 @@ import os import tempfile from ansible import constants as C -from ansible.compat.six import string_types from ansible.errors import AnsibleError from ansible.executor.play_iterator import PlayIterator from ansible.executor.stats import AggregateStats +from ansible.module_utils.six import string_types from ansible.module_utils._text import to_text from ansible.playbook.block import Block from ansible.playbook.play_context import PlayContext @@ -44,6 +44,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + __all__ = ['TaskQueueManager'] diff --git a/lib/ansible/galaxy/__init__.py b/lib/ansible/galaxy/__init__.py index 129e860c90..f221a85cce 100644 --- a/lib/ansible/galaxy/__init__.py +++ b/lib/ansible/galaxy/__init__.py @@ -25,9 +25,8 @@ __metaclass__ = type import os -from ansible.compat.six import string_types - from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types # default_readme_template # default_meta_template diff --git a/lib/ansible/galaxy/api.py b/lib/ansible/galaxy/api.py index 068a888e41..08befce0cd 100644 --- a/lib/ansible/galaxy/api.py +++ b/lib/ansible/galaxy/api.py @@ -25,11 +25,11 @@ __metaclass__ = type import json import ansible.constants as C -from ansible.compat.six import string_types -from ansible.compat.six.moves.urllib.error import HTTPError -from ansible.compat.six.moves.urllib.parse import quote as urlquote, urlencode from ansible.errors import AnsibleError from ansible.galaxy.token import GalaxyToken +from ansible.module_utils.six import string_types +from ansible.module_utils.six.moves.urllib.error import HTTPError +from ansible.module_utils.six.moves.urllib.parse import quote as urlquote, urlencode from ansible.module_utils._text import to_native, to_text from ansible.module_utils.urls import open_url diff --git a/lib/ansible/galaxy/login.py b/lib/ansible/galaxy/login.py index 4e1b194e65..affe3c82f0 100644 --- a/lib/ansible/galaxy/login.py +++ b/lib/ansible/galaxy/login.py @@ -25,10 +25,9 @@ __metaclass__ = type import getpass import json -from ansible.compat.six.moves.urllib.parse import quote as urlquote, urlparse -from ansible.compat.six.moves.urllib.error import HTTPError - from ansible.errors import AnsibleError, AnsibleOptionsError +from ansible.module_utils.six.moves.urllib.parse import quote as urlquote, urlparse +from ansible.module_utils.six.moves.urllib.error import HTTPError from ansible.module_utils.urls import open_url from ansible.utils.color import stringc @@ -38,6 +37,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + class GalaxyLogin(object): ''' Class to handle authenticating user with Galaxy API prior to performing CUD operations ''' diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 20e117d0ab..2e530e7f3e 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -26,14 +26,13 @@ import sys import re import itertools -from ansible.compat.six import string_types, iteritems from ansible import constants as C from ansible.errors import AnsibleError - from ansible.inventory.dir import InventoryDirectory, get_file_parser from ansible.inventory.group import Group from ansible.inventory.host import Host +from ansible.module_utils.six import string_types, iteritems from ansible.module_utils._text import to_bytes, to_text from ansible.parsing.utils.addresses import parse_address from ansible.plugins import vars_loader diff --git a/lib/ansible/inventory/script.py b/lib/ansible/inventory/script.py index bf9d06c2f1..d9cc9d0a9f 100644 --- a/lib/ansible/inventory/script.py +++ b/lib/ansible/inventory/script.py @@ -24,13 +24,12 @@ import subprocess import sys from collections import Mapping -from ansible.compat.six import iteritems - from ansible import constants as C from ansible.errors import AnsibleError from ansible.inventory.host import Host from ansible.inventory.group import Group from ansible.module_utils.basic import json_dict_bytes_to_unicode +from ansible.module_utils.six import iteritems from ansible.module_utils._text import to_native, to_text diff --git a/lib/ansible/inventory/yaml.py b/lib/ansible/inventory/yaml.py index a652846aca..2e89e8f76e 100644 --- a/lib/ansible/inventory/yaml.py +++ b/lib/ansible/inventory/yaml.py @@ -26,8 +26,9 @@ from ansible.inventory.host import Host from ansible.inventory.group import Group from ansible.inventory.expand_hosts import detect_range from ansible.inventory.expand_hosts import expand_hostname_range +from ansible.module_utils.six import string_types from ansible.parsing.utils.addresses import parse_address -from ansible.compat.six import string_types + class InventoryParser(object): """ diff --git a/lib/ansible/module_utils/six.py b/lib/ansible/module_utils/six.py deleted file mode 100644 index b93d4bf8bb..0000000000 --- a/lib/ansible/module_utils/six.py +++ /dev/null @@ -1,579 +0,0 @@ -"""Utilities for writing code that runs on Python 2 and 3""" - -# Copyright (c) 2010-2013 Benjamin Peterson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -import operator -import sys -import types - -__author__ = "Benjamin Peterson " -__version__ = "1.4.1" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - cmp = lambda a, b: (a > b) - (a < b) - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - cmp = cmp - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) - # This is a bit ugly, but it avoids running this again. - delattr(tp, self.name) - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - - -class _MovedItems(types.ModuleType): - """Lazy loading of moved objects""" - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("winreg", "_winreg"), -] -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) -del attr - -moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves") - - - -class Module_six_moves_urllib_parse(types.ModuleType): - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -sys.modules[__name__ + ".moves.urllib_parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse") -sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib.parse") - - -class Module_six_moves_urllib_error(types.ModuleType): - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -sys.modules[__name__ + ".moves.urllib_error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib_error") -sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error") - - -class Module_six_moves_urllib_request(types.ModuleType): - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -sys.modules[__name__ + ".moves.urllib_request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib_request") -sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request") - - -class Module_six_moves_urllib_response(types.ModuleType): - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -sys.modules[__name__ + ".moves.urllib_response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib_response") -sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(types.ModuleType): - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -sys.modules[__name__ + ".moves.urllib_robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib_robotparser") -sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - parse = sys.modules[__name__ + ".moves.urllib_parse"] - error = sys.modules[__name__ + ".moves.urllib_error"] - request = sys.modules[__name__ + ".moves.urllib_request"] - response = sys.modules[__name__ + ".moves.urllib_response"] - robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"] - - -sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" - - _iterkeys = "keys" - _itervalues = "values" - _iteritems = "items" - _iterlists = "lists" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - _iterkeys = "iterkeys" - _itervalues = "itervalues" - _iteritems = "iteritems" - _iterlists = "iterlists" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -def iterkeys(d, **kw): - """Return an iterator over the keys of a dictionary.""" - return iter(getattr(d, _iterkeys)(**kw)) - -def itervalues(d, **kw): - """Return an iterator over the values of a dictionary.""" - return iter(getattr(d, _itervalues)(**kw)) - -def iteritems(d, **kw): - """Return an iterator over the (key, value) pairs of a dictionary.""" - return iter(getattr(d, _iteritems)(**kw)) - -def iterlists(d, **kw): - """Return an iterator over the (key, [values]) pairs of a dictionary.""" - return iter(getattr(d, _iterlists)(**kw)) - - -if PY3: - def b(s): - return s.encode("latin-1") - def u(s): - return s - unichr = chr - if sys.version_info[1] <= 1: - def int2byte(i): - return bytes((i,)) - else: - # This is about 2x faster than the implementation above on 3.2+ - int2byte = operator.methodcaller("to_bytes", 1, "big") - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO -else: - def b(s): - return s - def u(s): - return unicode(s, "unicode_escape") - unichr = unichr - int2byte = chr - def byte2int(bs): - return ord(bs[0]) - def indexbytes(buf, i): - return ord(buf[i]) - def iterbytes(buf): - return (ord(byte) for byte in buf) - import StringIO - StringIO = BytesIO = StringIO.StringIO -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -if PY3: - import builtins - exec_ = getattr(builtins, "exec") - - - def reraise(tp, value, tb=None): - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - - - print_ = getattr(builtins, "print") - del builtins - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - - exec_("""def reraise(tp, value, tb=None): - raise tp, value, tb -""") - - - def print_(*args, **kwargs): - """The new-style print function.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - def write(data): - if not isinstance(data, basestring): - data = str(data) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) - -_add_doc(reraise, """Reraise an exception.""") - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - return meta("NewBase", bases, {}) - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - for slots_var in orig_vars.get('__slots__', ()): - orig_vars.pop(slots_var) - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper diff --git a/lib/ansible/module_utils/six/__init__.py b/lib/ansible/module_utils/six/__init__.py new file mode 100644 index 0000000000..644db3d9ad --- /dev/null +++ b/lib/ansible/module_utils/six/__init__.py @@ -0,0 +1,116 @@ +# This code is part of Ansible, but is an independent component. +# This particular file snippet, and this file snippet only, is BSD licensed. +# Modules you write using this snippet, which is embedded dynamically by Ansible +# still belong to the author of the module, and may assign their own license +# to the complete work. +# +# Copyright (c) 2017, Toshio Kuratomi +# +# This code is based on code from Astropy and retains their 3-clause BSD license +# reproduced below: +# +# Copyright (c) 2011-2016, Astropy Developers +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the Astropy Team nor the names of its contributors may +# be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Astropy License: https://github.com/astropy/astropy/blob/cf3265e42a0db8e00bb90644db37c8150f5ac00c/licenses/LICENSE.rst +# Astropy Code: https://github.com/astropy/astropy/blob/cf3265e42a0db8e00bb90644db37c8150f5ac00c/astropy/extern/six.py + +""" +Handle loading six package from system or from the bundled copy +""" +from __future__ import absolute_import + +import imp as _imp +import sys as _sys + +try: + from distutils.version import LooseVersion as _LooseVersion +except ImportError: + # Some platforms *cough*Solaris*cough* don't ship the whole stdlib + _LooseVersion = None + +try: + import six as _system_six +except ImportError: + _system_six = None + +from . import _six as _bundled_six + + +def _find_module(name, path=None): + """Alternative to `imp.find_module` that can also search in subpackages""" + parts = name.split('.') + + for part in parts: + if path is not None: + path = [path] + fh, path, descr = _imp.find_module(part, path) + return fh, path, descr + + +def _get_bundled_six_source(): + # Special import loader (zipimport for instance) + found = False + for path in _sys.path: + importer = _sys.path_importer_cache.get(path) + if importer: + try: + found = importer.find_module('ansible/module_utils/six/_six') + except ImportError: + continue + if found: + break + else: + raise ImportError("Could not find ansible.module_utils.six._six") + + module_source = importer.get_source('ansible/module_utils/six/_six') + return module_source + + +def _get_six_source(): + """Import the newest version of the six library that's available""" + mod_info = None + try: + if _system_six and _LooseVersion and \ + _LooseVersion(_system_six.__version__) >= _LooseVersion(_bundled_six.__version__): + mod_info = _find_module('six') + except: + # Any errors finding the system library, use our bundled lib instead + pass + + if not mod_info: + try: + mod_info = _find_module('ansible.module_utils.six._six') + except ImportError: + # zipimport + module_source = _get_bundled_six_source() + return module_source + + return mod_info[0].read() + +source = _get_six_source() +exec(source) diff --git a/lib/ansible/compat/six/_six.py b/lib/ansible/module_utils/six/_six.py similarity index 100% rename from lib/ansible/compat/six/_six.py rename to lib/ansible/module_utils/six/_six.py diff --git a/lib/ansible/parsing/dataloader.py b/lib/ansible/parsing/dataloader.py index aa306aafd7..9022de381a 100644 --- a/lib/ansible/parsing/dataloader.py +++ b/lib/ansible/parsing/dataloader.py @@ -25,10 +25,10 @@ import json import tempfile from yaml import YAMLError -from ansible.compat.six import text_type, string_types from ansible.errors import AnsibleFileNotFound, AnsibleParserError from ansible.errors.yaml_strings import YAML_SYNTAX_ERROR from ansible.module_utils.basic import is_executable +from ansible.module_utils.six import text_type, string_types from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.parsing.vault import VaultLib, b_HEADER, is_encrypted, is_encrypted_file from ansible.parsing.quoting import unquote @@ -43,7 +43,7 @@ except ImportError: display = Display() -class DataLoader(): +class DataLoader: ''' The DataLoader class is used to load and parse YAML or JSON content, diff --git a/lib/ansible/parsing/mod_args.py b/lib/ansible/parsing/mod_args.py index 299554197a..c309bf1bd7 100644 --- a/lib/ansible/parsing/mod_args.py +++ b/lib/ansible/parsing/mod_args.py @@ -19,14 +19,15 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems, string_types from ansible.errors import AnsibleParserError,AnsibleError +from ansible.module_utils.six import iteritems, string_types from ansible.module_utils._text import to_text from ansible.plugins import module_loader from ansible.parsing.splitter import parse_kv, split_args from ansible.template import Templar + # For filtering out modules correctly below RAW_PARAM_MODULES = ([ 'command', @@ -43,6 +44,7 @@ RAW_PARAM_MODULES = ([ 'meta', ]) + class ModuleArgsParser: """ diff --git a/lib/ansible/parsing/vault/__init__.py b/lib/ansible/parsing/vault/__init__.py index 9e88514277..ddcb7cfc8b 100644 --- a/lib/ansible/parsing/vault/__init__.py +++ b/lib/ansible/parsing/vault/__init__.py @@ -62,9 +62,9 @@ try: except ImportError: HAS_AES = False -from ansible.compat.six import PY3, binary_type -from ansible.compat.six.moves import zip from ansible.errors import AnsibleError +from ansible.module_utils.six import PY3, binary_type +from ansible.module_utils.six.moves import zip from ansible.module_utils._text import to_bytes, to_text try: diff --git a/lib/ansible/parsing/yaml/dumper.py b/lib/ansible/parsing/yaml/dumper.py index f04c3200f2..6060f1647c 100644 --- a/lib/ansible/parsing/yaml/dumper.py +++ b/lib/ansible/parsing/yaml/dumper.py @@ -20,8 +20,8 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import yaml -from ansible.compat.six import PY3 +from ansible.module_utils.six import PY3 from ansible.parsing.yaml.objects import AnsibleUnicode, AnsibleSequence, AnsibleMapping from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode from ansible.vars.hostvars import HostVars diff --git a/lib/ansible/parsing/yaml/objects.py b/lib/ansible/parsing/yaml/objects.py index 67aa2b9967..7c2726c445 100644 --- a/lib/ansible/parsing/yaml/objects.py +++ b/lib/ansible/parsing/yaml/objects.py @@ -21,7 +21,7 @@ __metaclass__ = type import yaml -from ansible.compat.six import text_type +from ansible.module_utils.six import text_type from ansible.module_utils._text import to_bytes diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py index 4e7525198e..bd4bef91b6 100644 --- a/lib/ansible/playbook/base.py +++ b/lib/ansible/playbook/base.py @@ -27,7 +27,7 @@ from functools import partial from jinja2.exceptions import UndefinedError -from ansible.compat.six import iteritems, string_types, with_metaclass +from ansible.module_utils.six import iteritems, string_types, with_metaclass from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable from ansible.module_utils._text import to_text from ansible.playbook.attribute import Attribute, FieldAttribute diff --git a/lib/ansible/playbook/conditional.py b/lib/ansible/playbook/conditional.py index ac342c9089..0681482e7d 100644 --- a/lib/ansible/playbook/conditional.py +++ b/lib/ansible/playbook/conditional.py @@ -25,12 +25,12 @@ import re from jinja2.compiler import generate from jinja2.exceptions import UndefinedError -from ansible.compat.six import text_type from ansible.errors import AnsibleError, AnsibleUndefinedVariable +from ansible.module_utils.six import text_type +from ansible.module_utils._text import to_native from ansible.playbook.attribute import FieldAttribute from ansible.template import Templar from ansible.template.safe_eval import safe_eval -from ansible.module_utils._text import to_native try: from __main__ import display @@ -38,6 +38,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + DEFINED_REGEX = re.compile(r'(hostvars\[.+\]|[\w_]+)\s+(not\s+is|is|is\s+not)\s+(defined|undefined)') LOOKUP_REGEX = re.compile(r'lookup\s*\(') VALID_VAR_REGEX = re.compile("^[_A-Za-z][_a-zA-Z0-9]*$") diff --git a/lib/ansible/playbook/helpers.py b/lib/ansible/playbook/helpers.py index 6c6e1151a0..7ded4c6540 100644 --- a/lib/ansible/playbook/helpers.py +++ b/lib/ansible/playbook/helpers.py @@ -21,8 +21,8 @@ __metaclass__ = type import os from ansible import constants as C -from ansible.compat.six import string_types from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable, AnsibleFileNotFound +from ansible.module_utils.six import string_types try: from __main__ import display diff --git a/lib/ansible/playbook/loop_control.py b/lib/ansible/playbook/loop_control.py index 78501a982f..cd7a9c7b59 100644 --- a/lib/ansible/playbook/loop_control.py +++ b/lib/ansible/playbook/loop_control.py @@ -21,11 +21,12 @@ __metaclass__ = type import itertools -from ansible.compat.six import string_types from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.playbook.attribute import FieldAttribute from ansible.playbook.base import Base + class LoopControl(Base): _loop_var = FieldAttribute(isa='str') diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index 429019cbb1..ce943f09a8 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -19,10 +19,10 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types from ansible import constants as C from ansible.errors import AnsibleParserError +from ansible.module_utils.six import string_types from ansible.playbook.attribute import FieldAttribute from ansible.playbook.base import Base diff --git a/lib/ansible/playbook/play_context.py b/lib/ansible/playbook/play_context.py index c77f0ff405..abe0e89adb 100644 --- a/lib/ansible/playbook/play_context.py +++ b/lib/ansible/playbook/play_context.py @@ -27,14 +27,15 @@ import random import re import string -from ansible.compat.six import iteritems, string_types -from ansible.compat.six.moves import shlex_quote from ansible import constants as C from ansible.errors import AnsibleError +from ansible.module_utils.six import iteritems, string_types +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes from ansible.playbook.attribute import FieldAttribute from ansible.playbook.base import Base + boolean = C.mk_boolean __all__ = ['PlayContext'] diff --git a/lib/ansible/playbook/playbook_include.py b/lib/ansible/playbook/playbook_include.py index 1b13efe0eb..8523d11f01 100644 --- a/lib/ansible/playbook/playbook_include.py +++ b/lib/ansible/playbook/playbook_include.py @@ -21,8 +21,8 @@ __metaclass__ = type import os -from ansible.compat.six import iteritems from ansible.errors import AnsibleParserError, AnsibleError +from ansible.module_utils.six import iteritems from ansible.parsing.splitter import split_args, parse_kv from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping from ansible.playbook.attribute import FieldAttribute @@ -31,6 +31,7 @@ from ansible.playbook.conditional import Conditional from ansible.playbook.taggable import Taggable from ansible.template import Templar + class PlaybookInclude(Base, Conditional, Taggable): _name = FieldAttribute(isa='string') diff --git a/lib/ansible/playbook/role/__init__.py b/lib/ansible/playbook/role/__init__.py index 5400a08119..e1e876c54f 100644 --- a/lib/ansible/playbook/role/__init__.py +++ b/lib/ansible/playbook/role/__init__.py @@ -22,8 +22,8 @@ __metaclass__ = type import collections import os -from ansible.compat.six import iteritems, binary_type, text_type from ansible.errors import AnsibleError, AnsibleParserError +from ansible.module_utils.six import iteritems, binary_type, text_type from ansible.playbook.attribute import FieldAttribute from ansible.playbook.base import Base from ansible.playbook.become import Become diff --git a/lib/ansible/playbook/role/definition.py b/lib/ansible/playbook/role/definition.py index 7fa8d0761c..306e78f47c 100644 --- a/lib/ansible/playbook/role/definition.py +++ b/lib/ansible/playbook/role/definition.py @@ -19,12 +19,11 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems, string_types - import os from ansible import constants as C from ansible.errors import AnsibleError +from ansible.module_utils.six import iteritems, string_types from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping from ansible.playbook.attribute import Attribute, FieldAttribute from ansible.playbook.base import Base diff --git a/lib/ansible/playbook/role/include.py b/lib/ansible/playbook/role/include.py index 78079b3813..5e6e451561 100644 --- a/lib/ansible/playbook/role/include.py +++ b/lib/ansible/playbook/role/include.py @@ -19,11 +19,10 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems, string_types - import os from ansible.errors import AnsibleError, AnsibleParserError +from ansible.module_utils.six import iteritems, string_types from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject from ansible.playbook.attribute import Attribute, FieldAttribute from ansible.playbook.role.definition import RoleDefinition diff --git a/lib/ansible/playbook/role/metadata.py b/lib/ansible/playbook/role/metadata.py index a2009c6f4b..50e104f4bc 100644 --- a/lib/ansible/playbook/role/metadata.py +++ b/lib/ansible/playbook/role/metadata.py @@ -21,9 +21,8 @@ __metaclass__ = type import os -from ansible.compat.six import iteritems, string_types - from ansible.errors import AnsibleParserError, AnsibleError +from ansible.module_utils.six import iteritems, string_types from ansible.playbook.attribute import Attribute, FieldAttribute from ansible.playbook.base import Base from ansible.playbook.helpers import load_list_of_roles diff --git a/lib/ansible/playbook/role/requirement.py b/lib/ansible/playbook/role/requirement.py index e41b6c37f9..55b2087793 100644 --- a/lib/ansible/playbook/role/requirement.py +++ b/lib/ansible/playbook/role/requirement.py @@ -19,16 +19,16 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types - import os import shutil import subprocess import tempfile from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.playbook.role.definition import RoleDefinition + __all__ = ['RoleRequirement'] diff --git a/lib/ansible/playbook/taggable.py b/lib/ansible/playbook/taggable.py index 3b8556010e..ed9dc2caa5 100644 --- a/lib/ansible/playbook/taggable.py +++ b/lib/ansible/playbook/taggable.py @@ -21,11 +21,12 @@ __metaclass__ = type import itertools -from ansible.compat.six import string_types from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.playbook.attribute import FieldAttribute from ansible.template import Templar + class Taggable: untagged = frozenset(['untagged']) diff --git a/lib/ansible/playbook/task.py b/lib/ansible/playbook/task.py index 43a1c9dd8e..f93e6d5096 100644 --- a/lib/ansible/playbook/task.py +++ b/lib/ansible/playbook/task.py @@ -21,8 +21,8 @@ __metaclass__ = type import os -from ansible.compat.six import iteritems, string_types from ansible.errors import AnsibleError, AnsibleParserError +from ansible.module_utils.six import iteritems, string_types from ansible.module_utils._text import to_native from ansible.parsing.mod_args import ModuleArgsParser from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping, AnsibleUnicode diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py index e7660a8496..a4372bdaa4 100644 --- a/lib/ansible/plugins/action/__init__.py +++ b/lib/ansible/plugins/action/__init__.py @@ -30,12 +30,12 @@ import time from abc import ABCMeta, abstractmethod from ansible import constants as C -from ansible.compat.six import binary_type, string_types, text_type, iteritems, with_metaclass -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError, AnsibleConnectionFailure from ansible.executor.module_common import modify_module, build_windows_module_payload -from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.json_utils import _filter_non_json_lines +from ansible.module_utils.six import binary_type, string_types, text_type, iteritems, with_metaclass +from ansible.module_utils.six.moves import shlex_quote +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.parsing.utils.jsonify import jsonify from ansible.playbook.play_context import MAGIC_VARIABLE_MAPPING from ansible.release import __version__ diff --git a/lib/ansible/plugins/action/add_host.py b/lib/ansible/plugins/action/add_host.py index b253c22865..c41c89d01e 100644 --- a/lib/ansible/plugins/action/add_host.py +++ b/lib/ansible/plugins/action/add_host.py @@ -20,11 +20,10 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types - +from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.plugins.action import ActionBase from ansible.parsing.utils.addresses import parse_address -from ansible.errors import AnsibleError try: from __main__ import display diff --git a/lib/ansible/plugins/action/debug.py b/lib/ansible/plugins/action/debug.py index f9f87adef5..2280b65615 100644 --- a/lib/ansible/plugins/action/debug.py +++ b/lib/ansible/plugins/action/debug.py @@ -18,8 +18,8 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types from ansible.errors import AnsibleUndefinedVariable +from ansible.module_utils.six import string_types from ansible.module_utils._text import to_text from ansible.plugins.action import ActionBase diff --git a/lib/ansible/plugins/action/eos.py b/lib/ansible/plugins/action/eos.py index 4aa1d39a88..631a1c1c8d 100644 --- a/lib/ansible/plugins/action/eos.py +++ b/lib/ansible/plugins/action/eos.py @@ -23,13 +23,13 @@ import os import sys import copy +from ansible.module_utils.basic import AnsibleFallbackNotFound +from ansible.module_utils.eos import eos_argument_spec +from ansible.module_utils.six import iteritems +from ansible.module_utils._text import to_bytes +from ansible.plugins import connection_loader from ansible.plugins.action.normal import ActionModule as _ActionModule from ansible.utils.path import unfrackpath -from ansible.plugins import connection_loader -from ansible.compat.six import iteritems -from ansible.module_utils.eos import eos_argument_spec -from ansible.module_utils.basic import AnsibleFallbackNotFound -from ansible.module_utils._text import to_bytes try: from __main__ import display @@ -37,6 +37,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + class ActionModule(_ActionModule): def run(self, tmp=None, task_vars=None): diff --git a/lib/ansible/plugins/action/include_vars.py b/lib/ansible/plugins/action/include_vars.py index 1f57e50604..f4559e436d 100644 --- a/lib/ansible/plugins/action/include_vars.py +++ b/lib/ansible/plugins/action/include_vars.py @@ -22,9 +22,10 @@ from os import path, walk import re from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.module_utils._text import to_native, to_text from ansible.plugins.action import ActionBase -from ansible.compat.six import string_types + class ActionModule(ActionBase): diff --git a/lib/ansible/plugins/action/ios.py b/lib/ansible/plugins/action/ios.py index 2a8a532c97..fc162cb79c 100644 --- a/lib/ansible/plugins/action/ios.py +++ b/lib/ansible/plugins/action/ios.py @@ -26,9 +26,9 @@ import copy from ansible.plugins.action.normal import ActionModule as _ActionModule from ansible.utils.path import unfrackpath from ansible.plugins import connection_loader -from ansible.compat.six import iteritems -from ansible.module_utils.ios import ios_argument_spec from ansible.module_utils.basic import AnsibleFallbackNotFound +from ansible.module_utils.ios import ios_argument_spec +from ansible.module_utils.six import iteritems from ansible.module_utils._text import to_bytes try: @@ -37,6 +37,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + class ActionModule(_ActionModule): def run(self, tmp=None, task_vars=None): diff --git a/lib/ansible/plugins/action/iosxr.py b/lib/ansible/plugins/action/iosxr.py index 83fb1d2f5b..f746de09e8 100644 --- a/lib/ansible/plugins/action/iosxr.py +++ b/lib/ansible/plugins/action/iosxr.py @@ -23,13 +23,13 @@ import os import sys import copy -from ansible.plugins.action.normal import ActionModule as _ActionModule -from ansible.module_utils._text import to_bytes -from ansible.utils.path import unfrackpath -from ansible.plugins import connection_loader -from ansible.compat.six import iteritems -from ansible.module_utils.iosxr import iosxr_argument_spec from ansible.module_utils.basic import AnsibleFallbackNotFound +from ansible.module_utils.iosxr import iosxr_argument_spec +from ansible.module_utils.six import iteritems +from ansible.module_utils._text import to_bytes +from ansible.plugins import connection_loader +from ansible.plugins.action.normal import ActionModule as _ActionModule +from ansible.utils.path import unfrackpath try: from __main__ import display diff --git a/lib/ansible/plugins/action/junos.py b/lib/ansible/plugins/action/junos.py index 8b0b975c97..ee2744c4e5 100644 --- a/lib/ansible/plugins/action/junos.py +++ b/lib/ansible/plugins/action/junos.py @@ -23,12 +23,12 @@ import os import sys import copy +from ansible.module_utils.basic import AnsibleFallbackNotFound +from ansible.module_utils.junos import junos_argument_spec +from ansible.module_utils.six import iteritems +from ansible.plugins import connection_loader, module_loader from ansible.plugins.action.normal import ActionModule as _ActionModule from ansible.utils.path import unfrackpath -from ansible.plugins import connection_loader, module_loader -from ansible.compat.six import iteritems -from ansible.module_utils.junos import junos_argument_spec -from ansible.module_utils.basic import AnsibleFallbackNotFound try: from __main__ import display @@ -36,6 +36,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + class ActionModule(_ActionModule): def run(self, tmp=None, task_vars=None): diff --git a/lib/ansible/plugins/action/nxos.py b/lib/ansible/plugins/action/nxos.py index 59d454c2b8..8c865c5c80 100644 --- a/lib/ansible/plugins/action/nxos.py +++ b/lib/ansible/plugins/action/nxos.py @@ -26,9 +26,9 @@ import copy from ansible.plugins.action.normal import ActionModule as _ActionModule from ansible.utils.path import unfrackpath from ansible.plugins import connection_loader -from ansible.compat.six import iteritems -from ansible.module_utils.nxos import nxos_argument_spec from ansible.module_utils.basic import AnsibleFallbackNotFound +from ansible.module_utils.nxos import nxos_argument_spec +from ansible.module_utils.six import iteritems from ansible.module_utils._text import to_bytes try: @@ -37,6 +37,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + class ActionModule(_ActionModule): def run(self, tmp=None, task_vars=None): diff --git a/lib/ansible/plugins/action/ops_template.py b/lib/ansible/plugins/action/ops_template.py index 944f4eab69..45cc9bb70c 100644 --- a/lib/ansible/plugins/action/ops_template.py +++ b/lib/ansible/plugins/action/ops_template.py @@ -21,10 +21,11 @@ __metaclass__ = type import json -from ansible.compat.six import string_types +from ansible.module_utils.six import string_types from ansible.plugins.action import ActionBase from ansible.plugins.action.net_template import ActionModule as NetActionModule + class ActionModule(NetActionModule, ActionBase): def run(self, tmp=None, task_vars=None): diff --git a/lib/ansible/plugins/action/set_fact.py b/lib/ansible/plugins/action/set_fact.py index 7bd7ec6455..7532e12ac2 100644 --- a/lib/ansible/plugins/action/set_fact.py +++ b/lib/ansible/plugins/action/set_fact.py @@ -18,12 +18,12 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems, string_types - from ansible.constants import mk_boolean as boolean +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase from ansible.utils.vars import isidentifier + class ActionModule(ActionBase): TRANSFERS_FILES = False diff --git a/lib/ansible/plugins/action/set_stats.py b/lib/ansible/plugins/action/set_stats.py index 13f866539e..f57a920321 100644 --- a/lib/ansible/plugins/action/set_stats.py +++ b/lib/ansible/plugins/action/set_stats.py @@ -18,11 +18,12 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems, string_types from ansible.constants import mk_boolean as boolean +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase from ansible.utils.vars import isidentifier + class ActionModule(ActionBase): TRANSFERS_FILES = False diff --git a/lib/ansible/plugins/action/template.py b/lib/ansible/plugins/action/template.py index 2bedf66c19..bd0bd39c1f 100644 --- a/lib/ansible/plugins/action/template.py +++ b/lib/ansible/plugins/action/template.py @@ -23,10 +23,9 @@ import pwd import time from ansible import constants as C -from ansible.compat.six import string_types from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.module_utils._text import to_bytes, to_native, to_text -from ansible.module_utils.pycompat24 import get_exception from ansible.plugins.action import ActionBase from ansible.utils.hashing import checksum_s @@ -45,8 +44,8 @@ class ActionModule(ActionBase): dest = os.path.join(dest, base) dest_stat = self._execute_remote_stat(dest, all_vars=all_vars, follow=False, tmp=tmp) - except AnsibleError: - return dict(failed=True, msg=to_native(get_exception())) + except AnsibleError as e: + return dict(failed=True, msg=to_native(e)) return dest_stat['checksum'] @@ -72,9 +71,9 @@ class ActionModule(ActionBase): else: try: source = self._find_needle('templates', source) - except AnsibleError: + except AnsibleError as e: result['failed'] = True - result['msg'] = to_native(get_exception()) + result['msg'] = to_native(e) if 'failed' in result: return result diff --git a/lib/ansible/plugins/action/vyos.py b/lib/ansible/plugins/action/vyos.py index 6e9c8cd8b1..2720d1fa90 100644 --- a/lib/ansible/plugins/action/vyos.py +++ b/lib/ansible/plugins/action/vyos.py @@ -26,10 +26,10 @@ import copy from ansible.plugins.action.normal import ActionModule as _ActionModule from ansible.utils.path import unfrackpath from ansible.plugins import connection_loader -from ansible.compat.six import iteritems -from ansible.module_utils.vyos import vyos_argument_spec from ansible.module_utils.basic import AnsibleFallbackNotFound +from ansible.module_utils.six import iteritems from ansible.module_utils._text import to_bytes +from ansible.module_utils.vyos import vyos_argument_spec try: from __main__ import display @@ -37,6 +37,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + class ActionModule(_ActionModule): def run(self, tmp=None, task_vars=None): diff --git a/lib/ansible/plugins/cache/__init__.py b/lib/ansible/plugins/cache/__init__.py index c288da0a56..6f4bb19f24 100644 --- a/lib/ansible/plugins/cache/__init__.py +++ b/lib/ansible/plugins/cache/__init__.py @@ -24,10 +24,10 @@ from abc import ABCMeta, abstractmethod from collections import MutableMapping from ansible import constants as C -from ansible.compat.six import with_metaclass from ansible.errors import AnsibleError -from ansible.plugins import cache_loader +from ansible.module_utils.six import with_metaclass from ansible.module_utils._text import to_bytes +from ansible.plugins import cache_loader try: from __main__ import display @@ -36,7 +36,6 @@ except ImportError: display = Display() - class BaseCacheModule(with_metaclass(ABCMeta, object)): # Backwards compat only. Just import the global display instead diff --git a/lib/ansible/plugins/callback/logentries.py b/lib/ansible/plugins/callback/logentries.py index 83af727350..da4c55bcac 100644 --- a/lib/ansible/plugins/callback/logentries.py +++ b/lib/ansible/plugins/callback/logentries.py @@ -61,7 +61,6 @@ import random import time import codecs import uuid -from ansible.compat.six.moves import configparser try: import certifi @@ -75,6 +74,7 @@ try: except ImportError: HAS_FLATDICT = False +from ansible.module_utils.six.moves import configparser from ansible.plugins.callback import CallbackBase diff --git a/lib/ansible/plugins/callback/mail.py b/lib/ansible/plugins/callback/mail.py index 68a43ab3f1..71d54073a4 100644 --- a/lib/ansible/plugins/callback/mail.py +++ b/lib/ansible/plugins/callback/mail.py @@ -24,7 +24,7 @@ import os import smtplib import json -from ansible.compat.six import string_types +from ansible.module_utils.six import string_types from ansible.module_utils._text import to_bytes from ansible.plugins.callback import CallbackBase diff --git a/lib/ansible/plugins/callback/profile_tasks.py b/lib/ansible/plugins/callback/profile_tasks.py index 644dd51748..2ebdd30834 100644 --- a/lib/ansible/plugins/callback/profile_tasks.py +++ b/lib/ansible/plugins/callback/profile_tasks.py @@ -27,12 +27,14 @@ import collections import os import time +from ansible.module_utils.six.moves import reduce from ansible.plugins.callback import CallbackBase -from ansible.compat.six.moves import reduce + # define start time t0 = tn = time.time() + def secondsToStr(t): # http://bytes.com/topic/python/answers/635958-handy-short-cut-formatting-elapsed-time-floating-point-seconds rediv = lambda ll, b: list(divmod(ll[0], b)) + ll[1:] diff --git a/lib/ansible/plugins/connection/__init__.py b/lib/ansible/plugins/connection/__init__.py index 9a606f679b..2286aea227 100644 --- a/lib/ansible/plugins/connection/__init__.py +++ b/lib/ansible/plugins/connection/__init__.py @@ -24,23 +24,21 @@ import gettext import os import shlex from abc import ABCMeta, abstractmethod, abstractproperty - from functools import wraps -from ansible.compat.six import with_metaclass from ansible import constants as C -from ansible.compat.six import string_types from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types, with_metaclass from ansible.module_utils._text import to_bytes, to_text from ansible.plugins import shell_loader - try: from __main__ import display except ImportError: from ansible.utils.display import Display display = Display() + __all__ = ['ConnectionBase', 'ensure_connect'] BUFSIZE = 65536 diff --git a/lib/ansible/plugins/connection/chroot.py b/lib/ansible/plugins/connection/chroot.py index 2c2c35341e..7304420c8f 100644 --- a/lib/ansible/plugins/connection/chroot.py +++ b/lib/ansible/plugins/connection/chroot.py @@ -26,9 +26,9 @@ import subprocess import traceback from ansible import constants as C -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError from ansible.module_utils.basic import is_executable +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes from ansible.plugins.connection import ConnectionBase, BUFSIZE diff --git a/lib/ansible/plugins/connection/docker.py b/lib/ansible/plugins/connection/docker.py index 8fe4d3f8a5..67dc5a3042 100644 --- a/lib/ansible/plugins/connection/docker.py +++ b/lib/ansible/plugins/connection/docker.py @@ -33,8 +33,8 @@ import re from distutils.version import LooseVersion import ansible.constants as C -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError, AnsibleFileNotFound +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes from ansible.plugins.connection import ConnectionBase, BUFSIZE diff --git a/lib/ansible/plugins/connection/jail.py b/lib/ansible/plugins/connection/jail.py index 5e54d95229..47c43000ca 100644 --- a/lib/ansible/plugins/connection/jail.py +++ b/lib/ansible/plugins/connection/jail.py @@ -26,8 +26,8 @@ import os.path import subprocess import traceback -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes from ansible.plugins.connection import ConnectionBase, BUFSIZE diff --git a/lib/ansible/plugins/connection/libvirt_lxc.py b/lib/ansible/plugins/connection/libvirt_lxc.py index 77f377eafb..9583eeda8a 100644 --- a/lib/ansible/plugins/connection/libvirt_lxc.py +++ b/lib/ansible/plugins/connection/libvirt_lxc.py @@ -27,8 +27,8 @@ import subprocess import traceback from ansible import constants as C -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes from ansible.plugins.connection import ConnectionBase, BUFSIZE diff --git a/lib/ansible/plugins/connection/local.py b/lib/ansible/plugins/connection/local.py index 481fce9866..abb7a0c4a4 100644 --- a/lib/ansible/plugins/connection/local.py +++ b/lib/ansible/plugins/connection/local.py @@ -38,8 +38,8 @@ import getpass import ansible.constants as C from ansible.compat import selectors -from ansible.compat.six import text_type, binary_type from ansible.errors import AnsibleError, AnsibleFileNotFound +from ansible.module_utils.six import text_type, binary_type from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.plugins.connection import ConnectionBase diff --git a/lib/ansible/plugins/connection/paramiko_ssh.py b/lib/ansible/plugins/connection/paramiko_ssh.py index d965dff121..9aa581183e 100644 --- a/lib/ansible/plugins/connection/paramiko_ssh.py +++ b/lib/ansible/plugins/connection/paramiko_ssh.py @@ -37,11 +37,10 @@ import re from termios import tcflush, TCIFLUSH from binascii import hexlify -from ansible.compat.six import iteritems - from ansible import constants as C -from ansible.compat.six.moves import input from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound +from ansible.module_utils.six import iteritems +from ansible.module_utils.six.moves import input from ansible.plugins.connection import ConnectionBase from ansible.utils.path import makedirs_safe from ansible.module_utils._text import to_bytes diff --git a/lib/ansible/plugins/connection/ssh.py b/lib/ansible/plugins/connection/ssh.py index 48cf065c15..e54a880dce 100644 --- a/lib/ansible/plugins/connection/ssh.py +++ b/lib/ansible/plugins/connection/ssh.py @@ -109,12 +109,12 @@ import time from functools import wraps from ansible import constants as C -from ansible.compat import selectors -from ansible.compat.six import PY3, text_type, binary_type -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound from ansible.errors import AnsibleOptionsError from ansible.module_utils.basic import BOOLEANS +from ansible.compat import selectors +from ansible.module_utils.six import PY3, text_type, binary_type +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.plugins.connection import ConnectionBase, BUFSIZE from ansible.utils.path import unfrackpath, makedirs_safe @@ -127,6 +127,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + SSHPASS_AVAILABLE = None diff --git a/lib/ansible/plugins/connection/winrm.py b/lib/ansible/plugins/connection/winrm.py index 4157cf82a7..aca000d640 100644 --- a/lib/ansible/plugins/connection/winrm.py +++ b/lib/ansible/plugins/connection/winrm.py @@ -37,12 +37,11 @@ try: except ImportError: pass -from ansible.compat.six import string_types -from ansible.compat.six.moves.urllib.parse import urlunsplit from ansible.errors import AnsibleError, AnsibleConnectionFailure from ansible.errors import AnsibleFileNotFound +from ansible.module_utils.six import string_types +from ansible.module_utils.six.moves.urllib.parse import urlunsplit from ansible.module_utils._text import to_bytes, to_native, to_text -from ansible.module_utils.pycompat24 import get_exception from ansible.plugins.connection import ConnectionBase from ansible.plugins.shell.powershell import exec_wrapper, become_wrapper, leaf_exec from ansible.utils.hashing import secure_hash @@ -52,14 +51,12 @@ try: import winrm from winrm import Response from winrm.protocol import Protocol -except ImportError: - e = get_exception() +except ImportError as e: raise AnsibleError("winrm or requests is not installed: %s" % str(e)) try: import xmltodict -except ImportError: - e = get_exception() +except ImportError as e: raise AnsibleError("xmltodict is not installed: %s" % str(e)) try: diff --git a/lib/ansible/plugins/connection/zone.py b/lib/ansible/plugins/connection/zone.py index b52ad41022..75fec60d91 100644 --- a/lib/ansible/plugins/connection/zone.py +++ b/lib/ansible/plugins/connection/zone.py @@ -28,10 +28,10 @@ import subprocess import traceback from ansible import constants as C -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError -from ansible.plugins.connection import ConnectionBase, BUFSIZE +from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes +from ansible.plugins.connection import ConnectionBase, BUFSIZE try: diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py index 6c8eb2c509..afc7efcfd3 100644 --- a/lib/ansible/plugins/filter/core.py +++ b/lib/ansible/plugins/filter/core.py @@ -19,21 +19,21 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -import sys import base64 +import crypt +import glob +import hashlib import itertools import json -import os.path import ntpath -import glob +import os.path import re -import crypt -import hashlib import string +import sys +import uuid +from datetime import datetime from functools import partial from random import Random, SystemRandom, shuffle -from datetime import datetime -import uuid import yaml from jinja2.filters import environmentfilter, do_groupby as _do_groupby @@ -45,9 +45,8 @@ except: HAS_PASSLIB = False from ansible import errors -from ansible.compat.six import iteritems, string_types, integer_types -from ansible.compat.six.moves import reduce -from ansible.compat.six.moves import shlex_quote +from ansible.module_utils.six import iteritems, string_types, integer_types +from ansible.module_utils.six.moves import reduce, shlex_quote from ansible.module_utils._text import to_bytes, to_text from ansible.parsing.yaml.dumper import AnsibleDumper from ansible.utils.hashing import md5s, checksum_s @@ -58,6 +57,7 @@ from ansible.vars.hostvars import HostVars UUID_NAMESPACE_ANSIBLE = uuid.UUID('361E6D51-FAEC-444A-9079-341386DA8E2E') + class AnsibleJSONEncoder(json.JSONEncoder): ''' Simple encoder class to deal with JSON encoding of internal diff --git a/lib/ansible/plugins/lookup/__init__.py b/lib/ansible/plugins/lookup/__init__.py index 61bbea4505..9df9ef20a4 100644 --- a/lib/ansible/plugins/lookup/__init__.py +++ b/lib/ansible/plugins/lookup/__init__.py @@ -21,7 +21,7 @@ __metaclass__ = type from abc import ABCMeta, abstractmethod -from ansible.compat.six import with_metaclass +from ansible.module_utils.six import with_metaclass try: from __main__ import display diff --git a/lib/ansible/plugins/lookup/first_found.py b/lib/ansible/plugins/lookup/first_found.py index 70095aa724..569a0ad055 100644 --- a/lib/ansible/plugins/lookup/first_found.py +++ b/lib/ansible/plugins/lookup/first_found.py @@ -122,10 +122,11 @@ import os from jinja2.exceptions import UndefinedError -from ansible.compat.six import string_types -from ansible.errors import AnsibleFileNotFound, AnsibleLookupError, AnsibleUndefinedVariable -from ansible.plugins.lookup import LookupBase from ansible.constants import mk_boolean as boolean +from ansible.errors import AnsibleFileNotFound, AnsibleLookupError, AnsibleUndefinedVariable +from ansible.module_utils.six import string_types +from ansible.plugins.lookup import LookupBase + class LookupModule(LookupBase): diff --git a/lib/ansible/plugins/lookup/flattened.py b/lib/ansible/plugins/lookup/flattened.py index 6616aa35c5..7c04b91bc0 100644 --- a/lib/ansible/plugins/lookup/flattened.py +++ b/lib/ansible/plugins/lookup/flattened.py @@ -17,11 +17,12 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.plugins.lookup import LookupBase from ansible.utils.listify import listify_lookup_plugin_terms + class LookupModule(LookupBase): def _check_list_of_one_list(self, term): diff --git a/lib/ansible/plugins/lookup/ini.py b/lib/ansible/plugins/lookup/ini.py index 78d187a1cc..7f67fe06ff 100644 --- a/lib/ansible/plugins/lookup/ini.py +++ b/lib/ansible/plugins/lookup/ini.py @@ -21,10 +21,10 @@ from io import StringIO import os import re -from ansible.compat.six.moves import configparser from ansible.errors import AnsibleError -from ansible.plugins.lookup import LookupBase +from ansible.module_utils.six.moves import configparser from ansible.module_utils._text import to_bytes, to_text +from ansible.plugins.lookup import LookupBase def _parse_params(term): diff --git a/lib/ansible/plugins/lookup/password.py b/lib/ansible/plugins/lookup/password.py index d9c10e6c2d..426efaeb7a 100644 --- a/lib/ansible/plugins/lookup/password.py +++ b/lib/ansible/plugins/lookup/password.py @@ -24,8 +24,8 @@ import string import random from ansible import constants as C -from ansible.compat.six import text_type from ansible.errors import AnsibleError +from ansible.module_utils.six import text_type from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.parsing.splitter import parse_kv from ansible.plugins.lookup import LookupBase diff --git a/lib/ansible/plugins/lookup/sequence.py b/lib/ansible/plugins/lookup/sequence.py index 9efa12b0d5..3f63d171c5 100644 --- a/lib/ansible/plugins/lookup/sequence.py +++ b/lib/ansible/plugins/lookup/sequence.py @@ -19,11 +19,12 @@ __metaclass__ = type from re import compile as re_compile, IGNORECASE -from ansible.compat.six.moves import xrange from ansible.errors import AnsibleError +from ansible.module_utils.six.moves import xrange from ansible.parsing.splitter import parse_kv from ansible.plugins.lookup import LookupBase + # shortcut format NUM = "(0?x?[0-9a-f]+)" SHORTCUT = re_compile( diff --git a/lib/ansible/plugins/lookup/subelements.py b/lib/ansible/plugins/lookup/subelements.py index 8e8c16b885..6ed44c0006 100644 --- a/lib/ansible/plugins/lookup/subelements.py +++ b/lib/ansible/plugins/lookup/subelements.py @@ -17,11 +17,12 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types +from ansible.constants import mk_boolean as boolean from ansible.errors import AnsibleError +from ansible.module_utils.six import string_types from ansible.plugins.lookup import LookupBase from ansible.utils.listify import listify_lookup_plugin_terms -from ansible.constants import mk_boolean as boolean + FLAGS = ('skip_missing',) diff --git a/lib/ansible/plugins/lookup/together.py b/lib/ansible/plugins/lookup/together.py index 130e75b92e..64bca90684 100644 --- a/lib/ansible/plugins/lookup/together.py +++ b/lib/ansible/plugins/lookup/together.py @@ -17,11 +17,12 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six.moves import zip_longest from ansible.errors import AnsibleError +from ansible.module_utils.six.moves import zip_longest from ansible.plugins.lookup import LookupBase from ansible.utils.listify import listify_lookup_plugin_terms + class LookupModule(LookupBase): """ Transpose a list of arrays: diff --git a/lib/ansible/plugins/lookup/url.py b/lib/ansible/plugins/lookup/url.py index e84dbe0ae7..2686543c30 100644 --- a/lib/ansible/plugins/lookup/url.py +++ b/lib/ansible/plugins/lookup/url.py @@ -18,8 +18,8 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six.moves.urllib.error import HTTPError, URLError from ansible.errors import AnsibleError +from ansible.module_utils.six.moves.urllib.error import HTTPError, URLError from ansible.module_utils._text import to_text from ansible.module_utils.urls import open_url, ConnectionError, SSLValidationError from ansible.plugins.lookup import LookupBase diff --git a/lib/ansible/plugins/shell/__init__.py b/lib/ansible/plugins/shell/__init__.py index 2e57c4249b..95f40cc52b 100644 --- a/lib/ansible/plugins/shell/__init__.py +++ b/lib/ansible/plugins/shell/__init__.py @@ -23,8 +23,8 @@ import ansible.constants as C import time import random -from ansible.compat.six import text_type -from ansible.compat.six.moves import shlex_quote +from ansible.module_utils.six import text_type +from ansible.module_utils.six.moves import shlex_quote _USER_HOME_PATH_RE = re.compile(r'^~[_.A-Za-z0-9][-_.A-Za-z0-9]*$') diff --git a/lib/ansible/plugins/shell/fish.py b/lib/ansible/plugins/shell/fish.py index c5746782d3..0e3a516d42 100644 --- a/lib/ansible/plugins/shell/fish.py +++ b/lib/ansible/plugins/shell/fish.py @@ -17,9 +17,9 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type +from ansible.module_utils.six import text_type +from ansible.module_utils.six.moves import shlex_quote from ansible.plugins.shell.sh import ShellModule as ShModule -from ansible.compat.six import text_type -from ansible.compat.six.moves import shlex_quote class ShellModule(ShModule): diff --git a/lib/ansible/plugins/shell/sh.py b/lib/ansible/plugins/shell/sh.py index e3d3f8f57f..fe7e6345fa 100644 --- a/lib/ansible/plugins/shell/sh.py +++ b/lib/ansible/plugins/shell/sh.py @@ -18,7 +18,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six.moves import shlex_quote +from ansible.module_utils.six.moves import shlex_quote from ansible.plugins.shell import ShellBase diff --git a/lib/ansible/plugins/strategy/__init__.py b/lib/ansible/plugins/strategy/__init__.py index b0b876df60..fa6746b194 100644 --- a/lib/ansible/plugins/strategy/__init__.py +++ b/lib/ansible/plugins/strategy/__init__.py @@ -27,14 +27,15 @@ from multiprocessing import Lock from jinja2.exceptions import UndefinedError from ansible import constants as C -from ansible.compat.six.moves import queue as Queue -from ansible.compat.six import iteritems, string_types from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable from ansible.executor import action_write_locks from ansible.executor.process.worker import WorkerProcess from ansible.executor.task_result import TaskResult from ansible.inventory.host import Host from ansible.inventory.group import Group +from ansible.module_utils.six.moves import queue as Queue +from ansible.module_utils.six import iteritems, string_types +from ansible.module_utils._text import to_text from ansible.playbook.helpers import load_list_of_blocks from ansible.playbook.included_file import IncludedFile from ansible.playbook.task_include import TaskInclude @@ -42,7 +43,6 @@ from ansible.playbook.role_include import IncludeRole from ansible.plugins import action_loader, connection_loader, filter_loader, lookup_loader, module_loader, test_loader from ansible.template import Templar from ansible.vars import combine_vars, strip_internal_keys -from ansible.module_utils._text import to_text try: diff --git a/lib/ansible/plugins/strategy/debug.py b/lib/ansible/plugins/strategy/debug.py index b37e9ada49..177655df6e 100644 --- a/lib/ansible/plugins/strategy/debug.py +++ b/lib/ansible/plugins/strategy/debug.py @@ -29,8 +29,8 @@ import cmd import pprint import sys +from ansible.module_utils.six.moves import reduce from ansible.plugins.strategy.linear import StrategyModule as LinearStrategyModule -from ansible.compat.six.moves import reduce try: from __main__ import display diff --git a/lib/ansible/plugins/strategy/linear.py b/lib/ansible/plugins/strategy/linear.py index 1c26ea312e..b21cb68df4 100644 --- a/lib/ansible/plugins/strategy/linear.py +++ b/lib/ansible/plugins/strategy/linear.py @@ -31,17 +31,16 @@ DOCUMENTATION: from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems - from ansible.errors import AnsibleError from ansible.executor.play_iterator import PlayIterator +from ansible.module_utils.six import iteritems +from ansible.module_utils._text import to_text from ansible.playbook.block import Block from ansible.playbook.included_file import IncludedFile from ansible.playbook.task import Task from ansible.plugins import action_loader from ansible.plugins.strategy import StrategyBase from ansible.template import Templar -from ansible.module_utils._text import to_text try: diff --git a/lib/ansible/plugins/terminal/__init__.py b/lib/ansible/plugins/terminal/__init__.py index b6798e3fa0..1daad69e4f 100644 --- a/lib/ansible/plugins/terminal/__init__.py +++ b/lib/ansible/plugins/terminal/__init__.py @@ -23,8 +23,8 @@ import re from abc import ABCMeta, abstractmethod -from ansible.compat.six import with_metaclass from ansible.errors import AnsibleConnectionFailure +from ansible.module_utils.six import with_metaclass class TerminalBase(with_metaclass(ABCMeta, object)): diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py index 61850f6734..8d5a807366 100644 --- a/lib/ansible/template/__init__.py +++ b/lib/ansible/template/__init__.py @@ -27,25 +27,25 @@ import re from io import StringIO from numbers import Number -from jinja2 import Environment -from jinja2.loaders import FileSystemLoader -from jinja2.exceptions import TemplateSyntaxError, UndefinedError -from jinja2.utils import concat as j2_concat, missing -from jinja2.runtime import Context, StrictUndefined -from ansible import constants as C -from ansible.compat.six import string_types, text_type -from ansible.errors import AnsibleError, AnsibleFilterError, AnsibleUndefinedVariable -from ansible.plugins import filter_loader, lookup_loader, test_loader -from ansible.template.safe_eval import safe_eval -from ansible.template.template import AnsibleJ2Template -from ansible.template.vars import AnsibleJ2Vars -from ansible.module_utils._text import to_native, to_text - try: from hashlib import sha1 except ImportError: from sha import sha as sha1 +from jinja2 import Environment +from jinja2.loaders import FileSystemLoader +from jinja2.exceptions import TemplateSyntaxError, UndefinedError +from jinja2.utils import concat as j2_concat, missing +from jinja2.runtime import Context, StrictUndefined + +from ansible import constants as C +from ansible.errors import AnsibleError, AnsibleFilterError, AnsibleUndefinedVariable +from ansible.module_utils.six import string_types, text_type +from ansible.module_utils._text import to_native, to_text +from ansible.plugins import filter_loader, lookup_loader, test_loader +from ansible.template.safe_eval import safe_eval +from ansible.template.template import AnsibleJ2Template +from ansible.template.vars import AnsibleJ2Vars try: from __main__ import display @@ -53,6 +53,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + __all__ = ['Templar'] # A regex for checking to see if a variable we're trying to diff --git a/lib/ansible/template/safe_eval.py b/lib/ansible/template/safe_eval.py index f2511e64e2..efe5600f5a 100644 --- a/lib/ansible/template/safe_eval.py +++ b/lib/ansible/template/safe_eval.py @@ -20,12 +20,12 @@ __metaclass__ = type import ast import sys -from ansible.compat.six import string_types -from ansible.compat.six.moves import builtins - from ansible import constants as C +from ansible.module_utils.six import string_types +from ansible.module_utils.six.moves import builtins from ansible.plugins import filter_loader, test_loader + def safe_eval(expr, locals={}, include_exceptions=False): ''' This is intended for allowing things like: diff --git a/lib/ansible/template/vars.py b/lib/ansible/template/vars.py index fc6140c297..bc36046a10 100644 --- a/lib/ansible/template/vars.py +++ b/lib/ansible/template/vars.py @@ -19,8 +19,9 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import iteritems from jinja2.utils import missing + +from ansible.module_utils.six import iteritems from ansible.module_utils._text import to_native diff --git a/lib/ansible/utils/cmd_functions.py b/lib/ansible/utils/cmd_functions.py index 8038af03d7..f41d430f23 100644 --- a/lib/ansible/utils/cmd_functions.py +++ b/lib/ansible/utils/cmd_functions.py @@ -24,9 +24,10 @@ import shlex import subprocess import select -from ansible.compat.six import PY2, PY3 +from ansible.module_utils.six import PY2, PY3 from ansible.module_utils._text import to_bytes + def run_cmd(cmd, live=False, readsize=10): #readsize = 10 diff --git a/lib/ansible/utils/helpers.py b/lib/ansible/utils/helpers.py index 02a60ee53a..488c3e2d96 100644 --- a/lib/ansible/utils/helpers.py +++ b/lib/ansible/utils/helpers.py @@ -19,7 +19,8 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.six import string_types +from ansible.module_utils.six import string_types + def pct_to_int(value, num_items, min_value=1): ''' diff --git a/lib/ansible/utils/listify.py b/lib/ansible/utils/listify.py index ad45521b8f..d84e62e154 100644 --- a/lib/ansible/utils/listify.py +++ b/lib/ansible/utils/listify.py @@ -21,13 +21,14 @@ __metaclass__ = type from collections import Iterable -from ansible.compat.six import string_types - +from ansible.module_utils.six import string_types from ansible.template import Templar from ansible.template.safe_eval import safe_eval + __all__ = ['listify_lookup_plugin_terms'] + def listify_lookup_plugin_terms(terms, templar, loader, fail_on_undefined=True, convert_bare=False): if isinstance(terms, string_types): diff --git a/lib/ansible/utils/plugin_docs.py b/lib/ansible/utils/plugin_docs.py index 9db68ad5a0..e13b2a6d15 100644 --- a/lib/ansible/utils/plugin_docs.py +++ b/lib/ansible/utils/plugin_docs.py @@ -25,7 +25,7 @@ import yaml from collections import MutableMapping, MutableSet, MutableSequence -from ansible.compat.six import string_types +from ansible.module_utils.six import string_types from ansible.parsing.yaml.loader import AnsibleLoader from ansible.plugins import fragment_loader @@ -35,6 +35,7 @@ except ImportError: from ansible.utils.display import Display display = Display() + # modules that are ok that they do not have documentation strings BLACKLIST = { 'MODULE': frozenset(('async_wrapper',)), diff --git a/lib/ansible/utils/shlex.py b/lib/ansible/utils/shlex.py index 1da7c66e58..5e82021bd5 100644 --- a/lib/ansible/utils/shlex.py +++ b/lib/ansible/utils/shlex.py @@ -20,7 +20,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import shlex -from ansible.compat.six import PY3 +from ansible.module_utils.six import PY3 from ansible.module_utils._text import to_bytes, to_text diff --git a/lib/ansible/utils/vars.py b/lib/ansible/utils/vars.py index fc9f5cf33a..b14bd41d77 100644 --- a/lib/ansible/utils/vars.py +++ b/lib/ansible/utils/vars.py @@ -26,18 +26,20 @@ import uuid from json import dumps from collections import MutableMapping -from ansible.compat.six import iteritems, string_types +from ansible.module_utils.six import iteritems, string_types from ansible import constants as C from ansible.errors import AnsibleError, AnsibleOptionsError from ansible.parsing.splitter import parse_kv from ansible.module_utils._text import to_native, to_text + _MAXSIZE = 2**32 cur_id = 0 node_mac = ("%012x" % uuid.getnode())[:12] random_int = ("%08x" % random.randint(0, _MAXSIZE))[:8] + def get_unique_id(): global cur_id cur_id += 1 diff --git a/lib/ansible/vars/__init__.py b/lib/ansible/vars/__init__.py index 0cfa4915cf..1c0b4997ea 100644 --- a/lib/ansible/vars/__init__.py +++ b/lib/ansible/vars/__init__.py @@ -24,19 +24,18 @@ import sys from collections import defaultdict, MutableMapping -from ansible.compat.six import iteritems -from jinja2.exceptions import UndefinedError - try: from hashlib import sha1 except ImportError: from sha import sha as sha1 +from jinja2.exceptions import UndefinedError + from ansible import constants as C from ansible.cli import CLI -from ansible.compat.six import string_types, text_type from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable, AnsibleFileNotFound from ansible.inventory.host import Host +from ansible.module_utils.six import iteritems, string_types, text_type from ansible.plugins import lookup_loader from ansible.plugins.cache import FactCache from ansible.template import Templar @@ -51,14 +50,17 @@ except ImportError: from ansible.utils.display import Display display = Display() -VARIABLE_CACHE = dict() -HOSTVARS_CACHE = dict() + +VARIABLE_CACHE = {} +HOSTVARS_CACHE = {} + class AnsibleInventoryVarsData(dict): def __init__(self, *args, **kwargs): super(AnsibleInventoryVarsData, self).__init__(*args, **kwargs) self.path = None + def preprocess_vars(a): ''' Ensures that vars contained in the parameter passed in are diff --git a/lib/ansible/vars/unsafe_proxy.py b/lib/ansible/vars/unsafe_proxy.py index 426410ab61..00702dba05 100644 --- a/lib/ansible/vars/unsafe_proxy.py +++ b/lib/ansible/vars/unsafe_proxy.py @@ -54,7 +54,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import json -from ansible.compat.six import string_types, text_type +from ansible.module_utils.six import string_types, text_type from ansible.module_utils._text import to_text diff --git a/test/sanity/code-smell/boilerplate.sh b/test/sanity/code-smell/boilerplate.sh index 5ed3bac57b..d5d71e1420 100755 --- a/test/sanity/code-smell/boilerplate.sh +++ b/test/sanity/code-smell/boilerplate.sh @@ -6,7 +6,7 @@ future1=$(find ./bin -type f -exec grep -HL 'from __future__ import (absolute_im metaclass2=$(find ./lib/ansible -path ./lib/ansible/modules -prune \ -o -path ./lib/ansible/modules/__init__.py \ -o -path ./lib/ansible/module_utils -prune \ - -o -path ./lib/ansible/compat/six/_six.py -prune \ + -o -path ./lib/ansible/module_utils/six/_six.py -prune \ -o -path ./lib/ansible/compat/selectors/_selectors2.py -prune \ -o -path ./lib/ansible/utils/module_docs_fragments -prune \ -o -name '*.py' -exec grep -HL '__metaclass__ = type' '{}' '+') @@ -14,7 +14,7 @@ metaclass2=$(find ./lib/ansible -path ./lib/ansible/modules -prune \ future2=$(find ./lib/ansible -path ./lib/ansible/modules -prune \ -o -path ./lib/ansible/modules/__init__.py \ -o -path ./lib/ansible/module_utils -prune \ - -o -path ./lib/ansible/compat/six/_six.py -prune \ + -o -path ./lib/ansible/module_utils/six/_six.py -prune \ -o -path ./lib/ansible/compat/selectors/_selectors2.py -prune \ -o -path ./lib/ansible/utils/module_docs_fragments -prune \ -o -name '*.py' -exec grep -HL 'from __future__ import (absolute_import, division, print_function)' '{}' '+') diff --git a/test/sanity/code-smell/no-basestring.sh b/test/sanity/code-smell/no-basestring.sh index c8d97e4910..ca2bbedc34 100755 --- a/test/sanity/code-smell/no-basestring.sh +++ b/test/sanity/code-smell/no-basestring.sh @@ -6,8 +6,7 @@ BASESTRING_USERS=$(grep -r basestring . \ | grep isinstance \ | grep -v \ -e test/results/ \ - -e lib/ansible/compat/six/_six.py \ - -e lib/ansible/module_utils/six.py \ + -e lib/ansible/module_utils/six/_six.py \ -e lib/ansible/modules/ \ -e '^[^:]*:#' ) diff --git a/test/sanity/code-smell/no-dict-iteritems.sh b/test/sanity/code-smell/no-dict-iteritems.sh index 9984c9c7bc..0335f2f11b 100755 --- a/test/sanity/code-smell/no-dict-iteritems.sh +++ b/test/sanity/code-smell/no-dict-iteritems.sh @@ -6,8 +6,7 @@ ITERITEMS_USERS=$(grep -rI '\.iteritems' . \ --exclude-dir docsite \ | grep -v \ -e 'six\.iteritems' \ - -e lib/ansible/compat/six/_six.py \ - -e lib/ansible/module_utils/six.py \ + -e lib/ansible/module_utils/six/_six.py \ -e test/sanity/code-smell/no-dict-iteritems.sh \ ) @@ -15,7 +14,6 @@ if [ "${ITERITEMS_USERS}" ]; then echo 'iteritems has been removed in python3. Alternatives:' echo ' for KEY, VALUE in DICT.items():' echo ' from ansible.module_utils.six import iteritems ; for KEY, VALUE in iteritems(DICT):' - echo ' from ansible.compat.six import iteritems ; for KEY, VALUE in iteritems(DICT):' echo "${ITERITEMS_USERS}" exit 1 fi diff --git a/test/sanity/code-smell/no-dict-itervalues.sh b/test/sanity/code-smell/no-dict-itervalues.sh index 7a7494860f..ed388125fa 100755 --- a/test/sanity/code-smell/no-dict-itervalues.sh +++ b/test/sanity/code-smell/no-dict-itervalues.sh @@ -6,8 +6,7 @@ ITERVALUES_USERS=$(grep -rI '\.itervalues' . \ --exclude-dir docsite \ | grep -v \ -e 'six\.itervalues' \ - -e lib/ansible/compat/six/_six.py \ - -e lib/ansible/module_utils/six.py \ + -e lib/ansible/module_utils/six/_six.py \ -e test/sanity/code-smell/no-dict-itervalues.sh \ ) @@ -15,7 +14,6 @@ if [ "${ITERVALUES_USERS}" ]; then echo 'itervalues has been removed in python3. Alternatives:' echo ' for VALUE in DICT.values():' echo ' from ansible.module_utils.six import itervalues ; for VALUE in itervalues(DICT):' - echo ' from ansible.compat.six import itervalues ; for VALUE in itervalues(DICT):' echo "${ITERVALUES_USERS}" exit 1 fi diff --git a/test/sanity/code-smell/no-iterkeys.sh b/test/sanity/code-smell/no-iterkeys.sh index 7323309ec8..2c53398e05 100755 --- a/test/sanity/code-smell/no-iterkeys.sh +++ b/test/sanity/code-smell/no-iterkeys.sh @@ -7,8 +7,7 @@ ITERKEYS_USERS=$(grep -r -I iterkeys . \ --exclude-dir docsite \ --exclude-dir results \ | grep -v \ - -e lib/ansible/compat/six/_six.py \ - -e lib/ansible/module_utils/six.py \ + -e lib/ansible/module_utils/six/_six.py \ -e test/sanity/code-smell/no-iterkeys.sh \ -e '^[^:]*:#' ) diff --git a/test/sanity/code-smell/replace-urlopen.sh b/test/sanity/code-smell/replace-urlopen.sh index 6bd0f6ee8c..a2ff60ba04 100755 --- a/test/sanity/code-smell/replace-urlopen.sh +++ b/test/sanity/code-smell/replace-urlopen.sh @@ -3,8 +3,7 @@ urllib_users=$(find . -name '*.py' -exec grep -H urlopen '{}' '+' | grep -v \ -e '^[^:]*/.tox/' \ -e '^\./lib/ansible/module_utils/urls.py:' \ - -e '^\./lib/ansible/module_utils/six.py:' \ - -e '^\./lib/ansible/compat/six/_six.py:' \ + -e '^\./lib/ansible/module_utils/six/_six.py:' \ -e '^[^:]*:#' ) diff --git a/test/sanity/code-smell/use-compat-six.sh b/test/sanity/code-smell/use-compat-six.sh index c77ad7c7ec..d81b8f4ca4 100755 --- a/test/sanity/code-smell/use-compat-six.sh +++ b/test/sanity/code-smell/use-compat-six.sh @@ -10,8 +10,8 @@ WHITELIST='(lib/ansible/modules/cloud/digital_ocean/digital_ocean.py)' SIX_USERS=$(find "$BASEDIR" -name '*.py' -exec grep -wH six '{}' '+' \ | grep import \ - | grep -v ansible.compat \ | grep -v ansible.module_utils.six \ + | grep -v 'ansible.module_utils import six' \ | egrep -v "^$WHITELIST:" ) diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt index 8dc3527ad8..f8836f4c00 100644 --- a/test/sanity/pep8/legacy-files.txt +++ b/test/sanity/pep8/legacy-files.txt @@ -57,8 +57,6 @@ lib/ansible/cli/pull.py lib/ansible/cli/vault.py lib/ansible/compat/__init__.py lib/ansible/compat/selectors/__init__.py -lib/ansible/compat/six/__init__.py -lib/ansible/compat/six/_six.py lib/ansible/compat/tests/__init__.py lib/ansible/constants.py lib/ansible/errors/__init__.py @@ -135,7 +133,7 @@ lib/ansible/module_utils/pycompat24.py lib/ansible/module_utils/redhat.py lib/ansible/module_utils/service.py lib/ansible/module_utils/shell.py -lib/ansible/module_utils/six.py +lib/ansible/module_utils/six/_six.py lib/ansible/module_utils/splitter.py lib/ansible/module_utils/sros.py lib/ansible/module_utils/univention_umc.py @@ -887,12 +885,9 @@ lib/ansible/plugins/action/copy.py lib/ansible/plugins/action/dellos10_config.py lib/ansible/plugins/action/dellos6_config.py lib/ansible/plugins/action/dellos9_config.py -lib/ansible/plugins/action/eos.py lib/ansible/plugins/action/eos_template.py lib/ansible/plugins/action/fetch.py lib/ansible/plugins/action/group_by.py -lib/ansible/plugins/action/include_vars.py -lib/ansible/plugins/action/ios.py lib/ansible/plugins/action/ios_template.py lib/ansible/plugins/action/iosxr_template.py lib/ansible/plugins/action/junos.py @@ -908,13 +903,11 @@ lib/ansible/plugins/action/patch.py lib/ansible/plugins/action/pause.py lib/ansible/plugins/action/script.py lib/ansible/plugins/action/service.py -lib/ansible/plugins/action/set_fact.py lib/ansible/plugins/action/set_stats.py lib/ansible/plugins/action/sros_config.py lib/ansible/plugins/action/synchronize.py lib/ansible/plugins/action/template.py lib/ansible/plugins/action/unarchive.py -lib/ansible/plugins/action/vyos.py lib/ansible/plugins/cache/__init__.py lib/ansible/plugins/cache/base.py lib/ansible/plugins/cache/jsonfile.py @@ -1056,7 +1049,6 @@ test/units/executor/test_task_result.py test/units/inventory/test_inventory.py test/units/mock/generator.py test/units/mock/loader.py -test/units/mock/yaml_helper.py test/units/module_utils/basic/test__log_invocation.py test/units/module_utils/basic/test_deprecate_warn.py test/units/module_utils/basic/test_exit_json.py diff --git a/test/units/cli/test_galaxy.py b/test/units/cli/test_galaxy.py index 0f1114536e..5df93901af 100644 --- a/test/units/cli/test_galaxy.py +++ b/test/units/cli/test_galaxy.py @@ -25,9 +25,9 @@ import tarfile import tempfile import yaml -from ansible.compat.six import PY3 from ansible.compat.tests import unittest from ansible.compat.tests.mock import call, patch +from ansible.module_utils.six import PY3 import ansible from ansible.errors import AnsibleError, AnsibleOptionsError diff --git a/test/units/executor/module_common/test_module_common.py b/test/units/executor/module_common/test_module_common.py index edbf836e10..0d7ff3e265 100644 --- a/test/units/executor/module_common/test_module_common.py +++ b/test/units/executor/module_common/test_module_common.py @@ -22,9 +22,9 @@ __metaclass__ = type import pytest import ansible.errors -from ansible.compat.six import PY2 from ansible.executor import module_common as amc +from ansible.module_utils.six import PY2 class TestStripComments(object): diff --git a/test/units/executor/module_common/test_recursive_finder.py b/test/units/executor/module_common/test_recursive_finder.py index aeb9ca13bd..a21a56ed1d 100644 --- a/test/units/executor/module_common/test_recursive_finder.py +++ b/test/units/executor/module_common/test_recursive_finder.py @@ -28,10 +28,10 @@ from io import BytesIO, StringIO import pytest import ansible.errors -from ansible.compat.six import PY2 -from ansible.compat.six.moves import builtins from ansible.executor.module_common import recursive_finder +from ansible.module_utils.six import PY2 +from ansible.module_utils.six.moves import builtins original_find_module = imp.find_module @@ -113,22 +113,22 @@ class TestRecursiveFinder(object): name = 'ping' data = b'#!/usr/bin/python\nfrom ansible.module_utils import six' recursive_finder(name, data, *finder_containers) - assert finder_containers.py_module_names == set((('six',),)) + assert finder_containers.py_module_names == set((('six', '__init__'), ('six', '_six'))) assert finder_containers.py_module_cache == {} - assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six.py',)) + assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/_six.py')) def test_import_six(self, finder_containers): name = 'ping' data = b'#!/usr/bin/python\nimport ansible.module_utils.six' recursive_finder(name, data, *finder_containers) - assert finder_containers.py_module_names == set((('six',),)) + assert finder_containers.py_module_names == set((('six', '__init__'), ('six', '_six'))) assert finder_containers.py_module_cache == {} - assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six.py',)) + assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/_six.py')) def test_import_six_from_many_submodules(self, finder_containers): name = 'ping' data = b'#!/usr/bin/python\nfrom ansible.module_utils.six.moves.urllib.parse import urlparse' recursive_finder(name, data, *finder_containers) - assert finder_containers.py_module_names == set((('six',),)) + assert finder_containers.py_module_names == set((('six', '__init__'), ('six', '_six'))) assert finder_containers.py_module_cache == {} - assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six.py',)) + assert frozenset(finder_containers.zf.namelist()) == frozenset(('ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/_six.py')) diff --git a/test/units/inventory/test_host.py b/test/units/inventory/test_host.py index c56956d77b..1a762d372b 100644 --- a/test/units/inventory/test_host.py +++ b/test/units/inventory/test_host.py @@ -18,11 +18,11 @@ # for __setstate__/__getstate__ tests import pickle -from ansible.compat.six import string_types from ansible.compat.tests import unittest from ansible.inventory.group import Group from ansible.inventory.host import Host +from ansible.module_utils.six import string_types class TestHost(unittest.TestCase): diff --git a/test/units/mock/procenv.py b/test/units/mock/procenv.py index 6cf69a7acc..a74b4f5c58 100644 --- a/test/units/mock/procenv.py +++ b/test/units/mock/procenv.py @@ -25,8 +25,8 @@ import json from contextlib import contextmanager from io import BytesIO, StringIO -from ansible.compat.six import PY3 from ansible.compat.tests import unittest +from ansible.module_utils.six import PY3 from ansible.module_utils._text import to_bytes diff --git a/test/units/mock/yaml_helper.py b/test/units/mock/yaml_helper.py index 280979e1c8..d74c903cbb 100644 --- a/test/units/mock/yaml_helper.py +++ b/test/units/mock/yaml_helper.py @@ -1,10 +1,10 @@ import io import yaml +from ansible.module_utils.six import PY3 from ansible.parsing.yaml.loader import AnsibleLoader from ansible.parsing.yaml.dumper import AnsibleDumper -from ansible.compat.six import PY3 class YamlTestUtils(object): """Mixin class to combine with a unittest.TestCase subclass.""" diff --git a/test/units/module_utils/basic/test_run_command.py b/test/units/module_utils/basic/test_run_command.py index b27b8cb2cd..2bfb6d17d6 100644 --- a/test/units/module_utils/basic/test_run_command.py +++ b/test/units/module_utils/basic/test_run_command.py @@ -27,7 +27,7 @@ from io import BytesIO, StringIO import pytest -from ansible.compat.six import PY3 +from ansible.module_utils.six import PY3 from ansible.compat.tests import unittest from ansible.compat.tests.mock import call, MagicMock, Mock, patch, sentinel diff --git a/test/units/module_utils/test_basic.py b/test/units/module_utils/test_basic.py index bb899e616a..526dca1c9c 100644 --- a/test/units/module_utils/test_basic.py +++ b/test/units/module_utils/test_basic.py @@ -29,9 +29,9 @@ from io import BytesIO, StringIO from units.mock.procenv import ModuleTestCase, swap_stdin_and_argv -from ansible.compat.six.moves import builtins from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, MagicMock, mock_open, Mock, call +from ansible.module_utils.six.moves import builtins realimport = builtins.__import__ diff --git a/test/units/module_utils/test_postgresql.py b/test/units/module_utils/test_postgresql.py index af6813f919..90fdb1dc9c 100644 --- a/test/units/module_utils/test_postgresql.py +++ b/test/units/module_utils/test_postgresql.py @@ -3,10 +3,10 @@ import sys from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, MagicMock -from ansible.compat.six.moves import builtins -from ansible.module_utils._text import to_native from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.six.moves import builtins +from ansible.module_utils._text import to_native from units.mock.procenv import swap_stdin_and_argv diff --git a/test/units/module_utils/test_text.py b/test/units/module_utils/test_text.py index 388d086b55..3026be9b3e 100644 --- a/test/units/module_utils/test_text.py +++ b/test/units/module_utils/test_text.py @@ -20,8 +20,8 @@ from __future__ import (absolute_import, division) __metaclass__ = type -from ansible.compat.six import PY3 from ansible.compat.tests import unittest +from ansible.module_utils.six import PY3 from units.mock.generator import add_method diff --git a/test/units/parsing/test_dataloader.py b/test/units/parsing/test_dataloader.py index 6b2fe23c45..40bfab5e95 100644 --- a/test/units/parsing/test_dataloader.py +++ b/test/units/parsing/test_dataloader.py @@ -19,12 +19,11 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from six import PY3 - from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, mock_open from ansible.errors import AnsibleParserError from ansible.errors import yaml_strings +from ansible.module_utils.six import PY3 from ansible.parsing.dataloader import DataLoader diff --git a/test/units/parsing/vault/test_vault.py b/test/units/parsing/vault/test_vault.py index cf95a90c84..d8720989ee 100644 --- a/test/units/parsing/vault/test_vault.py +++ b/test/units/parsing/vault/test_vault.py @@ -21,8 +21,6 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -import six - import binascii import io import os @@ -33,9 +31,10 @@ from nose.plugins.skip import SkipTest from ansible.compat.tests import unittest from ansible import errors +from ansible.module_utils import six +from ansible.module_utils._text import to_bytes, to_text from ansible.parsing.vault import VaultLib from ansible.parsing import vault -from ansible.module_utils._text import to_bytes, to_text # Counter import fails for 2.0.1, requires >= 2.6.1 from pip diff --git a/test/units/parsing/yaml/test_loader.py b/test/units/parsing/yaml/test_loader.py index dffb0b4875..1727fec2ee 100644 --- a/test/units/parsing/yaml/test_loader.py +++ b/test/units/parsing/yaml/test_loader.py @@ -22,12 +22,12 @@ __metaclass__ = type from io import StringIO -from six import text_type, binary_type from collections import Sequence, Set, Mapping from ansible.compat.tests import unittest from ansible import errors +from ansible.module_utils.six import text_type, binary_type from ansible.parsing.yaml.loader import AnsibleLoader from ansible.parsing import vault from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode diff --git a/test/units/playbook/test_base.py b/test/units/playbook/test_base.py index 862d659d3a..78d5e34e25 100644 --- a/test/units/playbook/test_base.py +++ b/test/units/playbook/test_base.py @@ -21,8 +21,8 @@ __metaclass__ = type from ansible.compat.tests import unittest -from ansible.compat.six import string_types from ansible.errors import AnsibleParserError +from ansible.module_utils.six import string_types from ansible.playbook.attribute import FieldAttribute from ansible.template import Templar from ansible.playbook import base diff --git a/test/units/playbook/test_play_context.py b/test/units/playbook/test_play_context.py index 8d4ddf1407..ce8322f4c4 100644 --- a/test/units/playbook/test_play_context.py +++ b/test/units/playbook/test_play_context.py @@ -25,9 +25,9 @@ from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, MagicMock from ansible import constants as C -from ansible.compat.six.moves import shlex_quote from ansible.cli import CLI from ansible.errors import AnsibleError, AnsibleParserError +from ansible.module_utils.six.moves import shlex_quote from ansible.playbook.play_context import PlayContext from units.mock.loader import DictDataLoader diff --git a/test/units/plugins/action/test_action.py b/test/units/plugins/action/test_action.py index 910d1192f4..13f2480c9f 100644 --- a/test/units/plugins/action/test_action.py +++ b/test/units/plugins/action/test_action.py @@ -23,18 +23,19 @@ __metaclass__ = type import os from ansible import constants as C -from ansible.compat.six import text_type -from ansible.compat.six.moves import shlex_quote, builtins from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, MagicMock, mock_open from ansible.errors import AnsibleError +from ansible.module_utils.six import text_type +from ansible.module_utils.six.moves import shlex_quote, builtins +from ansible.module_utils._text import to_bytes from ansible.playbook.play_context import PlayContext from ansible.plugins.action import ActionBase from ansible.template import Templar from units.mock.loader import DictDataLoader -from ansible.module_utils._text import to_bytes + python_module_replacers = b""" #!/usr/bin/python diff --git a/test/units/plugins/connection/test_ssh.py b/test/units/plugins/connection/test_ssh.py index 2b0703fa7b..c6470d5eed 100644 --- a/test/units/plugins/connection/test_ssh.py +++ b/test/units/plugins/connection/test_ssh.py @@ -29,8 +29,8 @@ from ansible.compat.tests.mock import patch, MagicMock, PropertyMock from ansible import constants as C from ansible.compat.selectors import SelectorKey, EVENT_READ -from ansible.compat.six.moves import shlex_quote from ansible.errors import AnsibleError, AnsibleConnectionFailure, AnsibleFileNotFound +from ansible.module_utils.six.moves import shlex_quote from ansible.playbook.play_context import PlayContext from ansible.plugins.connection import ssh from ansible.module_utils._text import to_bytes diff --git a/test/units/plugins/lookup/test_lastpass.py b/test/units/plugins/lookup/test_lastpass.py index 9918d488d7..fe5d60f8b8 100644 --- a/test/units/plugins/lookup/test_lastpass.py +++ b/test/units/plugins/lookup/test_lastpass.py @@ -19,15 +19,16 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -from ansible.compat.tests import unittest - -from ansible.plugins.lookup.lastpass import LookupModule, LPass, LPassException -from ansible.errors import AnsibleError from argparse import ArgumentParser -import six +from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch +from ansible.errors import AnsibleError +from ansible.module_utils import six +from ansible.plugins.lookup.lastpass import LookupModule, LPass, LPassException + + MOCK_ENTRIES = [{'username': 'user', 'name': 'Mock Entry', 'password': 't0pS3cret passphrase entry!', diff --git a/test/units/plugins/lookup/test_password.py b/test/units/plugins/lookup/test_password.py index 0fdffe99c5..08409270cf 100644 --- a/test/units/plugins/lookup/test_password.py +++ b/test/units/plugins/lookup/test_password.py @@ -23,11 +23,11 @@ __metaclass__ = type import passlib from passlib.handlers import pbkdf2 -from ansible.compat.six import text_type -from ansible.compat.six.moves import builtins from ansible.compat.tests import unittest from ansible.compat.tests.mock import mock_open, patch from ansible.errors import AnsibleError +from ansible.module_utils.six import text_type +from ansible.module_utils.six.moves import builtins from ansible.plugins import PluginLoader from ansible.utils import encrypt diff --git a/test/units/plugins/strategy/test_strategy_base.py b/test/units/plugins/strategy/test_strategy_base.py index 03f827df14..ba28c50a88 100644 --- a/test/units/plugins/strategy/test_strategy_base.py +++ b/test/units/plugins/strategy/test_strategy_base.py @@ -25,15 +25,15 @@ from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, MagicMock from ansible.errors import AnsibleError, AnsibleParserError -from ansible.plugins.strategy import StrategyBase from ansible.executor.process.worker import WorkerProcess from ansible.executor.task_queue_manager import TaskQueueManager from ansible.executor.task_result import TaskResult +from ansible.inventory.host import Host +from ansible.module_utils.six.moves import queue as Queue from ansible.playbook.block import Block from ansible.playbook.handler import Handler -from ansible.inventory.host import Host +from ansible.plugins.strategy import StrategyBase -from six.moves import queue as Queue from units.mock.loader import DictDataLoader class TestStrategyBase(unittest.TestCase): diff --git a/test/units/template/test_templar.py b/test/units/template/test_templar.py index 80d305a9a3..5cc6c229e2 100644 --- a/test/units/template/test_templar.py +++ b/test/units/template/test_templar.py @@ -23,10 +23,10 @@ from jinja2.runtime import Context from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch -from ansible.compat.six import string_types from ansible import constants as C from ansible.errors import AnsibleError, AnsibleUndefinedVariable +from ansible.module_utils.six import string_types from ansible.template import Templar, AnsibleContext, AnsibleEnvironment from ansible.vars.unsafe_proxy import AnsibleUnsafe, wrap_var #from ansible.unsafe_proxy import AnsibleUnsafe, wrap_var diff --git a/test/units/test_constants.py b/test/units/test_constants.py index 776d2b9a76..4ee003a080 100644 --- a/test/units/test_constants.py +++ b/test/units/test_constants.py @@ -26,8 +26,8 @@ import os import pytest from ansible import constants -from ansible.compat.six import StringIO -from ansible.compat.six.moves import configparser +from ansible.module_utils.six import StringIO +from ansible.module_utils.six.moves import configparser from ansible.module_utils._text import to_text diff --git a/test/units/vars/test_variable_manager.py b/test/units/vars/test_variable_manager.py index b2397d6cf2..d2bcde8bb1 100644 --- a/test/units/vars/test_variable_manager.py +++ b/test/units/vars/test_variable_manager.py @@ -21,11 +21,11 @@ __metaclass__ = type from collections import defaultdict -from ansible.compat.six import iteritems -from ansible.compat.six.moves import builtins from ansible.compat.tests import unittest from ansible.compat.tests.mock import MagicMock, mock_open, patch from ansible.inventory import Inventory +from ansible.module_utils.six import iteritems +from ansible.module_utils.six.moves import builtins from ansible.playbook.play import Play from units.mock.loader import DictDataLoader