Classes
AutodocRunResult
dataclass
Summary of an autodoc generation run.
Tracks successes, failures, and warnings for observability a…
AutodocRunResult
dataclass Summary of an autodoc generation run.
Tracks successes, failures, and warnings for observability and strict mode enforcement.
Attributes
| Name | Type | Description |
|---|---|---|
extracted |
int |
|
rendered |
int |
|
failed_extract |
int |
|
failed_render |
int |
|
warnings |
int |
|
failed_extract_identifiers |
list[str] |
|
failed_render_identifiers |
list[str] |
|
fallback_pages |
list[str] |
|
autodoc_dependencies |
dict[str, set[str]] |
Methods 3
has_failures
Check if any failures occurred.
has_failures
def has_failures(self) -> bool
Check if any failures occurred.
Returns
bool
has_warnings
Check if any warnings occurred.
has_warnings
def has_warnings(self) -> bool
Check if any warnings occurred.
Returns
bool
add_dependency
Register a dependency between a source file and an autodoc page.
add_dependency
def add_dependency(self, source_file: str, page_path: str) -> None
Register a dependency between a source file and an autodoc page.
Parameters 2
source_file |
str |
Path to the Python/OpenAPI source file |
page_path |
str |
Path to the generated autodoc page (source_path) |
_PageContext
Lightweight page-like context for autodoc template rendering.
Templates extend base.html and inclu…
_PageContext
Lightweight page-like context for autodoc template rendering.
Templates extend base.html and include partials that expect a 'page' variable with attributes like metadata, tags, title, and relative_url. This class provides those attributes without requiring a full Page object (which doesn't exist yet during the initial render phase).
The navigation attributes (prev, next, prev_in_section, next_in_section) are set to None since autodoc virtual pages don't participate in linear navigation.
Internal Methods 2
__init__
__init__
def __init__(self, title: str, metadata: dict[str, Any], tags: list[str] | None = None, relative_url: str = '/', variant: str | None = None, source_path: str | None = None, section: Section | None = None) -> None
Parameters 7
title |
str |
|
metadata |
dict[str, Any] |
|
tags |
list[str] | None |
|
relative_url |
str |
|
variant |
str | None |
|
source_path |
str | None |
|
section |
Section | None |
__repr__
__repr__
def __repr__(self) -> str
Returns
str
VirtualAutodocOrchestrator
Orchestrate API documentation generation as virtual pages.
This orchestrator creates virtual Page …
VirtualAutodocOrchestrator
Orchestrate API documentation generation as virtual pages.
This orchestrator creates virtual Page and Section objects that integrate directly into the site's build pipeline, rendered via theme templates without intermediate markdown files.
Architecture:
1. Extract DocElements from source (Python, CLI, or OpenAPI)
2. Create virtual Section hierarchy based on element type
3. Create virtual Pages for each documentable element
4. Return (pages, sections) tuple for integration into site
Supports:
- Python API docs (modules, classes, functions)
- CLI docs (commands, command groups)
- OpenAPI docs (endpoints, schemas)
Benefits over markdown-based approach:
- No intermediate markdown files to manage
- Direct HTML rendering (bypass markdown parsing)
- Better layout control (card-based API Explorer)
- Faster builds (no parse → render → parse cycle)
Methods 2
is_enabled
Check if virtual autodoc is enabled for any type.
is_enabled
def is_enabled(self) -> bool
Check if virtual autodoc is enabled for any type.
Returns
bool
generate
Generate documentation as virtual pages and sections for all enabled types.
generate
def generate(self) -> tuple[list[Page], list[Section], AutodocRunResult]
Generate documentation as virtual pages and sections for all enabled types.
Returns
Tuple of (pages, sections, result) to add to sitetuple[list[Page], list[Section], AutodocRunResult]
—
Internal Methods 21
__init__
Initialize virtual autodoc orchestrator.
__init__
def __init__(self, site: Site)
Initialize virtual autodoc orchestrator.
Parameters 1
site |
Site |
Site instance for configuration and context |
_relativize_paths
Convert absolute paths in error messages to project-relative paths.
Makes erro…
_relativize_paths
def _relativize_paths(self, message: str) -> str
Convert absolute paths in error messages to project-relative paths.
Makes error messages less noisy by showing paths relative to the project root (e.g., /bengal/themes/... instead of /Users/name/.../bengal/themes/...).
Parameters 1
message |
str |
Error message that may contain absolute paths |
Returns
Message with absolute paths converted to project-relative pathsstr
—
_create_template_environment
Create Jinja2 environment for HTML templates.
_create_template_environment
def _create_template_environment(self) -> Environment
Create Jinja2 environment for HTML templates.
Returns
Environment
_get_theme_templates_dir
Get theme templates directory if available.
_get_theme_templates_dir
def _get_theme_templates_dir(self) -> Path | None
Get theme templates directory if available.
Returns
Path | None
_create_python_sections
Create virtual section hierarchy from doc elements.
Creates sections for:
- /a…
_create_python_sections
def _create_python_sections(self, elements: list[DocElement]) -> dict[str, Section]
Create virtual section hierarchy from doc elements.
Creates sections for:
- /api/ (root API section)
- /api/<package>/ (for each top-level package)
- /api/<package>/<subpackage>/ (nested packages)
Parameters 1
elements |
list[DocElement] |
List of DocElements (modules) to process |
Returns
Dictionary mapping section path to Section objectdict[str, Section]
—
_create_cli_sections
Create CLI section hierarchy.
_create_cli_sections
def _create_cli_sections(self, elements: list[DocElement]) -> dict[str, Section]
Create CLI section hierarchy.
Parameters 1
elements |
list[DocElement] |
Returns
dict[str, Section]
_create_openapi_sections
Create OpenAPI section hierarchy.
_create_openapi_sections
def _create_openapi_sections(self, elements: list[DocElement], existing_sections: dict[str, Section] | None = None) -> dict[str, Section]
Create OpenAPI section hierarchy.
Parameters 2
elements |
list[DocElement] |
|
existing_sections |
dict[str, Section] | None |
Returns
dict[str, Section]
_create_pages
Create virtual pages for documentation elements.
This uses a two-pass approach…
_create_pages
def _create_pages(self, elements: list[DocElement], sections: dict[str, Section], doc_type: str = 'python', result: AutodocRunResult | None = None) -> tuple[list[Page], AutodocRunResult]
Create virtual pages for documentation elements.
This uses a two-pass approach to ensure navigation works correctly:
- First pass: Create all Page objects and add them to sections
- Second pass: Render HTML (now sections have all their pages)
Parameters 4
elements |
list[DocElement] |
DocElements to create pages for |
sections |
dict[str, Section] |
Section hierarchy for page placement |
doc_type |
str |
Type of documentation ("python", "cli", "openapi") |
result |
AutodocRunResult | None |
AutodocRunResult to track failures and warnings |
Returns
Tuple of (list of virtual Page objects, updated result)tuple[list[Page], AutodocRunResult]
—
_find_parent_section
Find the appropriate parent section for an element.
_find_parent_section
def _find_parent_section(self, element: DocElement, sections: dict[str, Section], doc_type: str) -> Section
Find the appropriate parent section for an element.
Parameters 3
element |
DocElement |
|
sections |
dict[str, Section] |
|
doc_type |
str |
Returns
Section
_create_element_page
Create a virtual page for any element type.
_create_element_page
def _create_element_page(self, element: DocElement, section: Section, doc_type: str) -> Page
Create a virtual page for any element type.
Parameters 3
element |
DocElement |
DocElement to create page for |
section |
Section |
Parent section for this page |
doc_type |
str |
Type of documentation ("python", "cli", "openapi") |
Returns
Virtual Page objectPage
—
_get_element_metadata
Get template name, URL path, and page type for an element.
_get_element_metadata
def _get_element_metadata(self, element: DocElement, doc_type: str) -> tuple[str, str, str]
Get template name, URL path, and page type for an element.
Parameters 2
element |
DocElement |
|
doc_type |
str |
Returns
tuple[str, str, str]
_render_element
Render element documentation to HTML.
_render_element
def _render_element(self, element: DocElement, template_name: str, url_path: str, page_type: str, section: Section | None = None) -> str
Render element documentation to HTML.
Parameters 5
element |
DocElement |
DocElement to render |
template_name |
str |
Template name (e.g., "api-reference/module") |
url_path |
str |
URL path for this element (e.g., "cli/bengal/serve") |
page_type |
str |
Page type (e.g., "cli-reference", "api-reference") |
section |
Section | None |
Parent section (for sidebar navigation) |
Returns
Rendered HTML stringstr
—
_render_fallback
Render minimal fallback HTML when template fails.
_render_fallback
def _render_fallback(self, element: DocElement) -> str
Render minimal fallback HTML when template fails.
Parameters 1
element |
DocElement |
Returns
str
_render_fallback_class
Render minimal class HTML.
_render_fallback_class
def _render_fallback_class(self, element: DocElement) -> str
Render minimal class HTML.
Parameters 1
element |
DocElement |
Returns
str
_render_fallback_function
Render minimal function HTML.
_render_fallback_function
def _render_fallback_function(self, element: DocElement) -> str
Render minimal function HTML.
Parameters 1
element |
DocElement |
Returns
str
_create_index_pages
Create index pages for sections that need them.
_create_index_pages
def _create_index_pages(self, sections: dict[str, Section]) -> list[Page]
Create index pages for sections that need them.
Parameters 1
sections |
dict[str, Section] |
Section dictionary to process |
Returns
List of created index pages (to add to main pages list)list[Page]
—
_render_section_index
Render section index page HTML.
_render_section_index
def _render_section_index(self, section: Section) -> str
Render section index page HTML.
Parameters 1
section |
Section |
Returns
str
_render_section_index_fallback
Fallback card-based rendering when template fails.
_render_section_index_fallback
def _render_section_index_fallback(self, section: Section) -> str
Fallback card-based rendering when template fails.
Parameters 1
section |
Section |
Returns
str
_extract_python
Extract Python API documentation.
_extract_python
def _extract_python(self) -> list[DocElement]
Extract Python API documentation.
Returns
list[DocElement]
_extract_cli
Extract CLI documentation.
_extract_cli
def _extract_cli(self) -> list[DocElement]
Extract CLI documentation.
Returns
list[DocElement]
_extract_openapi
Extract OpenAPI documentation.
_extract_openapi
def _extract_openapi(self) -> list[DocElement]
Extract OpenAPI documentation.
Returns
list[DocElement]
Functions
_format_source_file_for_display
Normalize source_file paths for GitHub links.
- Prefer paths relative to the project root
- Otherw…
_format_source_file_for_display
def _format_source_file_for_display(source_file: Path | str | None, root_path: Path) -> str | None
Normalize source_file paths for GitHub links.
- Prefer paths relative to the project root
- Otherwise return the POSIX-ified absolute path
Parameters 2
| Name | Type | Default | Description |
|---|---|---|---|
source_file |
Path | str | None |
— | |
root_path |
Path |
— |
Returns
str | None