2024-03-11 15:14:59 +01:00
2024-03-11 15:05:22 +01:00
2022-07-11 04:01:43 +02:00
2022-07-11 17:31:34 +09:00
2024-03-11 15:14:59 +01:00
2023-09-18 12:27:24 +09:00
2023-08-19 21:55:30 +09:00
2023-08-16 15:46:44 +09:00

magiʟɪ

Automatically turn functions of file into command line interface.

Install

pip install magicli

Get started

Hello world example.

Docstrings can be added to variables by using typing.Annotated. A short option can be added as a third argument to Annotated.

By default the first function is called automatically. All following functions in the file are treated as commands. Functions starting with an underscore are ignored.

from typing import Annotated

def hello(
    name: Annotated[str, 'Person to greet.'],
    amount: Annotated[int, 'How often to greet.', 'a']=1,
):
    for _ in range(amount):
        print(f"Hello {name}!")

if __name__ == '__main__':
    import magicli
$ hello world 3
Hello world!
Hello world!
Hello world!

Define name of CLI in setup.py

In order to define the name of the CLI, it needs to be defined in the setup.py file. The following code sets up a sample CLI with the following folder structure.

hello/
└── setup.py
└── hello.py

setup.py

from setuptools import setup

setup(
    name='hello',
    version='0.1.0',
    install_requires=[
        'magicli'
    ],
    entry_points={
        'console_scripts':[
            'hello=hello:main'
        ]
    }
)

hello.py

from magicli import magicli

def main():
    magicli()

def hello(name='World', amount=1):
    for _ in range(int(amount)):
        print(f'Hello {name}!')

The script can then be called in the following way.

hello Name --amount 3

This outputs

Hello Name!
Hello Name!
Hello Name!

Help message

By default, a help message will be created based on the available functions. For the example above, calling hello --help will display this help message.

Usage:
    hello --name --amount
Description
Automatically turn functions of file into command line interface.
https://pypi.org/project/magicli/
Readme
Languages
Python 100%