Replace ansible.module_utils.six with own module utils in some cases (#1138)

* Replace ansible.module_utils.six with own module utils in some cases.

* Add ignore.txt entires.
This commit is contained in:
Felix Fontein 2025-10-04 23:45:27 +02:00 committed by GitHub
parent 82b49c7cf2
commit ebe42308cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
43 changed files with 149 additions and 70 deletions

18
LICENSES/MIT.txt Normal file
View File

@ -0,0 +1,18 @@
Copyright (c) 2010-2024 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.

View File

@ -160,5 +160,6 @@ This collection is primarily licensed and distributed as a whole under the GNU G
See [LICENSES/GPL-3.0-or-later.txt](https://github.com/ansible-collections/community.docker/blob/main/COPYING) for the full text.
Parts of the collection are licensed under the [Apache 2.0 license](https://github.com/ansible-collections/community.docker/blob/main/LICENSES/Apache-2.0.txt). This mostly applies to files vendored from the [Docker SDK for Python](https://github.com/docker/docker-py/).
Also `plugins/module_utils/_six.py` is licensed under the [MIT license](https://github.com/ansible-collections/community.dns/blob/main/LICENSES/MIT.txt).
All files have a machine readable `SDPX-License-Identifier:` comment denoting its respective license(s) or an equivalent entry in an accompanying `.license` file. Only changelog fragments (which will not be part of a release) are covered by a blanket statement in `REUSE.toml`. This conforms to the [REUSE specification](https://reuse.software/spec/).

View File

@ -0,0 +1,4 @@
bugfixes:
- "Avoid usage of deprecated ``ansible.module_utils.six`` in some of the code that still supports Python 2 (https://github.com/ansible-collections/community.docker/pull/1138)."
minor_changes:
- "Note that some new code in ``plugins/module_utils/_six.py`` is MIT licensed (https://github.com/ansible-collections/community.docker/pull/1138)."

View File

@ -15,6 +15,7 @@ description: Modules and plugins for working with Docker
license:
- GPL-3.0-or-later
- Apache-2.0
- MIT
# license_file: COPYING
tags:
- docker

View File

@ -12,7 +12,7 @@ __metaclass__ = type
import traceback
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
REQUESTS_IMPORT_ERROR = None

View File

@ -15,7 +15,7 @@ import logging
import struct
from functools import partial
from ansible.module_utils.six import PY3, binary_type, iteritems, string_types, raise_from
from ansible_collections.community.docker.plugins.module_utils._six import PY3, binary_type, iteritems, string_types, raise_from
from ansible.module_utils.six.moves.urllib.parse import quote
from .. import auth

View File

@ -14,7 +14,7 @@ import base64
import json
import logging
from ansible.module_utils.six import iteritems, string_types
from ansible_collections.community.docker.plugins.module_utils._six import iteritems, string_types
from . import errors
from .credentials.store import Store

View File

@ -13,7 +13,7 @@ __metaclass__ = type
import json
import os
from ansible.module_utils.six import raise_from
from ansible_collections.community.docker.plugins.module_utils._six import raise_from
from .. import errors

View File

@ -14,7 +14,7 @@ import json
import os
from shutil import copyfile, rmtree
from ansible.module_utils.six import raise_from
from ansible_collections.community.docker.plugins.module_utils._six import raise_from
from ..errors import ContextException
from ..tls import TLSConfig

View File

@ -14,7 +14,7 @@ import errno
import json
import subprocess
from ansible.module_utils.six import PY3, binary_type
from ansible_collections.community.docker.plugins.module_utils._six import PY3, binary_type
from . import constants
from . import errors

View File

@ -13,7 +13,7 @@ __metaclass__ = type
import os
import sys
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
if PY2:
from distutils.spawn import find_executable as which

View File

@ -13,7 +13,7 @@ __metaclass__ = type
from ._import_helper import HTTPError as _HTTPError
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import raise_from
from ansible_collections.community.docker.plugins.module_utils._six import raise_from
class DockerException(Exception):

View File

@ -15,7 +15,7 @@ import io
import time
import traceback
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
PYWIN32_IMPORT_ERROR = None
try:

View File

@ -17,7 +17,7 @@ import socket
import subprocess
import traceback
from ansible.module_utils.six import PY3
from ansible_collections.community.docker.plugins.module_utils._six import PY3
from ansible.module_utils.six.moves.queue import Empty
from ansible.module_utils.six.moves.urllib_parse import urlparse

View File

@ -12,7 +12,7 @@ __metaclass__ = type
import socket
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
from .basehttpadapter import BaseHTTPAdapter
from .. import constants

View File

@ -17,7 +17,7 @@ import re
import tarfile
import tempfile
from ansible.module_utils.six import PY3
from ansible_collections.community.docker.plugins.module_utils._six import PY3
from . import fnmatch
from ..constants import IS_WINDOWS_PLATFORM, WINDOWS_LONGPATH_PREFIX

View File

@ -13,7 +13,7 @@ __metaclass__ = type
import json
import json.decoder
from ansible.module_utils.six import text_type
from ansible_collections.community.docker.plugins.module_utils._six import text_type
from ..errors import StreamParseError

View File

@ -16,7 +16,7 @@ import select
import socket as pysocket
import struct
from ansible.module_utils.six import PY3, binary_type
from ansible_collections.community.docker.plugins.module_utils._six import PY3, binary_type
from ..transport.npipesocket import NpipeSocket

View File

@ -19,7 +19,7 @@ import shlex
import string
from ansible_collections.community.docker.plugins.module_utils.version import StrictVersion
from ansible.module_utils.six import PY2, PY3, binary_type, integer_types, iteritems, string_types, text_type
from ansible_collections.community.docker.plugins.module_utils._six import PY2, PY3, binary_type, integer_types, iteritems, string_types, text_type
from .. import errors
from ..constants import DEFAULT_HTTP_HOST

View File

@ -9,7 +9,7 @@ import base64
import random
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
def generate_insecure_key():

View File

@ -0,0 +1,88 @@
# This code is strewn with things that are not defined on Python3 (unicode,
# long, etc) but they are all shielded by version checks. This is also an
# upstream vendored file that we're not going to modify on our own
# pylint: disable=undefined-variable
#
# Copyright (c) 2010-2024 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.
# Extracted from https://github.com/benjaminp/six/blob/7d2a0e96602b83cd082896c8c224a87f1efe2111/six.py
# SPDX-License-Identifier: MIT
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import sys as _sys
# Useful for very coarse version differentiation.
PY2 = _sys.version_info[0] == 2
PY3 = _sys.version_info[0] > 2
if PY3:
string_types = (str,)
integer_types = (int,)
binary_type = bytes
text_type = str
def iteritems(d):
return d.items()
else:
string_types = (basestring,) # noqa: F821, pylint: disable=undefined-variable
integer_types = (int, long) # noqa: F821, pylint: disable=undefined-variable
binary_type = str
text_type = unicode # noqa: F821, pylint: disable=undefined-variable
def iteritems(d):
return d.iteritems()
if PY3:
import builtins as _builtins
getattr(_builtins, "exec")("""def raise_from(value, from_value):
try:
raise value from from_value
finally:
value = None
""")
else:
def raise_from(value, from_value):
raise value
def add_metaclass(metaclass):
"""Class decorator for creating a class with a metaclass."""
def wrapper(cls):
orig_vars = cls.__dict__.copy()
slots = orig_vars.get('__slots__')
if slots is not None:
if isinstance(slots, str):
slots = [slots]
for slots_var in slots:
orig_vars.pop(slots_var)
orig_vars.pop('__dict__', None)
orig_vars.pop('__weakref__', None)
if hasattr(cls, '__qualname__'):
orig_vars['__qualname__'] = cls.__qualname__
return metaclass(cls.__name__, cls.__bases__, orig_vars)
return wrapper

View File

@ -15,7 +15,7 @@ import traceback
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
from ansible.module_utils.six.moves.collections_abc import Mapping, Sequence
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible.module_utils.parsing.convert_bool import BOOLEANS_TRUE, BOOLEANS_FALSE
from ansible_collections.community.docker.plugins.module_utils.version import LooseVersion

View File

@ -13,7 +13,7 @@ import re
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
from ansible.module_utils.six.moves.collections_abc import Mapping, Sequence
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible.module_utils.parsing.convert_bool import BOOLEANS_TRUE, BOOLEANS_FALSE
from ansible_collections.community.docker.plugins.module_utils.version import LooseVersion

View File

@ -13,7 +13,7 @@ import shlex
from ansible.module_utils.basic import AnsibleModule, env_fallback
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils.version import LooseVersion

View File

@ -17,7 +17,7 @@ from collections import namedtuple
from ansible.module_utils.basic import missing_required_lib
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible.module_utils.six.moves import shlex_quote
from ansible_collections.community.docker.plugins.module_utils.util import DockerBaseClass

View File

@ -16,7 +16,7 @@ import stat
import tarfile
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.module_utils.six import raise_from
from ansible_collections.community.docker.plugins.module_utils._six import raise_from
from ansible_collections.community.docker.plugins.module_utils._api.errors import APIError, NotFound

View File

@ -15,7 +15,7 @@ from functools import partial
from ansible.module_utils.common.text.converters import to_native, to_text
from ansible.module_utils.common.text.formatters import human_to_bytes
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils.util import (
clean_dict_booleans_for_docker_api,

View File

@ -11,7 +11,7 @@ import os.path
import socket as pysocket
import struct
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
from ansible_collections.community.docker.plugins.module_utils._api.utils import socket as docker_socket

View File

@ -11,7 +11,7 @@ import os
import os.path
import socket as pysocket
from ansible.module_utils.six import PY2
from ansible_collections.community.docker.plugins.module_utils._six import PY2
def make_file_unblocking(file):

View File

@ -12,7 +12,7 @@ from datetime import timedelta
from ansible.module_utils.basic import env_fallback
from ansible.module_utils.common.collections import is_sequence
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible.module_utils.six.moves.urllib.parse import urlparse
from ansible.module_utils.common.text.converters import to_text

View File

@ -441,7 +441,7 @@ import traceback
from ansible.module_utils.common.validation import check_type_int
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils.common_cli import (
AnsibleModuleDockerClient,

View File

@ -169,7 +169,7 @@ import shlex
import traceback
from ansible.module_utils.common.text.converters import to_text, to_native
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils.common_cli import (
AnsibleModuleDockerClient,

View File

@ -242,7 +242,7 @@ import shlex
import traceback
from ansible.module_utils.common.text.converters import to_text, to_native
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils.common_cli import (
AnsibleModuleDockerClient,

View File

@ -173,7 +173,7 @@ import traceback
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
from ansible.module_utils.common.validation import check_type_int
from ansible.module_utils.six import integer_types, string_types
from ansible_collections.community.docker.plugins.module_utils._six import integer_types, string_types
from ansible_collections.community.docker.plugins.module_utils._api.errors import APIError, DockerException, NotFound

View File

@ -168,7 +168,7 @@ import shlex
import traceback
from ansible.module_utils.common.text.converters import to_text, to_bytes, to_native
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils.common_api import (
AnsibleDockerClient,

View File

@ -177,7 +177,7 @@ import traceback
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.text.converters import to_native, to_text
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible_collections.community.docker.plugins.module_utils._api.context.api import (
ContextAPI,

View File

@ -161,7 +161,7 @@ import os
import tempfile
import traceback
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from time import sleep
from ansible.module_utils.common.text.converters import to_native

View File

@ -870,7 +870,7 @@ from ansible_collections.community.docker.plugins.module_utils.util import (
)
from ansible.module_utils.basic import human_to_bytes
from ansible.module_utils.six import string_types
from ansible_collections.community.docker.plugins.module_utils._six import string_types
from ansible.module_utils.common.text.converters import to_text, to_native
try:

View File

@ -121,7 +121,7 @@ volume:
import traceback
from ansible.module_utils.common.text.converters import to_native
from ansible.module_utils.six import iteritems
from ansible_collections.community.docker.plugins.module_utils._six import iteritems
from ansible_collections.community.docker.plugins.module_utils.common_api import (
AnsibleDockerClient,

View File

@ -5,3 +5,4 @@ plugins/inventory/docker_swarm.py yamllint:unparsable-with-libyaml
plugins/modules/docker_container_copy_into.py validate-modules:invalid-documentation
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
plugins/modules/docker_image_build.py validate-modules:invalid-documentation
plugins/module_utils/_six.py no-dict-iteritems

View File

@ -4,3 +4,4 @@ plugins/inventory/docker_swarm.py yamllint:unparsable-with-libyaml
plugins/modules/docker_container_copy_into.py validate-modules:invalid-documentation
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
plugins/modules/docker_image_build.py validate-modules:invalid-documentation
plugins/module_utils/_six.py no-dict-iteritems

View File

@ -1,39 +1,4 @@
plugins/module_utils/_api/_import_helper.py pylint:ansible-bad-import-from
plugins/module_utils/_api/api/client.py pylint:ansible-bad-import-from
plugins/module_utils/_api/api/client.py pylint:use-yield-from # suggested construct does not work with Python 2
plugins/module_utils/_api/auth.py pylint:ansible-bad-import-from
plugins/module_utils/_api/context/api.py pylint:ansible-bad-import-from
plugins/module_utils/_api/context/context.py pylint:ansible-bad-import-from
plugins/module_utils/_api/credentials/store.py pylint:ansible-bad-import-from
plugins/module_utils/_api/credentials/utils.py pylint:ansible-bad-import-from
plugins/module_utils/_api/errors.py pylint:ansible-bad-import-from
plugins/module_utils/_api/transport/npipesocket.py pylint:ansible-bad-import-from
plugins/module_utils/_api/transport/sshconn.py pylint:ansible-bad-import-from
plugins/module_utils/_api/transport/unixconn.py pylint:ansible-bad-import-from
plugins/module_utils/_api/utils/build.py pylint:ansible-bad-import-from
plugins/module_utils/_api/utils/build.py pylint:use-yield-from # suggested construct does not work with Python 2
plugins/module_utils/_api/utils/json_stream.py pylint:ansible-bad-import-from
plugins/module_utils/_api/utils/socket.py pylint:ansible-bad-import-from
plugins/module_utils/_api/utils/utils.py pylint:ansible-bad-import-from
plugins/module_utils/_scramble.py pylint:ansible-bad-import-from
plugins/module_utils/common.py pylint:ansible-bad-import-from
plugins/module_utils/common_api.py pylint:ansible-bad-import-from
plugins/module_utils/common_cli.py pylint:ansible-bad-import-from
plugins/module_utils/compose_v2.py pylint:ansible-bad-import-from
plugins/module_utils/copy.py pylint:ansible-bad-import-from
plugins/module_utils/module_container/base.py pylint:ansible-bad-import-from
plugins/module_utils/socket_handler.py pylint:ansible-bad-import-from
plugins/module_utils/socket_helper.py pylint:ansible-bad-import-from
plugins/module_utils/util.py pylint:ansible-bad-import-from
plugins/modules/docker_compose_v2.py pylint:ansible-bad-import-from
plugins/modules/docker_compose_v2_exec.py pylint:ansible-bad-import-from
plugins/modules/docker_compose_v2_run.py pylint:ansible-bad-import-from
plugins/modules/docker_container_copy_into.py pylint:ansible-bad-import-from
plugins/modules/docker_container_copy_into.py validate-modules:undocumented-parameter # _max_file_size_for_diff is used by the action plugin
plugins/modules/docker_container_exec.py pylint:ansible-bad-import-from
plugins/modules/docker_context_info.py pylint:ansible-bad-import-from
plugins/modules/docker_stack.py pylint:ansible-bad-import-from
plugins/modules/docker_swarm_service.py pylint:ansible-bad-import-from
plugins/modules/docker_volume.py pylint:ansible-bad-import-from
tests/unit/plugins/module_utils/_api/utils/test_utils.py pylint:ansible-bad-import-from
tests/unit/plugins/module_utils/test_copy.py pylint:use-yield-from # suggested construct does not work with Python 2

View File

@ -19,7 +19,7 @@ import tempfile
import unittest
import sys
from ansible.module_utils.six import PY3
from ansible_collections.community.docker.plugins.module_utils._six import PY3
import pytest