Update collections.abc imports (#79911)

* Update `collections.abc` imports

- Use `six.moves` for modules and module_utils
- Use `collections.abc` for controller code

This avoids using `ansible.module_utils.common._collections_compat`,
which was added before the vendored `six` was updated to provide these
imports.

* Update _collections_compat to use six.moves

Also update the custom pylint rule to reflect this change.
pull/79914/head
Matt Clay 3 years ago committed by GitHub
parent e658995760
commit 379058e10f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,6 @@
minor_changes:
- Use ``ansible.module_utils.six.moves.collections_abc`` instead of ``ansible.module_utils.common._collections_compat``
in modules and module_utils.
- Use ``collections.abc`` instead of ``ansible.module_utils.common._collections_compat`` in controller code.
- ansible-test - Update the ``ansible-bad-import-from`` rule in the ``pylint`` sanity test to recommend
``ansible.module_utils.six.moves.collections_abc`` instead of ``ansible.module_utils.common._collections_compat``.

@ -137,7 +137,7 @@ except Exception:
except Exception: except Exception:
pass pass
from ansible.module_utils.common._collections_compat import ( from ansible.module_utils.six.moves.collections_abc import (
KeysView, KeysView,
Mapping, MutableMapping, Mapping, MutableMapping,
Sequence, MutableSequence, Sequence, MutableSequence,

@ -2,45 +2,27 @@
# Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause) # Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
"""Collections ABC import shim. """Collections ABC import shim.
This module is intended only for internal use. Use `ansible.module_utils.six.moves.collections_abc` instead, which has been available since ansible-core 2.11.
It will go away once the bundled copy of six includes equivalent functionality. This module exists only for backwards compatibility.
Third parties should not use this.
""" """
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
__metaclass__ = type __metaclass__ = type
try: # Although this was originally intended for internal use only, it has wide adoption in collections.
"""Python 3.3+ branch.""" # This is due in part to sanity tests previously recommending its use over `collections` imports.
from collections.abc import ( # pylint: disable=unused-import from ansible.module_utils.six.moves.collections_abc import ( # pylint: disable=unused-import
MappingView, MappingView,
ItemsView, ItemsView,
KeysView, KeysView,
ValuesView, ValuesView,
Mapping, MutableMapping, Mapping, MutableMapping,
Sequence, MutableSequence, Sequence, MutableSequence,
Set, MutableSet, Set, MutableSet,
Container, Container,
Hashable, Hashable,
Sized, Sized,
Callable, Callable,
Iterable, Iterable,
Iterator, Iterator,
) )
except ImportError:
"""Use old lib location under 2.6-3.2."""
from collections import ( # type: ignore[no-redef,attr-defined] # pylint: disable=deprecated-class
MappingView,
ItemsView,
KeysView,
ValuesView,
Mapping, MutableMapping,
Sequence, MutableSequence,
Set, MutableSet,
Container,
Hashable,
Sized,
Callable,
Iterable,
Iterator,
)

@ -8,7 +8,7 @@ __metaclass__ = type
from ansible.module_utils.six import binary_type, text_type from ansible.module_utils.six import binary_type, text_type
from ansible.module_utils.common._collections_compat import Hashable, Mapping, MutableMapping, Sequence # pylint: disable=unused-import from ansible.module_utils.six.moves.collections_abc import Hashable, Mapping, MutableMapping, Sequence # pylint: disable=unused-import
class ImmutableDict(Hashable, Mapping): class ImmutableDict(Hashable, Mapping):

@ -10,7 +10,7 @@ __metaclass__ = type
import re import re
from copy import deepcopy from copy import deepcopy
from ansible.module_utils.common._collections_compat import MutableMapping from ansible.module_utils.six.moves.collections_abc import MutableMapping
def camel_dict_to_snake_dict(camel_dict, reversible=False, ignore_list=()): def camel_dict_to_snake_dict(camel_dict, reversible=False, ignore_list=()):

@ -11,7 +11,7 @@ import json
import datetime import datetime
from ansible.module_utils._text import to_text from ansible.module_utils._text import to_text
from ansible.module_utils.common._collections_compat import Mapping from ansible.module_utils.six.moves.collections_abc import Mapping
from ansible.module_utils.common.collections import is_sequence from ansible.module_utils.common.collections import is_sequence

@ -32,7 +32,7 @@ from ansible.module_utils.errors import (
) )
from ansible.module_utils.parsing.convert_bool import BOOLEANS_FALSE, BOOLEANS_TRUE from ansible.module_utils.parsing.convert_bool import BOOLEANS_FALSE, BOOLEANS_TRUE
from ansible.module_utils.common._collections_compat import ( from ansible.module_utils.six.moves.collections_abc import (
KeysView, KeysView,
Set, Set,
Sequence, Sequence,

@ -10,7 +10,7 @@ import codecs
import datetime import datetime
import json import json
from ansible.module_utils.common._collections_compat import Set from ansible.module_utils.six.moves.collections_abc import Set
from ansible.module_utils.six import ( from ansible.module_utils.six import (
PY3, PY3,
binary_type, binary_type,

@ -25,7 +25,7 @@ import socket
import sys import sys
import time import time
from collections import namedtuple from collections import namedtuple
from ansible.module_utils.common._collections_compat import Mapping from ansible.module_utils.six.moves.collections_abc import Mapping
try: try:
monotonic = time.monotonic monotonic = time.monotonic

@ -445,7 +445,7 @@ from ansible.module_utils.basic import AnsibleModule, sanitize_keys
from ansible.module_utils.six import PY2, PY3, binary_type, iteritems, string_types from ansible.module_utils.six import PY2, PY3, binary_type, iteritems, string_types
from ansible.module_utils.six.moves.urllib.parse import urlencode, urlsplit from ansible.module_utils.six.moves.urllib.parse import urlencode, urlsplit
from ansible.module_utils._text import to_native, to_text from ansible.module_utils._text import to_native, to_text
from ansible.module_utils.common._collections_compat import Mapping, Sequence from ansible.module_utils.six.moves.collections_abc import Mapping, Sequence
from ansible.module_utils.urls import fetch_url, get_response_filename, parse_content_type, prepare_multipart, url_argument_spec from ansible.module_utils.urls import fetch_url, get_response_filename, parse_content_type, prepare_multipart, url_argument_spec
JSON_CANDIDATES = {'json', 'javascript'} JSON_CANDIDATES = {'json', 'javascript'}

@ -24,10 +24,11 @@ import re
import shlex import shlex
import time import time
from collections.abc import Mapping, Sequence
from ansible.errors import AnsibleError from ansible.errors import AnsibleError
from ansible.module_utils._text import to_native from ansible.module_utils._text import to_native
from ansible.module_utils.six import text_type, string_types from ansible.module_utils.six import text_type, string_types
from ansible.module_utils.common._collections_compat import Mapping, Sequence
from ansible.plugins import AnsiblePlugin from ansible.plugins import AnsiblePlugin
_USER_HOME_PATH_RE = re.compile(r'^~[_.A-Za-z0-9][-_.A-Za-z0-9]*$') _USER_HOME_PATH_RE = re.compile(r'^~[_.A-Za-z0-9][-_.A-Za-z0-9]*$')

@ -32,7 +32,8 @@ RETURN = """
version_added: 1.0.0 version_added: 1.0.0
""" """
from ansible.module_utils.common._collections_compat import Sequence from collections.abc import Sequence
from ansible.plugins.lookup import LookupBase from ansible.plugins.lookup import LookupBase
from ansible.errors import AnsibleError from ansible.errors import AnsibleError

@ -94,10 +94,7 @@ class AnsibleUnwantedChecker(BaseChecker):
)), )),
# see https://docs.python.org/3/library/collections.abc.html # see https://docs.python.org/3/library/collections.abc.html
collections=UnwantedEntry('ansible.module_utils.common._collections_compat', collections=UnwantedEntry('ansible.module_utils.six.moves.collections_abc',
ignore_paths=(
'/lib/ansible/module_utils/common/_collections_compat.py',
),
names=( names=(
'MappingView', 'MappingView',
'ItemsView', 'ItemsView',

@ -37,7 +37,7 @@ import json
from itertools import chain from itertools import chain
from ansible.module_utils._text import to_text, to_bytes from ansible.module_utils._text import to_text, to_bytes
from ansible.module_utils.common._collections_compat import Mapping from ansible.module_utils.six.moves.collections_abc import Mapping
from ansible.module_utils.six import iteritems, string_types from ansible.module_utils.six import iteritems, string_types
from ansible.module_utils import basic from ansible.module_utils import basic
from ansible.module_utils.parsing.convert_bool import boolean from ansible.module_utils.parsing.convert_bool import boolean

@ -37,7 +37,7 @@ import json
from itertools import chain from itertools import chain
from ansible.module_utils._text import to_text, to_bytes from ansible.module_utils._text import to_text, to_bytes
from ansible.module_utils.common._collections_compat import Mapping from ansible.module_utils.six.moves.collections_abc import Mapping
from ansible.module_utils.six import iteritems, string_types from ansible.module_utils.six import iteritems, string_types
from ansible.module_utils import basic from ansible.module_utils import basic
from ansible.module_utils.parsing.convert_bool import boolean from ansible.module_utils.parsing.convert_bool import boolean

@ -42,7 +42,6 @@ MODULE_UTILS_BASIC_FILES = frozenset(('ansible/__init__.py',
'ansible/module_utils/basic.py', 'ansible/module_utils/basic.py',
'ansible/module_utils/six/__init__.py', 'ansible/module_utils/six/__init__.py',
'ansible/module_utils/_text.py', 'ansible/module_utils/_text.py',
'ansible/module_utils/common/_collections_compat.py',
'ansible/module_utils/common/_json_compat.py', 'ansible/module_utils/common/_json_compat.py',
'ansible/module_utils/common/collections.py', 'ansible/module_utils/common/collections.py',
'ansible/module_utils/common/parameters.py', 'ansible/module_utils/common/parameters.py',

@ -9,7 +9,7 @@ __metaclass__ = type
import pytest import pytest
from ansible.module_utils.six import Iterator from ansible.module_utils.six import Iterator
from ansible.module_utils.common._collections_compat import Sequence from ansible.module_utils.six.moves.collections_abc import Sequence
from ansible.module_utils.common.collections import ImmutableDict, is_iterable, is_sequence from ansible.module_utils.common.collections import ImmutableDict, is_iterable, is_sequence

@ -13,7 +13,7 @@ import pytest
import ansible.module_utils.basic import ansible.module_utils.basic
from ansible.module_utils.six import PY3, string_types from ansible.module_utils.six import PY3, string_types
from ansible.module_utils._text import to_bytes from ansible.module_utils._text import to_bytes
from ansible.module_utils.common._collections_compat import MutableMapping from ansible.module_utils.six.moves.collections_abc import MutableMapping
@pytest.fixture @pytest.fixture

@ -10,7 +10,7 @@ import pytest
from ansible.module_utils.six import string_types from ansible.module_utils.six import string_types
from ansible.module_utils._text import to_bytes from ansible.module_utils._text import to_bytes
from ansible.module_utils.common._collections_compat import MutableMapping from ansible.module_utils.six.moves.collections_abc import MutableMapping
@pytest.fixture @pytest.fixture

Loading…
Cancel
Save