Skip to content

CLI

Command-line interface implementation.

cli

Modern CLI for pinviz using Typer + Rich.

main

main() -> int

Entry point for CLI (called from pyproject.toml).

RETURNS DESCRIPTION
int

Exit code: 0 for success, non-zero for errors

Source code in src/pinviz/cli/__init__.py
def main() -> int:
    """Entry point for CLI (called from pyproject.toml).

    Returns:
        Exit code: 0 for success, non-zero for errors
    """
    try:
        app()
        return 0
    except typer.Exit as e:
        return e.exit_code if e.exit_code is not None else 0
    except KeyboardInterrupt:
        Console().print("\n[yellow]Cancelled by user[/yellow]")
        return 130  # Standard exit code for SIGINT
    except Exception as e:
        Console().print(f"[red]Error:[/red] {e}", style="bold")
        if "--debug" in sys.argv or "-d" in sys.argv:
            raise
        return 1

main_callback

main_callback(
    version: Annotated[
        bool | None,
        Option(
            --version,
            -v,
            callback=version_callback,
            is_eager=True,
            help="Show version and exit",
        ),
    ] = None,
) -> None

Generate Raspberry Pi GPIO connection diagrams.

[bold]Examples:[/bold]

pinviz render diagram.yaml pinviz render diagram.yaml -o out/wiring.svg --show-legend pinviz example bh1750 pinviz validate diagram.yaml --strict pinviz list

For more information, visit: [link]https://github.com/nordstad/PinViz[/link]

Source code in src/pinviz/cli/__init__.py
@app.callback()
def main_callback(
    version: Annotated[
        bool | None,
        typer.Option(
            "--version",
            "-v",
            callback=version_callback,
            is_eager=True,
            help="Show version and exit",
        ),
    ] = None,
) -> None:
    """
    Generate Raspberry Pi GPIO connection diagrams.

    [bold]Examples:[/bold]

      pinviz render diagram.yaml
      pinviz render diagram.yaml -o out/wiring.svg --show-legend
      pinviz example bh1750
      pinviz validate diagram.yaml --strict
      pinviz list

    For more information, visit: [link]https://github.com/nordstad/PinViz[/link]
    """
    # Configure logging to only show errors (suppress info/debug)
    configure_logging(level="ERROR", format="console")

version_callback

version_callback(value: bool) -> None

Show version and exit.

Source code in src/pinviz/cli/__init__.py
def version_callback(value: bool) -> None:
    """Show version and exit."""
    if value:
        from importlib.metadata import version as get_version

        try:
            __version__ = get_version("pinviz")
        except Exception:
            __version__ = "unknown"
        rprint(f"pinviz version {__version__}")
        raise typer.Exit()