Fix ansible-test change detection traceback.
This commit is contained in:
parent
d8b5c11a63
commit
53a3d1ffdb
3 changed files with 16 additions and 18 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- ansible-test no longer tracebacks during change analysis due to processing an empty python file
|
|
@ -288,12 +288,6 @@ class PathMapper:
|
||||||
:type path: str
|
:type path: str
|
||||||
:rtype: list[str]
|
:rtype: list[str]
|
||||||
"""
|
"""
|
||||||
if path == 'lib/ansible/module_utils/__init__.py':
|
|
||||||
return []
|
|
||||||
|
|
||||||
if path == 'plugins/module_utils/__init__.py':
|
|
||||||
return []
|
|
||||||
|
|
||||||
if not self.python_module_utils_imports:
|
if not self.python_module_utils_imports:
|
||||||
display.info('Analyzing python module_utils imports...')
|
display.info('Analyzing python module_utils imports...')
|
||||||
before = time.time()
|
before = time.time()
|
||||||
|
|
|
@ -117,6 +117,11 @@ def get_python_module_utils_imports(compile_targets):
|
||||||
|
|
||||||
for module_util in sorted(imports):
|
for module_util in sorted(imports):
|
||||||
if not imports[module_util]:
|
if not imports[module_util]:
|
||||||
|
package_path = get_import_path(module_util, package=True)
|
||||||
|
|
||||||
|
if os.path.exists(package_path) and not os.path.getsize(package_path):
|
||||||
|
continue # ignore empty __init__.py files
|
||||||
|
|
||||||
display.warning('No imports found which use the "%s" module_util.' % module_util)
|
display.warning('No imports found which use the "%s" module_util.' % module_util)
|
||||||
|
|
||||||
return imports
|
return imports
|
||||||
|
@ -127,14 +132,17 @@ def get_python_module_utils_name(path): # type: (str) -> str
|
||||||
base_path = data_context().content.module_utils_path
|
base_path = data_context().content.module_utils_path
|
||||||
|
|
||||||
if data_context().content.collection:
|
if data_context().content.collection:
|
||||||
prefix = 'ansible_collections.' + data_context().content.collection.prefix + 'plugins.module_utils.'
|
prefix = 'ansible_collections.' + data_context().content.collection.prefix + 'plugins.module_utils'
|
||||||
else:
|
else:
|
||||||
prefix = 'ansible.module_utils.'
|
prefix = 'ansible.module_utils'
|
||||||
|
|
||||||
if path.endswith('/__init__.py'):
|
if path.endswith('/__init__.py'):
|
||||||
path = os.path.dirname(path)
|
path = os.path.dirname(path)
|
||||||
|
|
||||||
name = prefix + os.path.splitext(os.path.relpath(path, base_path))[0].replace(os.path.sep, '.')
|
if path == base_path:
|
||||||
|
name = prefix
|
||||||
|
else:
|
||||||
|
name = prefix + '.' + os.path.splitext(os.path.relpath(path, base_path))[0].replace(os.path.sep, '.')
|
||||||
|
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
@ -151,9 +159,6 @@ def enumerate_module_utils():
|
||||||
if ext != '.py':
|
if ext != '.py':
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if os.path.getsize(path) == 0:
|
|
||||||
continue
|
|
||||||
|
|
||||||
module_utils.append(get_python_module_utils_name(path))
|
module_utils.append(get_python_module_utils_name(path))
|
||||||
|
|
||||||
return set(module_utils)
|
return set(module_utils)
|
||||||
|
@ -192,7 +197,9 @@ def get_import_path(name, package=False): # type: (str, bool) -> str
|
||||||
|
|
||||||
if name.startswith('ansible.module_utils.') or name == 'ansible.module_utils':
|
if name.startswith('ansible.module_utils.') or name == 'ansible.module_utils':
|
||||||
path = os.path.join('lib', filename)
|
path = os.path.join('lib', filename)
|
||||||
elif data_context().content.collection and name.startswith('ansible_collections.%s.plugins.module_utils.' % data_context().content.collection.full_name):
|
elif data_context().content.collection and (
|
||||||
|
name.startswith('ansible_collections.%s.plugins.module_utils.' % data_context().content.collection.full_name) or
|
||||||
|
name == 'ansible_collections.%s.plugins.module_utils' % data_context().content.collection.full_name):
|
||||||
path = '/'.join(filename.split('/')[3:])
|
path = '/'.join(filename.split('/')[3:])
|
||||||
else:
|
else:
|
||||||
raise Exception('Unexpected import name: %s' % name)
|
raise Exception('Unexpected import name: %s' % name)
|
||||||
|
@ -274,11 +281,6 @@ class ModuleUtilFinder(ast.NodeVisitor):
|
||||||
if is_subdir(self.path, data_context().content.test_path):
|
if is_subdir(self.path, data_context().content.test_path):
|
||||||
return # invalid imports in tests are ignored
|
return # invalid imports in tests are ignored
|
||||||
|
|
||||||
path = get_import_path(name, True)
|
|
||||||
|
|
||||||
if os.path.exists(path) and os.path.getsize(path) == 0:
|
|
||||||
return # zero length __init__.py files are ignored during earlier processing, do not warn about them now
|
|
||||||
|
|
||||||
# Treat this error as a warning so tests can be executed as best as possible.
|
# Treat this error as a warning so tests can be executed as best as possible.
|
||||||
# This error should be detected by unit or integration tests.
|
# This error should be detected by unit or integration tests.
|
||||||
display.warning('%s:%d Invalid module_utils import: %s' % (self.path, line_number, import_name))
|
display.warning('%s:%d Invalid module_utils import: %s' % (self.path, line_number, import_name))
|
||||||
|
|
Loading…
Reference in a new issue