plugin_formatter.py: Improve the output when processing docs (#46541)
* Improve the output when processing files * Update docs/bin/plugin_formatter.py Co-Authored-By: dagwieers <dag@wieers.com> * Show progress indicator. * Don't pp.pformat() huge structures when they aren't used anyway. This saves ~10 seconds on my machine. * Only show ASCII spinner if stdout is a TTY. * Fix: E722 do not use bare 'except'
This commit is contained in:
parent
40144c7486
commit
ee29ba5d4f
2 changed files with 35 additions and 6 deletions
|
@ -185,11 +185,27 @@ def write_data(text, output_dir, outputname, module=None):
|
|||
fname = os.path.join(output_dir, outputname)
|
||||
fname = fname.replace(".py", "")
|
||||
|
||||
update_file_if_different(fname, to_bytes(text))
|
||||
try:
|
||||
updated = update_file_if_different(fname, to_bytes(text))
|
||||
except Exception as e:
|
||||
display.display("while rendering %s, an error occured: %s" % (module, e))
|
||||
raise
|
||||
if updated:
|
||||
display.display("rendering: %s" % module)
|
||||
else:
|
||||
print(text)
|
||||
|
||||
|
||||
IS_STDOUT_TTY = sys.stdout.isatty()
|
||||
|
||||
|
||||
def show_progress(progress):
|
||||
'''Show a little process indicator.'''
|
||||
if IS_STDOUT_TTY:
|
||||
sys.stdout.write('\r%s\r' % ("-/|\\"[progress % 4]))
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
def get_plugin_info(module_dir, limit_to=None, verbose=False):
|
||||
'''
|
||||
Returns information about plugins and the categories that they belong to
|
||||
|
@ -231,6 +247,7 @@ def get_plugin_info(module_dir, limit_to=None, verbose=False):
|
|||
glob.glob("%s/*/*/*/*.py" % module_dir)
|
||||
)
|
||||
|
||||
module_index = 0
|
||||
for module_path in files:
|
||||
# Do not list __init__.py files
|
||||
if module_path.endswith('__init__.py'):
|
||||
|
@ -266,6 +283,9 @@ def get_plugin_info(module_dir, limit_to=None, verbose=False):
|
|||
# Regular module to process
|
||||
#
|
||||
|
||||
module_index += 1
|
||||
show_progress(module_index)
|
||||
|
||||
# use ansible core library to parse out doc metadata YAML and plaintext examples
|
||||
doc, examples, returndocs, metadata = plugin_docs.get_docstring(module_path, fragment_loader, verbose=verbose)
|
||||
|
||||
|
@ -399,9 +419,10 @@ def too_old(added):
|
|||
|
||||
|
||||
def process_plugins(module_map, templates, outputname, output_dir, ansible_version, plugin_type):
|
||||
for module in module_map:
|
||||
for module_index, module in enumerate(module_map):
|
||||
|
||||
show_progress(module_index)
|
||||
|
||||
display.display("rendering: %s" % module)
|
||||
fname = module_map[module]['path']
|
||||
display.vvvvv(pp.pformat(('process_plugins info: ', module_map[module])))
|
||||
|
||||
|
@ -658,6 +679,8 @@ def main():
|
|||
display.verbosity = options.verbosity
|
||||
plugin_type = options.plugin_type
|
||||
|
||||
display.display("Evaluating %s files..." % plugin_type)
|
||||
|
||||
# prep templating
|
||||
templates = jinja2_environment(options.template_dir, options.type, plugin_type)
|
||||
|
||||
|
@ -682,15 +705,18 @@ def main():
|
|||
|
||||
categories['all'] = {'_modules': plugin_info.keys()}
|
||||
|
||||
display.vvv(pp.pformat(categories))
|
||||
display.vvvvv(pp.pformat(plugin_info))
|
||||
if display.verbosity >= 3:
|
||||
display.vvv(pp.pformat(categories))
|
||||
if display.verbosity >= 5:
|
||||
display.vvvvv(pp.pformat(plugin_info))
|
||||
|
||||
# Transform the data
|
||||
if options.type == 'rst':
|
||||
display.v('Generating rst')
|
||||
for key, record in plugin_info.items():
|
||||
display.vv(key)
|
||||
display.vvvvv(pp.pformat(('record', record)))
|
||||
if display.verbosity >= 5:
|
||||
display.vvvvv(pp.pformat(('record', record)))
|
||||
if record.get('doc', None):
|
||||
short_desc = record['doc']['short_description'].rstrip('.')
|
||||
if short_desc is None:
|
||||
|
|
|
@ -36,3 +36,6 @@ def update_file_if_different(filename, b_data):
|
|||
if b_data_old != b_data:
|
||||
with open(filename, 'wb') as f:
|
||||
f.write(b_data)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
|
Loading…
Reference in a new issue