From 7cf80f50d16b7a7a2ba9f1318bdca5df53936369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A9ri=20Le=20Bouder?= Date: Tue, 2 Feb 2021 16:29:36 -0500 Subject: [PATCH] validate_modules: fails with .id attribute not found (#73322) * validate_modules: fails with .id attribute not found This patch addresses a problem in the `found_try_except_import` test. This module tries to identify lines like: `HAS_FOO = True` In this case, the target (`HAS_FOO`) is of type `ast.Name` and has a `id` attribute which provide the name. In my case, I've a line that set a module attribute`. In this case, the target (`module.var`) has the type `ast.Attribute` and no `id` attribute. The code trigger an `AttributeError` exception. This patch ensures we compare a `ast.Name`. * Update test/lib/ansible_test/_data/sanity/validate-modules/validate_modules/main.py --- ...modules_found_try_except_import_fails_module_attribute.yaml | 3 +++ .../_data/sanity/validate-modules/validate_modules/main.py | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 changelogs/fragments/validate-modules_found_try_except_import_fails_module_attribute.yaml diff --git a/changelogs/fragments/validate-modules_found_try_except_import_fails_module_attribute.yaml b/changelogs/fragments/validate-modules_found_try_except_import_fails_module_attribute.yaml new file mode 100644 index 00000000000..b14be52a3f0 --- /dev/null +++ b/changelogs/fragments/validate-modules_found_try_except_import_fails_module_attribute.yaml @@ -0,0 +1,3 @@ +--- +bugfixes: +- validate-modules - do not raise an ``AttributeError`` if a value is assigned to a module attribute in a try/except block. diff --git a/test/lib/ansible_test/_data/sanity/validate-modules/validate_modules/main.py b/test/lib/ansible_test/_data/sanity/validate-modules/validate_modules/main.py index 921c43e1fb9..1ffc57ad04c 100644 --- a/test/lib/ansible_test/_data/sanity/validate-modules/validate_modules/main.py +++ b/test/lib/ansible_test/_data/sanity/validate-modules/validate_modules/main.py @@ -666,6 +666,8 @@ class ModuleValidator(Validator): found_try_except_import = True if isinstance(grandchild, ast.Assign): for target in grandchild.targets: + if not isinstance(target, ast.Name): + continue if target.id.lower().startswith('has_'): found_has = True if found_try_except_import and not found_has: