Skip to content
Snippets Groups Projects
Commit aa82eb62 authored by Michael Hanselmann's avatar Michael Hanselmann
Browse files

sphinx_ext: Factorize getting RAPI handlers


The list of resources and handlers will also be used for generating
a per-resource table.

Signed-off-by: default avatarMichael Hanselmann <hansmi@google.com>
Reviewed-by: default avatarGuido Trotter <ultrotter@google.com>
parent 60b47261
No related branches found
No related tags found
No related merge requests found
...@@ -492,6 +492,43 @@ def _DescribeHandlerAccess(handler, method): ...@@ -492,6 +492,43 @@ def _DescribeHandlerAccess(handler, method):
return "*(none)*" return "*(none)*"
class _RapiHandlersForDocsHelper(object):
@classmethod
def Build(cls):
"""Returns dictionary of resource handlers.
"""
resources = \
rapi.connector.GetHandlers("[node_name]", "[instance_name]",
"[group_name]", "[network_name]", "[job_id]",
"[disk_index]", "[resource]",
translate=cls._TranslateResourceUri)
return resources
@classmethod
def _TranslateResourceUri(cls, *args):
"""Translates a resource URI for use in documentation.
@see: L{rapi.connector.GetHandlers}
"""
return "".join(map(cls._UriPatternToString, args))
@staticmethod
def _UriPatternToString(value):
"""Converts L{rapi.connector.UriPattern} to strings.
"""
if isinstance(value, rapi.connector.UriPattern):
return value.content
else:
return value
_RAPI_RESOURCES_FOR_DOCS = _RapiHandlersForDocsHelper.Build()
def _BuildRapiAccessTable(res): def _BuildRapiAccessTable(res):
"""Build a table with access permissions needed for all RAPI resources. """Build a table with access permissions needed for all RAPI resources.
...@@ -523,13 +560,7 @@ class RapiAccessTable(s_compat.Directive): ...@@ -523,13 +560,7 @@ class RapiAccessTable(s_compat.Directive):
option_spec = {} option_spec = {}
def run(self): def run(self):
resources = \ include_text = "\n".join(_BuildRapiAccessTable(_RAPI_RESOURCES_FOR_DOCS))
rapi.connector.GetHandlers("[node_name]", "[instance_name]",
"[group_name]", "[network_name]", "[job_id]",
"[disk_index]", "[resource]",
translate=self._TranslateResourceUri)
include_text = "\n".join(_BuildRapiAccessTable(resources))
# Inject into state machine # Inject into state machine
include_lines = docutils.statemachine.string2lines(include_text, _TAB_WIDTH, include_lines = docutils.statemachine.string2lines(include_text, _TAB_WIDTH,
...@@ -538,25 +569,6 @@ class RapiAccessTable(s_compat.Directive): ...@@ -538,25 +569,6 @@ class RapiAccessTable(s_compat.Directive):
return [] return []
@classmethod
def _TranslateResourceUri(cls, *args):
"""Translates a resource URI for use in documentation.
@see: L{rapi.connector.GetHandlers}
"""
return "".join(map(cls._UriPatternToString, args))
@staticmethod
def _UriPatternToString(value):
"""Converts L{rapi.connector.UriPattern} to strings.
"""
if isinstance(value, rapi.connector.UriPattern):
return value.content
else:
return value
def setup(app): def setup(app):
"""Sphinx extension callback. """Sphinx extension callback.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment