Skip to content

Commit

Permalink
Adds interpreter option to shell command as per ticket #18639
Browse files Browse the repository at this point in the history
Specify python interpreter interface ipython or bpython with the -i,
--interface options
argument.
 ex// python manage.py shell -i bpython
 ex// python manage.py shell --interface bpython

Like all other options, defaults to default python interpreter when your
selected choice isn't available.

updated documentation where appropriate
  • Loading branch information
mgrouchy committed Jul 17, 2012
1 parent aeda55e commit f2abfe1
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 5 deletions.
20 changes: 15 additions & 5 deletions django/core/management/commands/shell.py
Expand Up @@ -2,13 +2,19 @@
from django.core.management.base import NoArgsCommand from django.core.management.base import NoArgsCommand
from optparse import make_option from optparse import make_option



class Command(NoArgsCommand): class Command(NoArgsCommand):
shells = ['ipython', 'bpython']

option_list = NoArgsCommand.option_list + ( option_list = NoArgsCommand.option_list + (
make_option('--plain', action='store_true', dest='plain', make_option('--plain', action='store_true', dest='plain',
help='Tells Django to use plain Python, not IPython or bpython.'), help='Tells Django to use plain Python, not IPython or bpython.'),
make_option('-i', '--interface', action='store', type='choice', choices=shells,
dest='interface',
help='Specify an interactive interpreter interface. Available options: "ipython" and "bpython"'),

) )
help = "Runs a Python interactive interpreter. Tries to use IPython or bpython, if one of them is available." help = "Runs a Python interactive interpreter. Tries to use IPython or bpython, if one of them is available."
shells = ['ipython', 'bpython']
requires_model_validation = False requires_model_validation = False


def ipython(self): def ipython(self):
Expand All @@ -31,8 +37,10 @@ def bpython(self):
import bpython import bpython
bpython.embed() bpython.embed()


def run_shell(self): def run_shell(self, shell=None):
for shell in self.shells: available_shells = [shell] if shell else self.shells

for shell in available_shells:
try: try:
return getattr(self, shell)() return getattr(self, shell)()
except ImportError: except ImportError:
Expand All @@ -46,19 +54,21 @@ def handle_noargs(self, **options):
get_models() get_models()


use_plain = options.get('plain', False) use_plain = options.get('plain', False)
interface = options.get('interface', None)


try: try:
if use_plain: if use_plain:
# Don't bother loading IPython, because the user wants plain Python. # Don't bother loading IPython, because the user wants plain Python.
raise ImportError raise ImportError
self.run_shell()
self.run_shell(shell=interface)
except ImportError: except ImportError:
import code import code
# Set up a dictionary to serve as the environment for the shell, so # Set up a dictionary to serve as the environment for the shell, so
# that tab completion works on objects that are imported at runtime. # that tab completion works on objects that are imported at runtime.
# See ticket 5082. # See ticket 5082.
imported_objects = {} imported_objects = {}
try: # Try activating rlcompleter, because it's handy. try: # Try activating rlcompleter, because it's handy.
import readline import readline
except ImportError: except ImportError:
pass pass
Expand Down
18 changes: 18 additions & 0 deletions docs/ref/django-admin.txt
Expand Up @@ -743,6 +743,24 @@ use the ``--plain`` option, like so::


django-admin.py shell --plain django-admin.py shell --plain


.. versionchanged:: 1.5

If you would like to specify either IPython or bpython as your interpreter if
you have both installed you can specify an alternative interpreter interface
with the ``-i`` or ``--interface`` options like so::

IPython::

django-admin.py shell -i ipython
django-admin.py shell --interface ipython


bpython::

django-admin.py shell -i bpython
django-admin.py shell --interface bpython


.. _IPython: http://ipython.scipy.org/ .. _IPython: http://ipython.scipy.org/
.. _bpython: http://bpython-interpreter.org/ .. _bpython: http://bpython-interpreter.org/


Expand Down

0 comments on commit f2abfe1

Please sign in to comment.