Skip to main content

Generate command line options and help/tips from function automatically.

Project description

Call function directly in cmd line

Features

  1. Allow user call functions directly in command line.
  2. Generate help tips automatically.
  3. Add default called functions if not function was specific.
  4. Support hexadecimal format input for integer arguments.

Notice

  1. It's better to add argument type for each autocall functions.
  2. Function with @optfunc_default has @optfunc implicitly.
  3. 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)

Hexadecimal Support

optfunc2 now supports hexadecimal format input for integer arguments. You can use both decimal and hexadecimal formats:

@cmdline
def hex_converter(number: int):
    """Convert number to different bases
    
    Args:
        number: Input number (supports decimal and hexadecimal)
    """
    print(f"Decimal: {number}")
    print(f"Hexadecimal: {hex(number)}")
    print(f"Binary: {bin(number)}")

Usage examples:

# Decimal input
$ python example.py hex_converter --number 42
Decimal: 42
Hexadecimal: 0x2a
Binary: 0b101010

# Hexadecimal input (both lowercase and uppercase supported)
$ python example.py hex_converter --number 0x2A
Decimal: 42
Hexadecimal: 0x2a
Binary: 0b101010

$ python example.py hex_converter --number 0XFF
Decimal: 255
Hexadecimal: 0xff
Binary: 0b11111111

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


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.7.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

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

optfunc2-0.2.7-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file optfunc2-0.2.7.tar.gz.

File metadata

  • Download URL: optfunc2-0.2.7.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.26.6 CPython/3.14.3 Linux/4.18.0-526.el8.x86_64

File hashes

Hashes for optfunc2-0.2.7.tar.gz
Algorithm Hash digest
SHA256 f585504d5681c9a905ec9baefe9ca3cccc909131a3a130391064538f399be2e2
MD5 619c3062b151a7c26f01591415e10f01
BLAKE2b-256 4e629e21c2cd09e14c82f896169bf895d24e9062ec0e27a29016899ab37daf7d

See more details on using hashes here.

File details

Details for the file optfunc2-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: optfunc2-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.26.6 CPython/3.14.3 Linux/4.18.0-526.el8.x86_64

File hashes

Hashes for optfunc2-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 6a5e90afbedfe2fe16f262a2ac214fd7be98030f644edae7da9ce52acc8bdc01
MD5 b0a6d7e9fa27042ae4935833175255ee
BLAKE2b-256 0e1a659a647746e84f6928a5ff2ec5c8715197a776d5066115ddafe3c1fc787f

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