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
pull/11626/head
Brian Coca 10 years ago
parent 8df71febb7
commit 6ba706f753

@ -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()

@ -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 %} {% for example in examples %}
{% if example['description'] %}<p>@{ example['description'] | html_ify }@</p>{% endif %} {% if example['description'] %}@{ example['description'] | indent(4, True) }@{% endif %}
<p>
<pre>
@{ example['code'] | escape | indent(4, True) }@ @{ example['code'] | escape | indent(4, True) }@
</pre>
</p>
{% endfor %} {% endfor %}
<br/> {% if plainexamples %}@{ plainexamples | indent(4, True) }@{% endif %}
{% if plainexamples %}
::
@{ plainexamples | indent(4, True) }@
{% endif %}
{% endif %} {% endif %}

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

Loading…
Cancel
Save