From 62211097cb7627f92841cb4422bf2d19fb1c37be Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Tue, 11 Apr 2023 11:45:56 -0500 Subject: [PATCH] Expand pylint deprecated plugin to catch ansible.module_utils.common.warnings uses (#80462) --- .../sanity/pylint/plugins/deprecated.py | 18 +++++++++++++++--- test/sanity/ignore.txt | 3 +++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py b/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py index d0b68f4e77f..f90cde7307f 100644 --- a/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +++ b/test/lib/ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py @@ -95,7 +95,7 @@ ANSIBLE_VERSION = LooseVersion('.'.join(ansible_version_raw.split('.')[:3])) def _get_expr_name(node): - """Funciton to get either ``attrname`` or ``name`` from ``node.func.expr`` + """Function to get either ``attrname`` or ``name`` from ``node.func.expr`` Created specifically for the case of ``display.deprecated`` or ``self._display.deprecated`` """ @@ -106,6 +106,17 @@ def _get_expr_name(node): return node.func.expr.name +def _get_func_name(node): + """Function to get either ``attrname`` or ``name`` from ``node.func`` + + Created specifically for the case of ``from ansible.module_utils.common.warnings import deprecate`` + """ + try: + return node.func.attrname + except AttributeError: + return node.func.name + + def parse_isodate(value): """Parse an ISO 8601 date string.""" msg = 'Expected ISO 8601 date string (YYYY-MM-DD)' @@ -218,8 +229,9 @@ class AnsibleDeprecatedChecker(BaseChecker): date = None collection_name = None try: - if (node.func.attrname == 'deprecated' and 'display' in _get_expr_name(node) or - node.func.attrname == 'deprecate' and _get_expr_name(node)): + funcname = _get_func_name(node) + if (funcname == 'deprecated' and 'display' in _get_expr_name(node) or + funcname == 'deprecate'): if node.keywords: for keyword in node.keywords: if len(node.keywords) == 1 and keyword.arg is None: diff --git a/test/sanity/ignore.txt b/test/sanity/ignore.txt index 908aa5f53cf..6d8e98de655 100644 --- a/test/sanity/ignore.txt +++ b/test/sanity/ignore.txt @@ -224,6 +224,8 @@ test/units/modules/test_apt.py pylint:disallowed-name test/units/module_utils/basic/test_deprecate_warn.py pylint:ansible-deprecated-no-version test/units/module_utils/basic/test_deprecate_warn.py pylint:ansible-deprecated-version test/units/module_utils/basic/test_run_command.py pylint:disallowed-name +test/units/module_utils/common/warnings/test_deprecate.py pylint:ansible-deprecated-no-version # testing Display.deprecated call without a version or date +test/units/module_utils/common/warnings/test_deprecate.py pylint:ansible-deprecated-version # testing Deprecated version found in call to Display.deprecated or AnsibleModule.deprecate test/units/module_utils/urls/fixtures/multipart.txt line-endings # Fixture for HTTP tests that use CRLF test/units/module_utils/urls/test_fetch_url.py replace-urlopen test/units/module_utils/urls/test_gzip.py replace-urlopen @@ -243,3 +245,4 @@ lib/ansible/playbook/helpers.py pylint:ansible-deprecated-version lib/ansible/playbook/included_file.py pylint:ansible-deprecated-version lib/ansible/plugins/action/__init__.py pylint:ansible-deprecated-version lib/ansible/template/__init__.py pylint:ansible-deprecated-version +lib/ansible/module_utils/common/file.py pylint:ansible-deprecated-version