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_commandyou wrote and where theinteractivevariable was reversed?