Kaydet (Commit) 8da2322c authored tarafından Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss

Fixed #10080: `call_command` now takes option defaults into account, sparing…

Fixed #10080: `call_command` now takes option defaults into account, sparing individual commands from any difference between `call_command` and being run from the shell. Thanks, Alex Koshelev.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10400 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 20b598bf
import os
import sys
from optparse import OptionParser
from optparse import OptionParser, NO_DEFAULT
import imp
import django
......@@ -144,6 +144,7 @@ def call_command(name, *args, **options):
call_command('shell', plain=True)
call_command('sqlall', 'myapp')
"""
# Load the command object.
try:
app_name = get_commands()[name]
if isinstance(app_name, BaseCommand):
......@@ -153,7 +154,17 @@ def call_command(name, *args, **options):
klass = load_command_class(app_name, name)
except KeyError:
raise CommandError, "Unknown command: %r" % name
return klass.execute(*args, **options)
# Grab out a list of defaults from the options. optparse does this for us
# when the script runs from the command line, but since call_command can
# be called programatically, we need to simulate the loading and handling
# of defaults (see #10080 for details).
defaults = dict([(o.dest, o.default)
for o in klass.option_list
if o.default is not NO_DEFAULT])
defaults.update(options)
return klass.execute(*args, **defaults)
class LaxOptionParser(OptionParser):
"""
......
from optparse import make_option
from django.core.management.base import BaseCommand
class Command(BaseCommand):
......@@ -5,5 +6,9 @@ class Command(BaseCommand):
args = ''
requires_model_validation = True
option_list =[
make_option("-s", "--style", default="Rock'n'Roll")
]
def handle(self, *args, **options):
print "I don't feel like dancing."
\ No newline at end of file
print "I don't feel like dancing %s." % options["style"]
......@@ -17,8 +17,8 @@ __test__ = {'API_TESTS': """
>>> from django.core import management
# Invoke a simple user-defined command
>>> management.call_command('dance')
I don't feel like dancing.
>>> management.call_command('dance', style="Jive")
I don't feel like dancing Jive.
# Invoke a command that doesn't exist
>>> management.call_command('explode')
......@@ -26,5 +26,8 @@ Traceback (most recent call last):
...
CommandError: Unknown command: 'explode'
# Invoke a command with default option `style`
>>> management.call_command('dance')
I don't feel like dancing Rock'n'Roll.
"""}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment