Fire : développement d'applications CLI en Python
Python propose un univers de modules, et donc un univers de possibilités pour faire parfois la même chose mais d’une manière plus efficace et/ou qui nous convient mieux, avec laquelle on est plus productive.
Aujourd’hui, je suis tombé sur un module sympa nommé fire, permettant de développer des applications command-line (cli) à gestion d’arguments et de documentations en suant le moins possible. Démo !
L’installation du module se fait via pip ou votre gestionnaire de paquet préféré. Pour ma part, je l’ai fait en virtualenv, donc ce sera pip:
$ pip install fire
Voici un exemple de script simple utilisant fire
:
#!/usr/bin/env python3
# coding: utf-8
import fire
def prenom(name):
"""
Return "Hello, <name>"
:param name: your name
"""
print("Hello,", name)
if __name__ == "__main__":
fire.Fire(
{
"name": prenom
}
)
Pour l’utiliser, il suffit de définir des fonctions avec une repr
précise comprenant :
- la description de cette fonction
:param
: à répéter autant de fois que vous avez d’arguments à votre fonction, afin de les décrire
Vos fonctions deviennent les sous-commandes de votre application. Une fois celles-ci écrites, vous n’avez qu'à instancier la classe Fire
du module fire
avec un dictionnaire formaté ainsi:
nom de la sous-commande : fonction reliée
Pour faire le mapping. Votre application est prête.
Exemple avec la mienne :
$ ./main.py name Sandro
Hello, Sandro
Si je veux afficher l’aide de mon application, un --help
est construit par fire
:
$ ./main.py --help
NAME
main.py
SYNOPSIS
main.py COMMAND
COMMANDS
COMMAND is one of the following:
name
Return "Hello, <name>"
Et la même option existe pour chaque sous-commande:
$ ./main.py name --help
NAME
main.py name - Return "Hello, <name>"
SYNOPSIS
main.py name NAME
DESCRIPTION
Return "Hello, <name>"
POSITIONAL ARGUMENTS
NAME
your name
NOTES
You can also use flags syntax for POSITIONAL ARGUMENTS
C’est assez pratique et bien plus rapide qu’utiliser argparse
, mais c’est toujours le même prix : on perd en modularité et en agilité.
fire
est développé par Google. Et comme ils le disent eux-même:
When you call Fire, it fires off (executes) your command.