Opened 2 years ago

Last modified 2 years ago

#33892 closed Bug

Management commands with flags using action="store_false" create possible inverted boolean flags in call_command — at Initial Version

Reported by: Luke Wiwatowski Owned by: nobody
Component: Core (Management commands) Version: 4.0
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

Description

In any management command which parses a flag using the action store_false it has an unexpected side effect when calling the management command from the call_command function. When call_command parses the arg it won't be taken into account the action and can create weird inversions of the intent of the boolean.

example:

from the command line this will work fine:

./manage.py flush --no-input

However if called from the call_command with one of the recommended ways we might expect no_input=True to work the same but it doesn't.

from django.core.management import call_command

call_command("flush", no_input=True)

You have requested a flush of the database.
This will IRREVERSIBLY DESTROY all data currently in the ":memory:" database,
and return each table to an empty state.
Are you sure you want to do this?

    Type 'yes' to continue, or 'no' to cancel: 

call_command("flush", no_input=False)  # This will continue with no input required

I'm not sure how widespread this is but flush is definitely affected

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top