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.1.2.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.1.2-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: spakky_typer-6.1.2.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.1.2.tar.gz
Algorithm Hash digest
SHA256 037ca098b0be2bc8d055eb0da37a32231b1e31f2471ffd08fd4faddf9af9514c
MD5 4599ee2cc0331960140468b15b858072
BLAKE2b-256 48d9fea251ef9161cf8463bf6d13d130b4ebe6c858ad4551b266369c75215242

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: spakky_typer-6.1.2-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.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f3d475410d7c5547ee5e3e31015201351a960d40d47f924424f53e929635613f
MD5 27b40cc0253e5e63410f5bb4501c16d9
BLAKE2b-256 9b04f56e25c978dd751a0ded700495397a791da01847182f05af2ebf8d8e2405

See more details on using hashes here.

Provenance

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