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.plugins.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.plugins.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.core.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.core.application.application import SpakkyApplication
from spakky.core.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-6.0.0.tar.gz (6.0 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-6.0.0-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for spakky_typer-6.0.0.tar.gz
Algorithm Hash digest
SHA256 5ca74cdf27143b4a07ded79c2ab5a8933ff96734755dd3844bd8f0dbab2fb29f
MD5 1a8babe70f35b97eb87730e05c40d817
BLAKE2b-256 467f83a6ecb4c7ed22a51269df80b8945a53caeca2082d2e7753df065b9dc7f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for spakky_typer-6.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-6.0.0-py3-none-any.whl.

File metadata

  • Download URL: spakky_typer-6.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.4 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-6.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6ea9fc046e406b71b199e993d9959dd8a917cd92a3d621ab9ead7e76ca567f14
MD5 6c116d8a321d547f184f0929d8cf8fab
BLAKE2b-256 4ad9c5456faab245d7f58555e7b84af2b657665185cfa08cdf5dc4d24df03276

See more details on using hashes here.

Provenance

The following attestation bundles were made for spakky_typer-6.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