Generate command line options and help/tips from function automatically.
Project description
Call function directly in cmd line
Features
- Allow user call functions directly in command line.
- Generate help tips automatically.
- Add default called functions if not function was specific.
Notice
- It's better to add argument type for each autocall functions.
- Function with @optfunc_default has @optfunc implicitly.
- Not support two type of variadic arguments.
Code example1 -- calculator
from optfunc2 import cmdline, cmdline_default, cmdline_start
@cmdline_default
def add(a: float, b: float):
"""add two numbers
Args:
a (float): The First number
b (float): The Second number
"""
print(f"{a} + {b} = {a + b}")
@cmdline
def multiply(x: int|float, y: int = 5):
"""multiply two numbers. The second number is optional.
Args:
x (int): The First number
y (int, optional): The Second number. Defaults to 5.
"""
print(f"{x} × {y} = {x * y}")
@cmdline
def stats(numbers: list):
"""statistics of numbers in list
Args:
numbers (list): Target List.
"""
print(f"sum: {sum(numbers)}")
print(f"average: {sum(numbers)/len(numbers):.2f}")
if __name__ == "__main__":
cmdline_start(header_doc="✨ calc CLI", has_abbrev=True)
Generate help tips automatically
~/optfunc2$ python src/example_calc.py help
Usage: src/example_calc.py [command] [<args>|--help]
✨ calc CLI
commands:
add [default] add two numbers
multiply multiply two numbers. The second number is optional.
stats statistics of numbers in list
~/optfunc2$ python src/example_calc.py add -h
Usage: src/example_calc.py add [OPTIONS]
add two numbers
Arguments:
+-----+--------+-------+---------+-------------------+
| Opt | Abbrev | Type | Default | Desc |
+-----+--------+-------+---------+-------------------+
| --a | -a | float | | The First number |
| --b | -b | float | | The Second number |
+-----+--------+-------+---------+-------------------+
~/optfunc2$ python src/example_calc.py stats -h
Usage: src/example_calc.py stats [OPTIONS]
statistics of numbers in list
Arguments:
+-----------+--------+------+---------+--------------+
| Opt | Abbrev | Type | Default | Desc |
+-----------+--------+------+---------+--------------+
| --numbers | -n | list | | Target List. |
+-----------+--------+------+---------+--------------+
Usage
~/optfunc2$ python src/example_calc.py add -a 2.3 -b 3
2.3 + 3.0 = 5.3
~/optfunc2$ python src/example_calc.py -a 2.3 -b 3
2.3 + 3.0 = 5.3
~/optfunc2$ python src/example_calc.py multiply -x 3
3 × 5 = 15
~/optfunc2$ python src/example_calc.py multiply -x 2.3
2.3 × 5 = 11.5
~/optfunc2$ python src/example_calc.py stats --numbers '[1, 2, 3, 4, 5]'
sum: 15
average: 3.00
Code example2 -- list files
from optfunc2 import cmdline, cmdline_default, cmdline_start
import os
@cmdline_default
def list_files(directory: str = ".", show_size: bool = False):
"""List files in a directory.
Args:
directory (str, optional): Target directory. Defaults to ".".
show_size (bool, optional): Whether to show size of file. Defaults to False.
"""
for f in os.listdir(directory):
path = os.path.join(directory, f)
if show_size and os.path.isfile(path):
print(f"{f} ({os.path.getsize(path)} bytes)")
else:
print(f)
if __name__ == "__main__":
cmdline_start(header_doc="📁 file manager", has_abbrev=True)
Usage
$ python src/example_file_operator.py -h
Usage: src/example_file_operator.py [command] [<args>|--help]
📁 file manager
commands:
list_files [default] List files in a directory.
$ python src/example_file_operator.py list_files -h
Usage: src/example_file_operator.py list_files [OPTIONS]
List files in a directory.
Arguments:
+-------------+--------+------+---------+--------------------------------------------------+
| Opt | Abbrev | Type | Default | Desc |
+-------------+--------+------+---------+--------------------------------------------------+
| --directory | -d | str | '.' | Target directory. Defaults to ".". |
| --show_size | -s | bool | False | Whether to show size of file. Defaults to False. |
+-------------+--------+------+---------+--------------------------------------------------+
$ python src/example_file_operator.py
LICENSE.txt
.gitignore
pyproject.toml
$ python src/example_file_operator.py -s
LICENSE.txt (1081 bytes)
.gitignore (132 bytes)
pyproject.toml (719 bytes)
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
optfunc2-0.2.4.tar.gz
(6.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file optfunc2-0.2.4.tar.gz.
File metadata
- Download URL: optfunc2-0.2.4.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.0 CPython/3.9.21 Linux/6.8.0-52-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed43a7e93331c38203baf4fb81a71708059bfb41ce8e5d0d8c133c51d66c0f26
|
|
| MD5 |
8a30e5e291110887ccdd52291da8add3
|
|
| BLAKE2b-256 |
6be10de669cbd9ff1faa75c6bd83e1bffa5693bc69ccecf0a03ee02e42c947b7
|
File details
Details for the file optfunc2-0.2.4-py3-none-any.whl.
File metadata
- Download URL: optfunc2-0.2.4-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.0 CPython/3.9.21 Linux/6.8.0-52-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
990e856f63819eca3a5c35d662f534fd2002d14d638d9662b69924c77d738225
|
|
| MD5 |
6e03c8556c57d9f4e67481c197be89d6
|
|
| BLAKE2b-256 |
fc6b2f8431f9955c99da16708bed7d17373dedcc01709dcdce73f632650b9689
|