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

(cherry picked from commit 7cf80f50d1)
This commit is contained in:
Gonéri Le Bouder 2021-02-02 16:29:36 -05:00 committed by Matt Clay
parent 6cde1cdf35
commit 985a395cd9
2 changed files with 5 additions and 0 deletions

View file

@ -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.

View file

@ -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: