Opened 9 years ago
Last modified 9 years ago
#25372 closed Bug
"TypeError: unorderable types: NoneType() < bool()" — at Version 1
Reported by: | Daniel Hahler | Owned by: | nobody |
---|---|---|---|
Component: | Core (Management commands) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I am seeing an error with manage.py's autocomplete for subcommands that do not use argparse:
% DJANGO_AUTO_COMPLETE=1 COMP_WORDS="manage.py shell_plus " COMP_CWORD=2 python manage.py Traceback (most recent call last): File "…/project/bin/manage.py", line 8, in <module> execute_from_command_line(sys.argv) File "…/django18/django/core/management/__init__.py", line 351, in execute_from_command_line utility.execute() File "…/django18/django/core/management/__init__.py", line 327, in execute self.autocomplete() File "…/django18/django/core/management/__init__.py", line 264, in autocomplete options = sorted((k, v) for k, v in options if k.startswith(curr)) TypeError: unorderable types: NoneType() < bool()
The problem appears to be that for subcommands that do not use argparse,
s_opt.nargs
does not get casted to a boolean:
if subcommand_cls.use_argparse: options.extend((sorted(s_opt.option_strings)[0], s_opt.nargs != 0) for s_opt in parser._actions if s_opt.option_strings) else: options.extend((s_opt.get_opt_string(), s_opt.nargs) for s_opt in parser.option_list)
The functions documentation says this:
Subcommand options are saved as pairs. A pair consists of
the long option string (e.g. '--exclude') and a boolean
value indicating if the option requires arguments. When printing to
stdout, an equal sign is appended to options which require arguments.