Projet

Général

Profil

Evolution #4252

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

Ajouté par Daniel Dehennin il y a plus de 11 ans. Mis à jour il y a plus de 11 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
10/10/2012
Echéance:
% réalisé:

100%

Temps passé:
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

Révisions associées

Révision ac4e5fcb (diff)
Ajouté par Daniel Dehennin il y a plus de 11 ans

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

#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.

Formats disponibles : Atom PDF