diff --git a/ansible_testing/modules.py b/ansible_testing/modules.py index 7acfbbb4d94..56c906158e3 100644 --- a/ansible_testing/modules.py +++ b/ansible_testing/modules.py @@ -8,6 +8,7 @@ import abc import ast import sys import argparse +import traceback from fnmatch import fnmatch from utils import find_globals @@ -16,10 +17,8 @@ from ansible.executor.module_common import REPLACER_WINDOWS from ansible.utils.module_docs import get_docstring, BLACKLIST_MODULES from ansible.module_utils import basic as module_utils_basic -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO +# We only use StringIO, since we cannot setattr on cStringIO +from StringIO import StringIO BLACKLIST_DIRS = frozenset(('.git',)) @@ -68,7 +67,6 @@ class Validator(object): ret = [] for trace in self.traces: - #print(trace.replace(self._root, '').lstrip('/')) print(trace) for error in self.errors: print('ERROR: %s' % error) @@ -326,10 +324,17 @@ class ModuleValidator(Validator): sys_stdout = sys.stdout sys_stderr = sys.stderr sys.stdout = sys.stderr = StringIO() - doc, examples, ret = get_docstring(self.path) - trace = sys.stdout.getvalue() - sys.stdout = sys_stdout - sys.stderr = sys_stderr + setattr(sys.stdout, 'encoding', sys_stdout.encoding) + setattr(sys.stderr, 'encoding', sys_stderr.encoding) + try: + doc, examples, ret = get_docstring(self.path, verbose=True) + trace = None + except: + doc, examples, ret = get_docstring(self.path) + trace = traceback.format_exc() + finally: + sys.stdout = sys_stdout + sys.stderr = sys_stderr if trace: self.traces.append(trace) if not bool(doc):