Calling management commands programmatically without options no longer works [regression]
|Reported by:||Owned by:||nobody|
|Component:||Core (Management commands)||Version:||master|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
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:
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
was replaced with:
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.