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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file simpcli3-0.0.3.tar.gz
.
File metadata
- Download URL: simpcli3-0.0.3.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b011e5494327413f993bd07908d45f8cb498ea23fff3e7c13bdb94f20a4bc874 |
|
MD5 | 37db12b10b881d27b45f54b2fa484fdc |
|
BLAKE2b-256 | cdb856439a21c3d7ace70a1d8b0ea281a5cdf1983ad78ce7264d18245e68e53b |
File details
Details for the file simpcli3-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: simpcli3-0.0.3-py3-none-any.whl
- Upload date:
- Size: 13.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7677af7fa9ab55ef7353a850c1d184332310897225e7a1acd9c3212cdd41f32 |
|
MD5 | 0fd8c8985a6b2a2ffaed6de62325ad1d |
|
BLAKE2b-256 | 1db1f736204b2a3315e698ac35109ddcea89da96549c20d559ae915ecfa4e670 |