Evolution #4252
Fournir une bibliothèque de gestion des arguments de ligne de commandes
Description
En faisant la mise à jour des scripts creole il est apparu qu’un certains nombre d’options étaient réutilisées et réutilisables :
parser.add_argument("-c", "--container", help=u"nom du conteneur conteneur")
parser.add_argument("-l", "--log-level", choices=['debug', 'info', 'warning', 'error', 'critical'],
default='error', help=u"Niveau de log")
parser.add_argument("-v", "--verbose", action='store_true',
help=u"Activer l’affichage verbeux")
parser.add_argument("-d", "--debug", action='store_true',
help=u"Activer l’affichage des tracebacks")
Il serait intéressant de fournir des parseurs génériques groupés par type:
p1 = argparse.ArgumentParser(description="Containers options", add_help=False)
g1 = p1.add_argument_group('container')
g1.add_argument("-c", "--container", help=u"Name of LXC container")
p2 = argparse.ArgumentParser(description="Logging options", add_help=False)
g2 = p2.add_argument_group('logging')
g2.add_argument("-l", "--log-level", choices=['debug', 'info', 'warning', 'error', 'critical'], default='error', help=u"Log level")
g2.add_argument("-v", "--verbose", action='store_true', help=u"Verbose mode")
g2.add_argument("-d", "--debug", action='store_true', help=u"Debug mode")
p = argparse.ArgumentParser(description="Shell script options", parents=[p1, p2])
p.add_argument('bidule', help=u"Name of a bidule")
Ce qui donne la sortie :
usage: ipython [-h] [-c CONTAINER] [-l {debug,info,warning,error,critical}] [-v] [-d] bidule Shell script options positional arguments: bidule Name of a bidule optional arguments: -h, --help show this help message and exit container: -c CONTAINER, --container CONTAINER Name of LXC container logging: -l {debug,info,warning,error,critical}, --log-level {debug,info,warning,error,critical} Log level -v, --verbose Verbose mode -d, --debug Debug mode
Révisions associées
Ajout d’une bibliothèque de gestion des arguments de ligne de commandes
- pyeole/scriptargs.py (container): Prend en charge l’option standard de
nom conteneur LXC.
(logging): Prend en charge les options standards de logging.
Fixes: #4252 @25m
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 11 ans
Les options --verbose
et --debug
devrait même être mutuellement exclusive
#2 Mis à jour par Daniel Dehennin il y a plus de 11 ans
Au niveau utilisation je verrais bien :
from pyeole.argparse import container, logging
parser = argparse.ArgumentParser(description="A command that make bidule", parents=[container(), logging()])
pyeole.argparse.container
et pyeole.argparse.logging
sont deux fonctions qui retourne un object parser.
#3 Mis à jour par Daniel Dehennin il y a plus de 11 ans
- Statut changé de Nouveau à Accepté
- Assigné à changé de developpeurs_eole à Daniel Dehennin
Comme j’ai déjà fait le code pour faire la demande et que personne ne semble avoir d’avis à opposer ;-)
#4 Mis à jour par Daniel Dehennin il y a plus de 11 ans
Ne pas nommer un sous-module du nom d’un autre sinon gare aux imports dans les doctest de module, depuis pyeole.argparse
:
"""Generic command line arguments parsers
>>> import argparse
>>> parser = argparse.ArgumentParser(description="A command that make bidule")
"""
Provoque une erreur car ArgumentParser n’est pas une fonction du module local pyeole.argparse
Une option serait de ne pas faire de doctest dans le module, car à l’utilisation, ça fonctionne :
>>> import pyeole
>>> import argparse
>>> parser = argparse.ArgumentParser(description="A command that make bidule", parents=[pyeole.argparse.container(), pyeole.argparse.logging()])
>>> parser.parse_args('-d'.split())
Namespace(container=None, debug=True, log_level='error', verbose=False)
#5 Mis à jour par Daniel Dehennin il y a plus de 11 ans
- Statut changé de Accepté à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit ac4e5fcb0e52052446b2575408a6a019c63359dc.
#6 Mis à jour par Joël Cuissinat il y a plus de 11 ans
- Statut changé de Résolu à Fermé
Très bien, très bien.