Box of handy tools for Sphinx providing comprehensive extensions and enhancements for documentation generation.
npx @tessl/cli install tessl/pypi-sphinx-toolbox@4.0.0Sphinx Toolbox is a comprehensive collection of Sphinx extensions providing enhanced documentation capabilities. It offers 50+ modular extensions that enhance the core Sphinx documentation generator with advanced features including GitHub integration, enhanced autodoc capabilities, LaTeX improvements, specialized directives, and modern Python type support.
pip install sphinx-toolboximport sphinx_toolboxFor individual extensions:
# Individual extension imports
from sphinx_toolbox import utils
from sphinx_toolbox import shields
from sphinx_toolbox.github import GitHubDomain
from sphinx_toolbox.more_autodoc import autoprotocolSphinx Toolbox is primarily used by adding extensions to your Sphinx conf.py:
# Add the main extension (includes most sub-extensions)
extensions = [
'sphinx_toolbox',
# ... other extensions
]
# Or add individual extensions as needed
extensions = [
'sphinx_toolbox.github',
'sphinx_toolbox.shields',
'sphinx_toolbox.more_autodoc.autoprotocol',
'sphinx_toolbox.installation',
# ... other extensions
]
# Configure GitHub integration (optional)
github_username = "your-username"
github_repository = "your-repo"Example usage in reStructuredText documents:
.. installation:: package-name
:pypi:
:github: user/repo
.. shields::
:pypi:
:github:
.. confval:: my_config_value
:type: str
:default: "default value"
Description of the configuration value.
:issue:`123` - Links to GitHub issue
:source:`path/to/file.py` - Links to source fileSphinx Toolbox follows a modular architecture with these main components:
utils, cache, config) shared across extensionsEach extension follows Sphinx's standard patterns with setup() functions returning SphinxExtMetadata for proper integration.
Essential utilities, caching, and configuration management used throughout the extension ecosystem.
def setup(app: Sphinx) -> SphinxExtMetadata:
"""Main setup function that registers all sphinx-toolbox extensions."""
# Core utility functions
def make_github_url(username: str, repository: str) -> RequestsURL
def flag(argument: Any) -> bool
def code_repr(obj: Any) -> str
def parse_parameters(lines: List[str], tab_size: int = 8) -> List[Param]
# Configuration classes
class ToolboxConfig(Config):
"""Extended Config class with type annotations for sphinx-toolbox settings."""
# HTTP cache
cache: HTTPCacheEnhanced directives for creating rich documentation content including code blocks, examples, installation instructions, shields, and collapsible sections.
# Directives
class CodeBlock: ... # Enhanced code-block with adjustable tab width
class CodeCell: ... # Jupyter-style code cells
class InstallationDirective: ... # Tabbed installation instructions
class CollapseDirective: ... # Collapsible content sections
class reSTExampleDirective: ... # Shows RST source and output
# Shield generation functions
def make_pypi_shield() -> str
def make_rtfd_shield() -> str
def make_github_shield() -> strComprehensive GitHub integration with custom domain, roles for issues/PRs/users/repos, and API-powered features.
class GitHubDomain(Domain):
"""Sphinx domain for GitHub.com integration."""
# GitHub roles
def issue_role() -> None # :github:issue: role
def pull_role() -> None # :github:pull: role
def user_role() -> None # :github:user: role
def repository_role() -> None # :github:repo: role
# API functions
def get_issue_title(username: str, repository: str, issue_number: int) -> strModern Python feature documentation including Protocol, TypedDict, namedtuple, generics, and enhanced type hint processing.
class ProtocolDocumenter(ClassDocumenter):
"""Autodocumenter for typing.Protocol classes."""
class TypedDictDocumenter(ClassDocumenter):
"""Autodocumenter for TypedDict classes."""
class NamedTupleDocumenter(ClassDocumenter):
"""Autodocumenter for namedtuple classes."""
class PrettyGenericAliasDocumenter(DataDocumenter):
"""Enhanced documentation for generic aliases."""Improved automatic summary table generation with bug fixes, all support, and customizable column widths.
class PatchedAutosummary(Autosummary):
"""Enhanced autosummary directive with bug fixes."""
class PatchedAutoSummModuleDocumenter(ModuleDocumenter):
"""Module documenter with __all__ support."""
class AutosummaryWidths:
"""Configures autosummary table column widths."""
def get_documenter(app: Sphinx, obj: Any, parent: Any) -> Type[Documenter]Extensive LaTeX customization including custom directives, package management, layout improvements, and Unicode handling.
class LaTeXDomain(Domain):
"""Domain for LaTeX-specific directives."""
class SamepageDirective: ... # Keeps content on same page
class ClearPageDirective: ... # Starts new page
class VSpaceDirective: ... # Adds vertical space
def use_package(package: str, config: Config, *args, **kwargs) -> None
def better_header_layout(config: Config, space_before: str, space_after: str) -> None
def replace_unknown_unicode(app: Sphinx, exception: Exception) -> NoneConfiguration value documentation, cross-referencing roles, and specialized formatting features.
class ConfigurationValue(SphinxDirective):
"""Directive for documenting configuration values."""
# Roles
def asset_role() -> Tuple[List[Node], List[system_message]] # :asset: role
def source_role() -> Tuple[List[Node], List[system_message]] # :source: role
def wikipedia_role() -> Tuple[List[Node], List[system_message]] # :wikipedia: role
# Cross-reference support
class PyDecoXRefRole(XRefRole):
"""Cross-references for Python decorators."""Small but important improvements to Sphinx functionality including tab size handling, parameter formatting, footnote symbols, and compatibility fixes.
# Tab size handling
def setup_tabsize_support(app: Sphinx) -> None
# Parameter formatting
def format_param_dash() -> None
# Footnote improvements
class FootnoteSymbols: ...
# LaTeX layout improvements
def configure_latex_tweaks() -> NoneSphinx Toolbox adds numerous configuration values to control its behavior:
# GitHub integration
github_username = "username"
github_repository = "repository"
# Asset handling
assets_dir = "_assets"
# Enhanced autodoc
all_typevars = True
no_unbound_typevars = False
# LaTeX customization
latex_elements = {
# Various LaTeX customizations applied automatically
}
# Autosummary
autosummary_col_type = "p{0.5\\linewidth}"
autodocsumm_member_order = "bysource"Sphinx Toolbox provides several exception types for configuration and processing errors:
class MissingOptionError(SphinxError):
"""Raised when required configuration option is missing."""
class InvalidOptionError(SphinxError):
"""Raised when configuration option has invalid value."""
class NoMatchError(Exception):
"""Raised when no matching values are found."""Comprehensive testing framework for Sphinx extensions with HTML/LaTeX regression testing, fixtures, and development tools:
class SphinxBuilder:
"""Builder for testing Sphinx extensions."""
class HTMLRegressionFixture:
"""HTML regression testing utilities."""
class LaTeXRegressionFixture:
"""LaTeX regression testing utilities."""
def run_setup(app: Sphinx) -> None
def check_asset_copy() -> None
def remove_html_footer() -> None
def check_html_regression(test_output: str, expected_output: str) -> None