﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
23551	Exception raised when using the bash autocompletion with Python 3	Marco Buttu	nobody	"My environment is Python 3.4 and Linux Mint 17. When using the django autocompletion, a TAB-completion after a command gives me an exception. For instance, typing a TAB after *django-admin startproject*:

{{{
$ django-admin startproject Traceback (most recent call last):
      ...
  File "".../django/core/management/__init__.py"", line 262, in autocomplete
    options = sorted((k, v) for k, v in options if k.startswith(curr))
  TypeError: unorderable types: bool() < NoneType()
}}}


That happens because at line 225 the *options* list is initilized as:


{{{
    options = [('--help', None)]
}}}


and at line 263:


{{{
    options = sorted((k, v) for k, v in options if k.startswith(curr))
}}}


But since *options* contains *--help* twice, in Python 3 we get an error comparing a *bool* with *None*:


{{{
    >>> sorted([('foo', True), ('--help', False), ('--help', None)])
    Traceback (most recent call last):
        ...
    TypeError: unorderable types: NoneType() < bool()
}}}


That obviously does not happen in Python 2. The doctring of *autocomplete()* says:


{{{
    >>> from django.core.management import ManagementUtility
    >>> for line in ManagementUtility.autocomplete.__doc__.splitlines()[10:15]:
    ...     print(line)
    ... 

            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.
}}}


So, how come *options* is initialized with the pair *('--help', None)* instead of *('--help', False)*?"	Bug	new	Utilities	dev	Normal				Unreviewed	0	0	0	0	0	0
