Project

General

Profile

Evolution #4252

Fournir une bibliothèque de gestion des arguments de ligne de commandes

Added by Daniel Dehennin over 7 years ago. Updated about 7 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Category:
-
Start date:
10/10/2012
Due date:
% Done:

100%

Spent time:
Distribution:
EOLE 2.4

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

Associated revisions

Revision ac4e5fcb (diff)
Added by Daniel Dehennin over 7 years ago

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

History

#1 Updated by Daniel Dehennin over 7 years ago

Les options --verbose et --debug devrait même être mutuellement exclusive

#2 Updated by Daniel Dehennin over 7 years ago

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 Updated by Daniel Dehennin over 7 years ago

  • Status changed from Nouveau to Accepté
  • Assigned To changed from developpeurs_eole to Daniel Dehennin

Comme j’ai déjà fait le code pour faire la demande et que personne ne semble avoir d’avis à opposer ;-)

#4 Updated by Daniel Dehennin over 7 years ago

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 Updated by Daniel Dehennin over 7 years ago

  • Status changed from Accepté to Résolu
  • % Done changed from 0 to 100

#6 Updated by Joël Cuissinat about 7 years ago

  • Status changed from Résolu to Fermé

Très bien, très bien.

Also available in: Atom PDF