hexastack-cli
Typer and Rich presentation adapter for Hexastack: nested commands, aliases, piped outputs, and CQRS dispatching.
1. Overview & Capabilities
hexastack-cli turns Hexastack CQRS commands and queries into intuitive, modern CLI applications:
- Nested Command Hierarchies: Nest subcommands naturally (
app user create,app db migrate) using@cli_group. - Command Aliases: Register multiple aliases for the same action (
app user new == app user create). - Feature Flag Gating: Gate CLI commands dynamically with
@feature_flag_command(...)and@cli_command(..., feature_flag=...). - Rich Formatted & CI-Friendly Output: Beautiful tables, panels, and spinners for interactive terminals; clean text/JSON streaming for CI/CD pipelines.
- Direct CQRS Dispatching: Declaratively expose domain commands (
@cli_command) and queries (@cli_query) with automatic parameter parsing and validation.
2. Package Anatomy & Key Components
hexastack_cli/
├── domain/ # CliContext, OutputFormat enum
├── adapters/ # Rich presenters, Typer command runners
└── infra/ # create_cli_app, CliBootstrapper (order=40), @cli_command, @cli_query, @cli_group, @feature_flag_command
Key Exports
| Category | Exports |
|---|---|
| Application Factory | create_cli_app, CliBootstrapper (order=30) |
| Decorators | @cli_command, @cli_query, @cli_group, @feature_flag_command |
| Presenters | RichTerminalPresenter, ConsolePresenter, TablePresenter, JsonPresenter |
| Testing & Demo Narration | CliNarrator, TerminalEvent |
3. Monorepo & Sibling Relationships
graph TD
subgraph UserInvocation ["CLI Invocations"]
INV["Terminal Commands & Scripts"]
end
subgraph CliLayer ["hexastack-cli"]
TYPER["Typer Application (Nested Groups & Aliases)"]
RICH["Rich Presenters (Tables, Panels, JSON)"]
SCAN["CLI Decorator Scanner (@cli_command, @cli_query)"]
end
subgraph CQRSExecution ["hexastack-cqrs"]
CBUS["CommandBusPort"]
QBUS["QueryBusPort"]
end
subgraph Kernel ["hexastack-core"]
DI["rodi.Container"]
end
INV --> TYPER
TYPER --> SCAN
SCAN -->|dispatches to| CBUS
SCAN -->|dispatches to| QBUS
SCAN --> RICH
TYPER -. resolves buses from DI .-> DI
Explicit Dependencies (Direct)
hexastack-core: Core kernel, DI container, and ports.hexastack-cqrs:CommandBusPortandQueryBusPortfor message dispatching.typer>=0.27.1: CLI command parser and shell completion.rich>=15.0.0: Terminal formatting, tables, and colors.
Implied / Behavioral Relationships (DI-Mediated)
- CQRS Integration: Dispatches CLI argument payloads directly into the application's command and query buses.
- Umbrella CLI: Consumed by the
hexastackumbrella package to power diagnostic commands (hexastack info,hexastack inspect registry,hexastack demo ping).
4. Installation
# Standalone install
pip install hexastack-cli
# Via umbrella package
pip install "hexastack[cli]"
5. Quickstart Example
from dataclasses import dataclass
from hexastack_core.infra.bootstrap import bootstrap
from hexastack_cqrs.domain.query import Query
from hexastack_cqrs.infra.decorators import query_handler
from hexastack_cli.infra.decorators import cli_query, cli_group
@dataclass(frozen=True)
class CheckStatusQuery(Query):
service_name: str
@query_handler(CheckStatusQuery)
class CheckStatusHandler:
def __call__(self, qry: CheckStatusQuery) -> dict:
return {"service": qry.service_name, "status": "ONLINE"}
# Expose query as a CLI command
cli_query("status", aliases=["st", "health"], help="Check status of a service")(
CheckStatusQuery
)
runtime = bootstrap(packages_to_scan=[__name__])
cli_app = runtime.get("cli_app")
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
hexastack_cli-0.3.0.tar.gz
(17.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hexastack_cli-0.3.0.tar.gz.
File metadata
- Download URL: hexastack_cli-0.3.0.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
030e3f11e9badf6be3f115cd0dca2ca57764ccbf06c5323fbfc53bb1b0608049
|
|
| MD5 |
9a3adc08ee5a0cd99486a6003e9351b5
|
|
| BLAKE2b-256 |
45e3a13ba51f659be104a7a216344cc86cfe81fd6c4d8d78778c41340cd9ea3b
|
File details
Details for the file hexastack_cli-0.3.0-py3-none-any.whl.
File metadata
- Download URL: hexastack_cli-0.3.0-py3-none-any.whl
- Upload date:
- Size: 24.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ddd75e203bb24d83b8210797bc74e6182bf198354c0bf5084c05b250450fd42
|
|
| MD5 |
8e74d69459fb6306e215675d75348da3
|
|
| BLAKE2b-256 |
42ec6bb37e1f2256b46b1b9c0de281f1c84a9bb5f4edbd11ce697756b2141917
|