azdev/operations/help/refdoc/cli_docs/helpgen.py (31 lines of code) (raw):
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import os
import json
from azure.cli.core._help import CliCommandHelpFile # pylint: disable=import-error
from azure.cli.core.file_util import create_invoker_and_load_cmds_and_args, get_all_help # pylint: disable=import-error
from azdev.utilities import get_cli_repo_path
from azdev.operations.help import DOC_SOURCE_MAP_PATH
from azdev.operations.help.refdoc.common.directives import AbstractHelpGenDirective
from azdev.operations.help.refdoc.common.directives import setup_common_directives
class HelpGenDirective(AbstractHelpGenDirective):
""" General CLI Sphinx Directive
The Core CLI has a doc source map to determine help text source for core cli commands. Extension help processed
here will have no doc source
"""
def _get_help_files(self, az_cli):
create_invoker_and_load_cmds_and_args(az_cli)
return get_all_help(az_cli)
def _load_doc_source_map(self):
map_path = os.path.join(get_cli_repo_path(), DOC_SOURCE_MAP_PATH)
with open(map_path) as open_file:
return json.load(open_file)
def _get_doc_source_content(self, doc_source_map, help_file):
is_command = isinstance(help_file, CliCommandHelpFile)
result = None
if not is_command:
top_group_name = help_file.command.split()[0] if help_file.command else 'az'
doc_source_value = doc_source_map[top_group_name] if top_group_name in doc_source_map else ''
result = '{}:docsource: {}'.format(self._INDENT, doc_source_value)
else:
top_command_name = help_file.command.split()[0] if help_file.command else ''
if top_command_name in doc_source_map:
result = '{}:docsource: {}'.format(self._INDENT, doc_source_map[top_command_name])
return result
def setup(app):
""" Setup sphinx app with help generation directive. This is called by sphinx.
:param app: The sphinx app
:return:
"""
app.add_directive('corehelpgen', HelpGenDirective)
setup_common_directives(app)