Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/devforfu/ancli
Building argument parser from a function annotation
https://github.com/devforfu/ancli
argparse cli package pip python
Last synced: about 1 month ago
JSON representation
Building argument parser from a function annotation
- Host: GitHub
- URL: https://github.com/devforfu/ancli
- Owner: devforfu
- License: mit
- Created: 2019-06-27T18:54:21.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-10-17T19:44:56.000Z (over 5 years ago)
- Last Synced: 2024-11-29T13:59:29.515Z (about 2 months ago)
- Topics: argparse, cli, package, pip, python
- Language: Python
- Homepage: https://pypi.org/project/ancli/
- Size: 82 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
ancli
=====.. image:: https://i.imgur.com/5hCKc9u.png
:target: https://i.imgur.com/5hCKc9u.png
:align: centerBuilding argument parser from a function annotation. A simple utility inspired by
``Fire`` and ``docopt``. Ad-hoc solution for someone who often writes scripts with a
single entry point.How?
----The process of building CLI with ``ancli`` is very simple.
1. Write a plain Python function with annotated parameters.
2. Wrap it with ``make_cli``.
3. Run your script.Examples
--------1. Function with annotated parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^The function ``run`` has explicitly annotated parameters and its signature is used
to instantiate ``argparse.ArgumentParser`` instance that accepts parameters with
specific types and default (if any) parameters. If default value is not provided,
then the parameter is considered to be required... code:: python
from ancli import make_cli
def run(path: str, flag: bool = True, iterations: int = 1):
print(f'run: path={path}, flag={flag}, iterations={iterations}')if __name__ == '__main__':
make_cli(run)Now this snippet can be used as follows.
.. code:: bash
$ python script.py --path file.txt --flag 0
run: path=file.txt, flag=False, iterations=12. Function without annotations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^The functions without type annotations try to infer the parameters types based
on their default values... code:: python
from ancli import make_cli
def run(a, b=2, c=3.0):
for param in (a, b, c):
print(type(param))if __name__ == '__main__':
make_cli(run)The parameters without default values are considered as strings.
.. code:: bash
$ python script.py --a 1 --b 2 --c 3.0
3. Running ``ancli`` as a module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Running package as a module allows to dynamically build a CLI from some function.
You just need to specify a path to the module, and function which should be
treated as an entry point... code:: bash
$ python -m ancli examples.functions:compute --a 2 --b 6
42