6e06677b34
- Add "Contents" add the top of page - Mark each group of plugin as a Category and make it's name as a link - Mark each plugin as a Sub-category and make it's name as a link - Parse plugin description and parameters instead of displaying them as quotes - Add pluging's namespaces - Add references to github for each plugin module - Add "Table Of Contents" sidebar(already used at readthedocs, but was missed from http://docs.openstack.org/developer/rally/) Change-Id: I8889ccc7f82b0f46495ce607c242d37242360a25
138 lines
3.9 KiB
Python
138 lines
3.9 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.parsers import rst
|
|
|
|
from oslo_utils import importutils
|
|
|
|
from rally import plugins
|
|
from utils import category, subcategory, paragraph, parse_text
|
|
|
|
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": "processing",
|
|
"items": [
|
|
{
|
|
"name": "output chart",
|
|
"base": "rally.task.processing.charts:OutputChart"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"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\n"
|
|
for p in parameters:
|
|
result += "* %(name)s: %(doc)s\n" % p
|
|
return result
|
|
|
|
|
|
def make_plugin_section(plugin, base_name):
|
|
subcategory_obj = subcategory("%s [%s]" % (plugin.get_name(), base_name))
|
|
info = plugin.get_info()
|
|
if info["title"]:
|
|
subcategory_obj.append(paragraph(info["title"]))
|
|
|
|
if info["description"]:
|
|
subcategory_obj.extend(parse_text(info["description"]))
|
|
|
|
if info["namespace"]:
|
|
subcategory_obj.append(paragraph(
|
|
"**Namespace**: %s" % info["namespace"]))
|
|
|
|
if info["parameters"]:
|
|
subcategory_obj.extend(parse_text(
|
|
_make_pretty_parameters(info["parameters"])))
|
|
if info["returns"]:
|
|
subcategory_obj.extend(parse_text(
|
|
"**Returns**:\n%s" % info["returns"]))
|
|
filename = info["module"].replace(".", "/")
|
|
ref = "https://github.com/openstack/rally/blob/master/%s.py" % filename
|
|
subcategory_obj.extend(parse_text("**Module**:\n`%s`__\n\n__ %s"
|
|
% (info["module"], ref)))
|
|
return subcategory_obj
|
|
|
|
|
|
def make_plugin_base_section(plugin_group):
|
|
elements = []
|
|
|
|
for item in plugin_group["items"]:
|
|
name = item["name"].title() if "SLA" != item["name"] else item["name"]
|
|
category_obj = category("%s %ss" % (plugin_group["group"].title(),
|
|
name))
|
|
elements.append(category_obj)
|
|
|
|
module, cls = item["base"].split(":")
|
|
plugin_base = getattr(importutils.import_module(module), cls)
|
|
|
|
for p in plugin_base.get_all():
|
|
category_obj.append(make_plugin_section(p, item["name"]))
|
|
|
|
return elements
|
|
|
|
|
|
class PluginReferenceDirective(rst.Directive):
|
|
|
|
def run(self):
|
|
content = []
|
|
for i in range(len(DATA)):
|
|
content.extend(make_plugin_base_section(DATA[i]))
|
|
|
|
return content
|
|
|
|
|
|
def setup(app):
|
|
plugins.load()
|
|
app.add_directive("generate_plugin_reference", PluginReferenceDirective)
|