Source code for mario.doc

from __future__ import annotations

import types
import typing as t

import attr


[docs]def parse_rst(text: str) -> docutils.nodes.document: # type: ignore import docutils.nodes # pylint: disable=import-outside-toplevel import docutils.parsers.rst # pylint: disable=import-outside-toplevel import docutils.utils # pylint: disable=import-outside-toplevel parser = docutils.parsers.rst.Parser() components = (docutils.parsers.rst.Parser,) settings = docutils.frontend.OptionParser( components=components ).get_default_values() document = docutils.utils.new_document("<rst-doc>", settings=settings) parser.parse(text, document) return document
# pylint: disable=undefined-variable
[docs]def format_text(document: docutils.nodes.document) -> str: # type: ignore import sphinx.builders.text # pylint: disable=import-outside-toplevel import sphinx.events # pylint: disable=import-outside-toplevel import sphinx.util.osutil # pylint: disable=import-outside-toplevel import sphinx.writers.text # pylint: disable=import-outside-toplevel app = types.SimpleNamespace( srcdir=None, confdir=None, outdir=None, doctreedir="/", config=types.SimpleNamespace( text_newlines="native", text_sectionchars="=", text_add_secnumbers=False, text_secnumber_suffix=".", ), tags=set(), events=sphinx.events.EventManager(), registry=types.SimpleNamespace( create_translator=lambda self, something, new_builder: sphinx.writers.text.TextTranslator( document, new_builder ) ), ) builder = sphinx.builders.text.TextBuilder(app) translator = sphinx.writers.text.TextTranslator(document, builder) document.walkabout(translator) return translator.body
[docs]def rst2text(source: str) -> str: document = parse_rst(source) return format_text(document)
[docs]@attr.dataclass(frozen=True) class HelpSection: priority: int entries: t.List[str] doc: str = "" name: t.Optional[str] = None
[docs]@attr.dataclass(frozen=True) class HelpSectionSpec: priority: int doc: str = "" name: str = ""
UNSECTIONED = "UNSECTIONED" UNSECTIONED_PRIORITY = 100_000 SECTION_SPECS = { HelpSectionSpec( name="Traversals", doc="Commands for calling code on data.", priority=0 ), HelpSectionSpec( name="Async traversals", doc="Commands for asynchronously calling code on data.", priority=1, ), HelpSectionSpec(name=UNSECTIONED, doc="", priority=UNSECTIONED_PRIORITY), } SECTION_NAME_TO_SECTION_SPEC = {s.name: s for s in SECTION_SPECS} DEFAULT_SECTION_PRIORITY = 500 NULL_SECTION = HelpSectionSpec( priority=1000, name="Custom", doc="Custom defined commands" )
[docs]def get_jsonschema_type_mapping(type_): def _jsonschema_type_mapping(self): d = {"type": type_} if "description" in self.metadata.keys(): d["description"] = self.metadata["description"] else: d["description"] = self.metadata["metadata"]["description"] return d return _jsonschema_type_mapping