Opened 9 years ago
Closed 9 years ago
#26597 closed Bug (needsinfo)
Optparse incorrect relationship between `noinput` and `interactive` in management command
Reported by: | Joseph Kahn | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 1.8 |
Severity: | Normal | Keywords: | migrate argparse command |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
The option mapping for argparse in call_command
is incorrectly mapping args. For example, it maps noinput
to interactive
and does not take into account that they are opposites. Here's where the bug is:
Because of the way options are parsed on:
https://github.com/django/django/blob/1.8.13/django/core/management/__init__.py#L106-L108
I assume this is present on other management commands, but I have not tested them.
(note, I simplified opt_mapping
to just the example)
The following command:
arg_options = {opt_mapping.get(key, key): value for key, value in options.items()}
can be run as:
{{'noinput': 'interactive'}.get(key, key): value for key, value in [('verbosity', 0), ('fake', True), ('list', True), ('fake_initial', True), ('app_label', 'tests'), ('noinput', True)]}
leading to interactive
being True.
Change History (5)
comment:1 by , 9 years ago
Description: | modified (diff) |
---|
comment:2 by , 9 years ago
Description: | modified (diff) |
---|
comment:3 by , 9 years ago
Summary: | Optparse for `noinput` and `interactive` can produce unwanted results when passed togeather → Optparse incorrect relationship between `noinput` and `interactive` in management command |
---|
comment:4 by , 9 years ago
comment:5 by , 9 years ago
Resolution: | → needsinfo |
---|---|
Status: | new → closed |
Could you please give us an example of a
call_command
you wrote and where theinteractive
variable was reversed?