From 686c3658ae9974e98570efc5b340bb7ecd1c3852 Mon Sep 17 00:00:00 2001 From: Martin Krizek Date: Thu, 2 Oct 2025 20:17:03 +0200 Subject: [PATCH] Deprecate `ansible.module_utils.six` (#85934) * Deprecate `ansible.module_utils.six` Fixes #85920 --- changelogs/fragments/deprecate-six.yml | 2 ++ lib/ansible/module_utils/six/__init__.py | 8 ++++++++ .../sanity/pylint/plugins/unwanted.py | 18 ++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 changelogs/fragments/deprecate-six.yml diff --git a/changelogs/fragments/deprecate-six.yml b/changelogs/fragments/deprecate-six.yml new file mode 100644 index 00000000000..034f1957982 --- /dev/null +++ b/changelogs/fragments/deprecate-six.yml @@ -0,0 +1,2 @@ +deprecated_features: + - Deprecate the ``ansible.module_utils.six`` module. Use the Python standard library equivalent instead. diff --git a/lib/ansible/module_utils/six/__init__.py b/lib/ansible/module_utils/six/__init__.py index 20504cbeddb..e8036aa66da 100644 --- a/lib/ansible/module_utils/six/__init__.py +++ b/lib/ansible/module_utils/six/__init__.py @@ -33,6 +33,14 @@ import operator import sys import types +from ansible.module_utils.common import warnings as _warnings + +_warnings.deprecate( + msg="The `ansible.module_utils.six` module is deprecated.", + help_text="Use the Python standard library equivalent instead.", + version="2.24", +) + # The following makes it easier for us to script updates of the bundled code. It is not part of # upstream six _BUNDLED_METADATA = {"pypi_name": "six", "version": "1.17.0"} diff --git a/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py b/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py index e0414fdefd0..5535215855d 100644 --- a/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +++ b/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py @@ -2,6 +2,7 @@ from __future__ import annotations +import functools import os import typing as t @@ -108,10 +109,6 @@ class AnsibleUnwantedChecker(BaseChecker): 'Iterator', ) ), - - 'ansible.module_utils.six': UnwantedEntry( - 'the Python standard library equivalent' - ), } unwanted_functions = { @@ -136,6 +133,19 @@ class AnsibleUnwantedChecker(BaseChecker): modules_only=True), } + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + # ansible.module_utils.six is deprecated and collections can still use it until it is removed + if self.is_ansible_core: + self.unwanted_imports['ansible.module_utils.six'] = UnwantedEntry( + 'the Python standard library equivalent' + ) + + @functools.cached_property + def is_ansible_core(self) -> bool: + """True if ansible-core is being tested.""" + return not self.linter.config.collection_name + def visit_import(self, node): # type: (astroid.node_classes.Import) -> None """Visit an import node.""" for name in node.names: