Skip to content

griffe_tui ¤

Griffe TUI package.

A textual user interface for Griffe.

Classes:

Functions:

  • get_parser –

    Return the CLI argument parser.

  • main –

    Run the main program.

  • to_markdown –

    Render a Griffe object to Markdown.

GriffeMarkdownViewer ¤

GriffeMarkdownViewer(
    markdown: str | None = None,
    *,
    show_table_of_contents: bool = True,
    name: str | None = None,
    id: str | None = None,
    classes: str | None = None,
    parser_factory: Callable[[], MarkdownIt] | None = None,
    griffe_loader: GriffeLoader,
)

Bases: MarkdownViewer

A Markdown viewer with custom logic for links.

Attributes:

  • griffe_loader (GriffeLoader) –

    Loader used to resolve object links.

Source code in src/griffe_tui/_internal/app.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def __init__(
    self,
    markdown: str | None = None,
    *,
    show_table_of_contents: bool = True,
    name: str | None = None,
    id: str | None = None,  # noqa: A002
    classes: str | None = None,
    parser_factory: Callable[[], MarkdownIt] | None = None,
    griffe_loader: GriffeLoader,
) -> None:
    super().__init__(
        markdown,
        show_table_of_contents=show_table_of_contents,
        name=name,
        id=id,
        classes=classes,
        parser_factory=parser_factory,
        open_links=False,
    )
    self.griffe_loader = griffe_loader

griffe_loader instance-attribute ¤

griffe_loader: GriffeLoader = griffe_loader

Loader used to resolve object links.

GriffeTUIApp ¤

GriffeTUIApp(
    driver_class: type[Driver] | None = None,
    css_path: CSSPathType | None = None,
    watch_css: bool = False,
    *,
    griffe_loader: GriffeLoader | None = None,
)

Bases: App

A Textual app to visualize docs collected by Griffe.

Methods:

Attributes:

  • BINDINGS –

    Keyboard shortcut for switching themes.

  • CSS_PATH –

    Stylesheet used by the app.

  • griffe_loader (GriffeLoader) –

    Loader used to find Python objects.

Source code in src/griffe_tui/_internal/app.py
142
143
144
145
146
147
148
149
150
151
152
153
def __init__(
    self,
    driver_class: type[Driver] | None = None,
    css_path: CSSPathType | None = None,
    watch_css: bool = False,  # noqa: FBT001,FBT002
    *,
    griffe_loader: GriffeLoader | None = None,
) -> None:
    super().__init__(driver_class, css_path, watch_css)
    if griffe_loader is None:
        griffe_loader = GriffeLoader(docstring_parser=Parser.google)
    self.griffe_loader = griffe_loader

BINDINGS class-attribute instance-attribute ¤

BINDINGS = [('d', 'toggle_dark', 'Toggle dark mode')]

Keyboard shortcut for switching themes.

CSS_PATH class-attribute instance-attribute ¤

CSS_PATH = (
    Path(__file__).parent.parent
    / "tcss"
    / "griffe_tui.tcss"
)

Stylesheet used by the app.

griffe_loader instance-attribute ¤

griffe_loader: GriffeLoader = griffe_loader

Loader used to find Python objects.

compose ¤

compose() -> ComposeResult

Create child widgets for the app.

Source code in src/griffe_tui/_internal/app.py
155
156
157
158
159
160
def compose(self) -> ComposeResult:
    """Create child widgets for the app."""
    yield Header()
    yield Input(placeholder="Enter a Python object path...")
    yield GriffeMarkdownViewer(_WELCOME, griffe_loader=self.griffe_loader)
    yield Footer()

update_view async ¤

update_view(event: Submitted) -> None

Update the Markdown view.

Source code in src/griffe_tui/_internal/app.py
162
163
164
165
166
167
168
169
170
171
172
@on(Input.Submitted)
async def update_view(self, event: Input.Submitted) -> None:
    """Update the Markdown view."""
    try:
        markdown = _to_markdown(self.griffe_loader, event.value)
    except Exception:
        _logger.exception(f"Couldn't load {event.value} as Markdown")
    else:
        viewer = self.query_one(GriffeMarkdownViewer)
        await viewer.document.update(markdown)
        viewer.scroll_home(animate=False)

get_parser ¤

get_parser() -> ArgumentParser

Return the CLI argument parser.

Returns:

Source code in src/griffe_tui/_internal/cli.py
48
49
50
51
52
53
54
55
56
57
def get_parser() -> argparse.ArgumentParser:
    """Return the CLI argument parser.

    Returns:
        An argparse parser.
    """
    parser = argparse.ArgumentParser(prog="griffe-tui")
    parser.add_argument("-V", "--version", action="version", version=f"%(prog)s {debug._get_version()}")
    parser.add_argument("--debug-info", action=_DebugInfo, help="Print debug information.")
    return parser

main ¤

main(args: list[str] | None = None) -> int

Run the main program.

This function is executed when you type griffe-tui or python -m griffe_tui.

Parameters:

  • args ¤

    (list[str] | None, default: None ) –

    Arguments passed from the command line.

Returns:

  • int –

    An exit code.

Source code in src/griffe_tui/_internal/cli.py
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
def main(args: list[str] | None = None) -> int:
    """Run the main program.

    This function is executed when you type `griffe-tui` or `python -m griffe_tui`.

    Parameters:
        args: Arguments passed from the command line.

    Returns:
        An exit code.
    """
    parser = get_parser()
    opts = parser.parse_args(args=args)
    print(opts)
    return 0

to_markdown ¤

to_markdown(obj: Object) -> str

Render a Griffe object to Markdown.

Source code in src/griffe_tui/_internal/markdown.py
29
30
31
32
33
34
35
def to_markdown(obj: Object) -> str:
    """Render a Griffe object to Markdown."""
    env = prepare_env()
    context = prepare_context(obj)
    context["heading_level"] = 1
    context["config"]["show_submodules"] = False
    return str(env.get_template(f"{obj.kind.value}.md.jinja").render(**context))