Skip to main content

Typer CLI plugin for Spakky framework

Project description

Spakky Typer

Typer CLI integration plugin for Spakky Framework.

Installation

pip install spakky-typer

Or install via Spakky extras:

pip install spakky[typer]

Features

  • Automatic command registration: Commands are registered from @CliController classes
  • Async support: Full async/await support for CLI commands
  • Command grouping: Organize commands into logical groups
  • Dependency injection: Services are automatically injected into controllers
  • Rich integration: Leverages Typer's rich console output

Usage

Basic CLI Controller

from spakky_typer.stereotypes.cli_controller import CliController, command

@CliController("user")
class UserCliController:
    def __init__(self, user_service: UserService) -> None:
        self.user_service = user_service

    @command("list")
    async def list_users(self) -> None:
        """List all users."""
        users = await self.user_service.list_all()
        for user in users:
            print(f"{user.id}: {user.name}")

    @command("create")
    async def create_user(self, name: str, email: str) -> None:
        """Create a new user."""
        user = await self.user_service.create(name, email)
        print(f"Created user: {user.id}")

    @command("delete")
    async def delete_user(self, user_id: int) -> None:
        """Delete a user by ID."""
        await self.user_service.delete(user_id)
        print(f"Deleted user: {user_id}")

CLI Usage

# List all users
python main.py user list

# Create a new user
python main.py user create --name "John Doe" --email "john@example.com"

# Delete a user
python main.py user delete --user-id 123

Command Options

from spakky_typer.stereotypes.cli_controller import CliController, command

@CliController("db")
class DatabaseCliController:
    @command(
        name="migrate",
        help="Run database migrations",
        short_help="Run migrations",
        epilog="Use --dry-run to preview changes",
    )
    async def run_migrations(
        self,
        dry_run: bool = False,
        verbose: bool = False,
    ) -> None:
        """Execute pending database migrations."""
        if dry_run:
            print("Dry run mode - no changes will be made")
        # Migration logic here

    @command("seed", hidden=True)  # Hidden from help output
    async def seed_database(self) -> None:
        """Seed database with test data."""
        pass

    @command("status", deprecated=True)  # Mark as deprecated
    async def check_status(self) -> None:
        """Check database connection status."""
        pass

Accessing Typer Instance

from typer import Typer
from spakky.application.application import SpakkyApplication

# After application.start()
typer_app = application.container.get(Typer)

# Run the CLI
if __name__ == "__main__":
    typer_app()

Application Setup

from spakky.application.application import SpakkyApplication
from spakky.application.application_context import ApplicationContext
from typer import Typer
import my_cli_module

app = (
    SpakkyApplication(ApplicationContext())
    .load_plugins()
    .scan(my_cli_module)
    .start()
)

typer_app = app.container.get(Typer)

if __name__ == "__main__":
    typer_app()

Components

Component Description
CliController Stereotype for CLI command groups
command Decorator for CLI commands
TyperCLIPostProcessor Automatic command registration post-processor

Command Decorator Options

Option Type Description
name str Command name (defaults to method name in kebab-case)
help str Full help text for the command
short_help str Short help text for command list
epilog str Text displayed after command help
hidden bool Hide command from help output
deprecated bool Mark command as deprecated
no_args_is_help bool Show help when no args provided
add_help_option bool Whether to add --help option
rich_help_panel str Rich console help panel name

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spakky_typer-4.0.0.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spakky_typer-4.0.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file spakky_typer-4.0.0.tar.gz.

File metadata

  • Download URL: spakky_typer-4.0.0.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spakky_typer-4.0.0.tar.gz
Algorithm Hash digest
SHA256 ac1bd9225e01197e723bb89957408cc7d253c2b55642c7f8451e0a174eeeea7d
MD5 d65998b2e0d212590c26fab2c4da6c92
BLAKE2b-256 a30b6ce978681741dd87d4b192252314edb5eb8fd77ee12941cec6c61f4d6364

See more details on using hashes here.

Provenance

The following attestation bundles were made for spakky_typer-4.0.0.tar.gz:

Publisher: release.yml on E5presso/spakky-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spakky_typer-4.0.0-py3-none-any.whl.

File metadata

  • Download URL: spakky_typer-4.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spakky_typer-4.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 862bcb82122861fd4066cd376ec00fc9f41fb7eaa40f22fca27aa5dd0df24637
MD5 c875be0ed7c86244572713ae10cfe072
BLAKE2b-256 3bdb1a1e9d59821cfcc5b9b73f142a0e010c330d6a3fcca3961ec9ce6cb34a1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for spakky_typer-4.0.0-py3-none-any.whl:

Publisher: release.yml on E5presso/spakky-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page