minor doc reformatting

now version_added < 1.3 does not get shown, up from 1.0
option's version_added is also now filterd against this threshold
module version_added is more prominent
exaples now uses pure rst instead of intermingled with html formatting
aliases now shown in description for options
bad version fields now throw warnings instead of exceptions
ansible-doc errors now show traceback in very very verbose mode, for easier debugging
This commit is contained in:
Brian Coca 2015-07-17 10:00:02 -04:00
parent 8df71febb7
commit 6ba706f753
3 changed files with 35 additions and 34 deletions

View file

@ -31,6 +31,7 @@ import time
import datetime import datetime
import subprocess import subprocess
import cgi import cgi
import warnings
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
from ansible.utils import module_docs from ansible.utils import module_docs
@ -41,7 +42,7 @@ from ansible.utils.vars import merge_hash
# if a module is added in a version of Ansible older than this, don't print the version added information # if a module is added in a version of Ansible older than this, don't print the version added information
# in the module documentation because everyone is assumed to be running something newer than this already. # in the module documentation because everyone is assumed to be running something newer than this already.
TO_OLD_TO_BE_NOTABLE = 1.5 TO_OLD_TO_BE_NOTABLE = 1.3
# Get parent directory of the directory this script lives in # Get parent directory of the directory this script lives in
MODULEDIR=os.path.abspath(os.path.join( MODULEDIR=os.path.abspath(os.path.join(
@ -214,6 +215,17 @@ def jinja2_environment(template_dir, typ):
return env, template, outputname return env, template, outputname
##################################################################################### #####################################################################################
def too_old(added):
if not added:
return False
try:
added_tokens = str(added).split(".")
readded = added_tokens[0] + "." + added_tokens[1]
added_float = float(readded)
except ValueError as e:
warnings.warn("Could not parse %s: %s" % (added, str(e)))
return False
return (added_float < TO_OLD_TO_BE_NOTABLE)
def process_module(module, options, env, template, outputname, module_map, aliases): def process_module(module, options, env, template, outputname, module_map, aliases):
@ -271,15 +283,15 @@ def process_module(module, options, env, template, outputname, module_map, alias
added = doc['version_added'] added = doc['version_added']
# don't show version added information if it's too old to be called out # don't show version added information if it's too old to be called out
if added: if too_old(added):
added_tokens = str(added).split(".")
added = added_tokens[0] + "." + added_tokens[1]
added_float = float(added)
if added and added_float < TO_OLD_TO_BE_NOTABLE:
del doc['version_added'] del doc['version_added']
if 'options' in doc: if 'options' in doc:
for (k,v) in doc['options'].iteritems(): for (k,v) in doc['options'].iteritems():
# don't show version added information if it's too old to be called out
if 'version_added' in doc['options'][k] and too_old(doc['options'][k]['version_added']):
del doc['options'][k]['version_added']
continue
all_keys.append(k) all_keys.append(k)
all_keys = sorted(all_keys) all_keys = sorted(all_keys)
@ -329,7 +341,7 @@ def process_category(category, categories, options, env, template, outputname):
category_file = open(category_file_path, "w") category_file = open(category_file_path, "w")
print "*** recording category %s in %s ***" % (category, category_file_path) print "*** recording category %s in %s ***" % (category, category_file_path)
# TODO: start a new category file # start a new category file
category = category.replace("_"," ") category = category.replace("_"," ")
category = category.title() category = category.title()
@ -352,7 +364,6 @@ def process_category(category, categories, options, env, template, outputname):
deprecated.append(module) deprecated.append(module)
elif '/core/' in module_map[module]: elif '/core/' in module_map[module]:
core.append(module) core.append(module)
modules.append(module) modules.append(module)
modules.sort() modules.sort()

View file

@ -10,6 +10,11 @@
@{ title }@ @{ title }@
@{ '+' * title_len }@ @{ '+' * title_len }@
{% if version_added is defined -%}
.. versionadded:: @{ version_added }@
{% endif %}
.. contents:: .. contents::
:local: :local:
:depth: 1 :depth: 1
@ -21,10 +26,6 @@
# #
--------------------------------------------#} --------------------------------------------#}
{% if aliases is defined -%}
Aliases: @{ ','.join(aliases) }@
{% endif %}
{% if deprecated is defined -%} {% if deprecated is defined -%}
DEPRECATED DEPRECATED
---------- ----------
@ -35,14 +36,13 @@ DEPRECATED
Synopsis Synopsis
-------- --------
{% if version_added is defined -%}
.. versionadded:: @{ version_added }@
{% endif %}
{% for desc in description -%} {% for desc in description -%}
@{ desc | convert_symbols_to_format }@ @{ desc | convert_symbols_to_format }@
{% endfor %} {% endfor %}
{% if aliases is defined -%}
Aliases: @{ ','.join(aliases) }@
{% endif %}
{% if requirements %} {% if requirements %}
Requirements Requirements
@ -79,37 +79,26 @@ Options
{% else %} {% else %}
<td><ul>{% for choice in v.get('choices',[]) -%}<li>@{ choice }@</li>{% endfor -%}</ul></td> <td><ul>{% for choice in v.get('choices',[]) -%}<li>@{ choice }@</li>{% endfor -%}</ul></td>
{% endif %} {% endif %}
<td>{% for desc in v.description -%}@{ desc | html_ify }@{% endfor -%}</td> <td>{% for desc in v.description -%}<div>@{ desc | html_ify }@</div>{% endfor -%} {% if 'aliases' in v and v.aliases -%}</br>
</tr> <div style="font-size: small;">aliases: @{ v.aliases|join(', ') }@<div>{%- endif %}</td></tr>
{% endfor %} {% endfor %}
</table> </table>
</br>
{% endif %} {% endif %}
{% if examples or plainexamples -%} {% if examples or plainexamples -%}
Examples Examples
-------- --------
.. raw:: html
{% for example in examples %}
{% if example['description'] %}<p>@{ example['description'] | html_ify }@</p>{% endif %}
<p>
<pre>
@{ example['code'] | escape | indent(4, True) }@
</pre>
</p>
{% endfor %}
<br/>
{% if plainexamples %}
:: ::
@{ plainexamples | indent(4, True) }@ {% for example in examples %}
{% endif %} {% if example['description'] %}@{ example['description'] | indent(4, True) }@{% endif %}
@{ example['code'] | escape | indent(4, True) }@
{% endfor %}
{% if plainexamples %}@{ plainexamples | indent(4, True) }@{% endif %}
{% endif %} {% endif %}

View file

@ -122,6 +122,7 @@ class DocCLI(CLI):
# probably a quoting issue. # probably a quoting issue.
raise AnsibleError("Parsing produced an empty object.") raise AnsibleError("Parsing produced an empty object.")
except Exception, e: except Exception, e:
self.display.vvv(traceback.print_exc())
raise AnsibleError("module %s missing documentation (or could not parse documentation): %s\n" % (module, str(e))) raise AnsibleError("module %s missing documentation (or could not parse documentation): %s\n" % (module, str(e)))
CLI.pager(text) CLI.pager(text)