2015-03-16 1 views
0

argparse est l'outil que Django (prétendument) utilise pour analyser la ligne de commande, selon this commit et this support ticket.Pourquoi est-ce que l'option optparse est toujours utilisée dans Django v1.7.4?

Cependant, neuf mois se sont écoulés maintenant, et quand je visite la déclaration BaseCommand je vois:

from optparse import make_option, OptionParser 

... 

option_list = (
    make_option('-v', '--verbosity', action='store', dest='verbosity', default='1', 
     type='choice', choices=['0', '1', '2', '3'], 
     help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output'), 
    make_option('--settings', 
     help='The Python path to a settings module, e.g. "myproject.settings.main". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.'), 
    make_option('--pythonpath', 
     help='A directory to add to the Python path, e.g. "/home/djangoprojects/myproject".'), 
    make_option('--traceback', action='store_true', 
     help='Raise on exception'), 
    make_option('--no-color', action='store_true', dest='no_color', default=False, 
     help="Don't colorize the command output."), 
) 

Quand est-ce Django utiliser argparse en 1.7?

Répondre

2

La validation du lien vers est v1.8b2. En regardant le code source des branches stables v1.7.x et v1.8.x, il semblerait que argparse sera introduit par défaut dans la version 1.8. Voir aussi le release notes pour v1.8.

Cependant, optparse restera comme une option de secours (pour permettre le support continu des versions de Python antérieures à 2.7/3.2) jusqu'à Django v2. Selon le test source code:

optparse doit être pris en charge au cours de Django 1.8/1.9 versions

+0

Bon sang -.- vous 'avez raison. N'a pas vérifié le code source entier, et a pensé que c'était pour 1.7. Je peux penser à un lof de commandes manage.py dans des applications tierces qui seront cassées en 1.8. –

+1

@LuisMasuelli vrai. Comme le disent les notes de version: * "Vous pouvez rendre votre commande rétrocompatible en définissant simplement la variable de classe' args' Cependant, si vous n'avez pas besoin de garder la compatibilité avec les anciennes versions de Django, il vaut mieux implémenter le nouveau 'add_arguments() 'méthode décrite dans [Écrire des commandes django-admin personnalisées] (https://docs.djangoproject.com/fr/dev/howto/custom-management-commands/)." * – jonrsharpe