Skip to main content

A Python3 library for turning functions into cmd-line programs trivially.

Project description

simpcli3

A Python3 module for turning functions into cmd-line programs trivially.

Examples

Non-dataclass (simple function) example

from simpcli3 import CliApp
from typing import List

def myls(paths: List[str], exclude: List[str]=[], mystr: str=None, follow_symlinks: bool=False):
    print(f"Received args: {paths}\n")
    for path in paths:
        print(path)

if __name__ == "__main__":
    CliApp(myls).run()

More advanced Example

This example actually uses a dataclass argument rather than a collection of arguments of primitive types.

from dataclasses import dataclass, field
from enum import Enum
from typing import List

class PrintFormat(Enum):
    LINE_PER_ENTRY = 1
    PRETTY = 2

@dataclass
class ListDirectoryArgs:
    paths: List[str] = field(metadata=dict(positional=True))
    exclude: List[str] = field(default_factory=list)
    print_format: PrintFormat = PrintFormat.PRETTY
    follow_symlinks: bool = True

def myls(lsargs: ListDirectoryArgs):
    print(f"Received args: {lsargs}\n")
    for path in lsargs.paths:
        print(path)

if __name__ == "__main__":
    from simpcli3 import CliApp
    CliApp(myls).run()

Looking Forward

It would be nice to also be able to parse JSON / TOML config files into dataclasses, rather than having ever-growing cmd-line args.

Prior Art

And why I didn't use it.

For argparse_dataclasses and argparse_dataclass reasons, see Improvements.

SimpleParsing (pip install simple_parsing). Different goals and approaches in terms of simplicity. For one, we don't depend on numpy.

Improvements over projects based on

Modifications made from "argparse_dataclass": 2. "positional" metadata arg as I think that's more intuitive than passing "args" directly. 3. If type is enum, choices automatically specified, default given as string (kind of like "argparse_dataclasses" package, but with cleaner impl IMO) 4. Better handling of bools (especially ones which default to True). 5. Wrapper over field (idea lifted from argparse_dataclasses)

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

simpcli3-0.0.3.tar.gz (13.1 kB view hashes)

Uploaded Source

Built Distribution

simpcli3-0.0.3-py3-none-any.whl (13.4 kB view hashes)

Uploaded Python 3

Supported by

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