Opened 22 months ago

Closed 22 months ago

Last modified 22 months ago

#18555 closed Bug (invalid)

Calling management commands programmatically without options no longer works [regression]

Reported by: marcelcoding@… Owned by: nobody
Component: Core (Management commands) Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: 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/", 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:


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.

Attachments (0)

Change History (2)

comment:1 Changed 22 months ago by claudep

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

Calling commands programmatically must be done through call_command.

comment:2 Changed 22 months ago by marcelcoding@…

Well, that makes perfect sense and I'm glad I added the "I apologize in case I'm doing this wrong from the very beginning" in my report ;) Thank you very much for your swift reply and sorry for wasting your time.

Add Comment

Modify Ticket

Change Properties
<Author field>
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.