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