Opened 3 years ago
Last modified 3 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