Dans notre CLI, toutes les commandes sont regroupées sous un seul groupe de commandes. Cela nous a permis d'implémenter un comportement qui devait être exécuté pour chaque commande. Une partie de cela est la gestion des exceptions.
Notre point d'entrée ressemble à quelque chose comme ceci:
@click.group()
@click.pass_context
def entry_point(ctx):
ctx.obj = {"example": "This could be the configuration"}
Nous l'utilisons pour exécuter du code global, par exemple configurez le context
, mais vous pouvez également définir une méthode vide qui ne fait rien. D'autres commandes peuvent être ajoutées à ce groupe de commandes en utilisant le décorateur @entry_point.command()
ou entry_point.add_command(cmd)
.
Pour la gestion des exceptions, nous terminerons la entry_point
dans une autre méthode qui gère les exceptions:
def safe_entry_point():
try:
entry_point()
except Exception as e:
click.echo(e)
Dans setup.py
, il faut configurer le point d'entrée pour la CLI et de pointer vers l'emballage:
entry_points={
'console_scripts': [
'cli = my.package:safe_entry_point'
]
}
Les commandes de l'interface de ligne de commande peuvent être exécutées via son groupe de commandes: par ex. cli command
.
Il pourrait y avoir des solutions plus élégantes, mais c'est ainsi que nous l'avons résolu. Alors qu'il introduit un groupe de commandes comme élément de plus haut niveau dans votre CLI, il nous permet de gérer toutes les exceptions dans un seul endroit sans avoir à dupliquer le traitement des erreurs dans chaque commande.