Opened 9 years ago
Last modified 9 years ago
#26597 closed Bug
Optparse for `noinput` and `interactive` can produce unwanted results when passed togeather — at Version 2
| 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 (2)
comment:1 by , 9 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 9 years ago
| Description: | modified (diff) |
|---|