rally/doc/ext/plugin_reference.py
Boris Pavlovic b76e89bb00 [docs] Imporve Plugin Reference
Tables with plugins looks quite ugly so this patch removes tables
and use just rubrics and doctest_block types of nodes

Change-Id: Ifb5d53cfa1d86ab477671d3485d63fbf09f9246c
2015-09-22 14:47:15 -07:00

126 lines
3.4 KiB
Python

# Copyright 2015: Mirantis Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from docutils import nodes
from docutils.parsers import rst
from oslo_utils import importutils
from rally import plugins
DATA = [
{
"group": "task",
"items": [
{
"name": "scenario runner",
"base": "rally.task.runner:ScenarioRunner"
},
{
"name": "SLA",
"base": "rally.task.sla:SLA"
},
{
"name": "context",
"base": "rally.task.context:Context"
},
{
"name": "scenario",
"base": "rally.task.scenario:Scenario"
}
]
},
{
"group": "deployment",
"items": [
{
"name": "engine",
"base": "rally.deployment.engine:Engine"
},
{
"name": "server provider",
"base":
"rally.deployment.serverprovider.provider:ProviderFactory"
}
]
}
]
def _make_pretty_parameters(parameters):
if not parameters:
return ""
result = "PARAMETERS:\n"
for p in parameters:
result += "* %(name)s: %(doc)s\n" % p
return result
def _get_plugin_info(plugin_group_item):
module, cls = plugin_group_item["base"].split(":")
plugin_base = getattr(importutils.import_module(module), cls)
def process_plugin(p):
info = p.get_info()
description = [info["title"] or ""]
if info["description"]:
description.append(info["description"])
if info["parameters"]:
description.append(_make_pretty_parameters(info["parameters"]))
if info["returns"]:
description.append("RETURNS:\n%s" % info["returns"])
description.append("MODULE:\n%s" % info["module"])
return {
"name": p.get_name(),
"description": "\n\n".join(description)
}
return map(process_plugin, plugin_base.get_all())
def make_plugin_section(plugin_group):
elements = []
for item in plugin_group["items"]:
name = item["name"].title() if "SLA" != item["name"] else item["name"]
elements.append(nodes.subtitle(
text="%ss [%s]" % (name, plugin_group["group"])))
for p in _get_plugin_info(item):
elements.append(nodes.rubric(
text="%s [%s]" % (p["name"], item["name"])))
elements.append(nodes.doctest_block(text=p["description"]))
return elements
class PluginReferenceDirective(rst.Directive):
def run(self):
content = []
for i in range(len(DATA)):
content.extend(make_plugin_section(DATA[i]))
return content
def setup(app):
plugins.load()
app.add_directive('generate_plugin_reference', PluginReferenceDirective)