﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
18555	Calling management commands programmatically without options no longer works [regression]	marcelcoding@…	nobody	"I apologize in case I'm doing this wrong from the very beginning, but for my application this looks like a relatively recent ""cleanup"" introduced a regression...

In Django 1.3.1, I was able to call the syncdb command from my python application like this:

{{{
django.core.management.commands.syncdb.Command().handle_noargs(interactive=False)
}}}

If I'm doing this with django on trunk, I get
{{{
File ""/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py"", line 28, in handle_noargs
    verbosity = int(options.get('verbosity'))
TypeError: int() argument must be a string or a number, not 'NoneType'
}}}

This seems to be a direct result from the fixes for ticket #13760 and similar, where code like
{{{
int(options.get('verbosity', 1))
}}}
was replaced with:
{{{
int(options.get('verbosity'))
}}}

The reasoning behind these patches was that the getopt parsing already provides reasonable defaults for all options -- but this is only true for arguments provided by the command line and not when a handle or handle_noargs method is called directly.

You can of course easily work around this problem by explicitly providing the options explicitely (in my case, I have to add verbosity=0 and database='default') -- but I wonder whether there is not a bunch of code out there that will break like mine did...

I don't know what a good solution would be, specifying defaults twice (and possibly inconsistently) as previously is certainly not an option."	Bug	closed	Core (Management commands)	dev	Normal	invalid			Unreviewed	0	0	0	0	0	0
