Python Language Exemple avancé avec docopt et docopt_dispatch


Exemple

Comme avec docopt, avec [docopt_dispatch] vous créez votre --help dans la variable __doc__ de votre module de point d'entrée. Là, vous appelez dispatch avec la chaîne de caractères en argument, afin de pouvoir exécuter l'analyseur dessus.

Cela étant, au lieu de manipuler manuellement les arguments (qui se terminent généralement par une structure if / else cyclomatique élevée), vous laissez le soin d’expédier uniquement en fonction de la manière dont vous souhaitez gérer l’ensemble des arguments.

C'est à cela que sert le décorateur dispatch.on : vous lui donnez l'argument ou la séquence d'arguments qui devrait déclencher la fonction, et cette fonction sera exécutée avec les valeurs correspondantes en tant que paramètres.

"""Run something in development or production mode.

Usage: run.py --development <host> <port>
       run.py --production <host> <port>
       run.py items add <item>
       run.py items delete <item>

"""
from docopt_dispatch import dispatch

@dispatch.on('--development')
def development(host, port, **kwargs):
    print('in *development* mode')

@dispatch.on('--production')
def development(host, port, **kwargs):
    print('in *production* mode')

@dispatch.on('items', 'add')
def items_add(item, **kwargs):
    print('adding item...')

@dispatch.on('items', 'delete')
def items_delete(item, **kwargs):
    print('deleting item...')

if __name__ == '__main__':
    dispatch(__doc__)