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/ # create_cli_app, Rich presenters, Typer command runners
└── infra/ # CliBootstrapper (order=30), @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.2.0.tar.gz
(17.2 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.2.0.tar.gz.
File metadata
- Download URL: hexastack_cli-0.2.0.tar.gz
- Upload date:
- Size: 17.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69a0ca0c2cb3dec02444f25b44ca2888b0221843aeb9e1412851d1381fc1ac51
|
|
| MD5 |
29da3556f2020a33ce19fcdb7538ce57
|
|
| BLAKE2b-256 |
7640a208200feb61cdbb47efe06a05f74e316b961527ecf60f6f672938b547fb
|
File details
Details for the file hexastack_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: hexastack_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 24.0 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 |
cd747bde3007524e4af2e17e49b2a21aa296f81f384bb6567473db68665a6f02
|
|
| MD5 |
c92ed81c5d1e44c80000aa894d098a9b
|
|
| BLAKE2b-256 |
a71cebf40f97a1c17b2aa3509c56982275db46a1903a285c9774429894848904
|