Skip to main content

Configurable command management for humans

Project description

Coma

Configurable command management for humans.

PyPI version fury.io PyPI license PyPI pyversions PyPI status

Code style Documentation Status

Introduction

coma provides a modular and declarative interface for defining commands, associated configuration files, and initialization routines. Configs and initializations can be command-specific or injected as reusable components in multiple commands.

from coma import command, wake
from dataclasses import dataclass


# Step 1: Declare one or more configurations.
@dataclass
class RemoteCfg:
    server: str = "localhost"
    port: int = 9001


# Step 2: Declare one or more commands.
@command
def push(remote: RemoteCfg, **data):
    # Code for pushing data to remote. Mocked here as print statements.
    print(f"Pushing data: {data}")
    print(f"To url: {remote.server}:{remote.port}")


# Step 3: Launch!
if __name__ == "__main__":
    wake()

Key Features

The declarations in the above example provide a rich command line interface for invoking your program. Assuming this code is in a file called main.py, you get:

Direct command parameter access

A command (push) that is invoked by name and command parameters (remote and data) that are directly available as command line arguments (also by name):

$ python main.py push \
    remote::server=127.0.0.1 remote::port=8000 \
    data::header=foo data::content=bar
Pushing data: {'header': 'foo', 'content': 'bar'}
To url: 127.0.0.1:8000

Config serialization

Configs that are automatically serialized to file based on their name (config remote is saved to remote.yaml in this case), enabling long-term persistence:

$ ls
main.py
remote.yaml
$ cat remote.yaml
server: localhost
port: 9001

Both YAML and JSON are supported!

And lots more!

Including:

  • Removing the boilerplate of argparse while retaining full argparse interoperability and customizability for complex use cases.
  • Providing a comprehensive set of hooks to easily tweak, replace, or extend coma's template-based default behavior.
  • Integrating with omegaconf's extremely rich and powerful configuration management features.

Installation

pip install coma

Getting Started

Excited? Jump straight into the extensive tutorials and examples of the official documentation.

Changelog

From version 2.1.0:

  • Significant design changes that break backwards compatibility:
    • Removed coma.register(). Everything happens via the @command decorator.
    • Folded all coma.initiate() functionality into coma.wake().
    • Simplified all hook protocols and added new utilities for user-defined hooks.
  • Greatly improved command signature inspection:
    • More robust parsing and invocation of command parameters.
    • New inline config parameters!

From version 2.0.1:

  • Changed coma.wake() from warnings-based to Exception-based error handling.

From version 1.0.1:

  • Add @command decorator
  • Changed default prefix separator from : to :: to avoid conflict with dictionary notation
  • Minor improvements and bug fixes

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

coma-3.0.1.tar.gz (46.6 kB view details)

Uploaded Source

Built Distribution

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

coma-3.0.1-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

Details for the file coma-3.0.1.tar.gz.

File metadata

  • Download URL: coma-3.0.1.tar.gz
  • Upload date:
  • Size: 46.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for coma-3.0.1.tar.gz
Algorithm Hash digest
SHA256 d380fd166b8f2833cb97b1c805702192f3e71fc39bf70e6efd17cf8f67b18a35
MD5 636005fe1c76ab9981712503683b9b3e
BLAKE2b-256 544d00a73ac578e588a4205a74713807fa0bef19aa61b35c38fcad82475e0955

See more details on using hashes here.

File details

Details for the file coma-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: coma-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 44.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.6

File hashes

Hashes for coma-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3f8dfcbb494926d0dbb46d0c9f03caa98599cfe8be5a4bccb9c50bfcce1210d1
MD5 57bf16e46acb603430ba9fcd360421b6
BLAKE2b-256 952b026fc2f6abf0a8569e3adf472c8a7f1475f56e1633cf6633c76d858b127a

See more details on using hashes here.

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