Commit 110c7293 authored by Alex Gaynor's avatar Alex Gaynor
Browse files

Merge pull request #215 from mgrouchy/add-interpreter-options

Adds interpreter option to shell command as per ticket #18639
parents 52df0d50 f2abfe1e
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -2,13 +2,19 @@ import os
from django.core.management.base import NoArgsCommand
from optparse import make_option


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

    option_list = NoArgsCommand.option_list + (
        make_option('--plain', action='store_true', dest='plain',
            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."
    shells = ['ipython', 'bpython']
    requires_model_validation = False

    def ipython(self):
@@ -31,8 +37,10 @@ class Command(NoArgsCommand):
        import bpython
        bpython.embed()

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

        for shell in available_shells:
            try:
                return getattr(self, shell)()
            except ImportError:
@@ -46,12 +54,14 @@ class Command(NoArgsCommand):
        get_models()

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

        try:
            if use_plain:
                # Don't bother loading IPython, because the user wants plain Python.
                raise ImportError
            self.run_shell()

            self.run_shell(shell=interface)
        except ImportError:
            import code
            # Set up a dictionary to serve as the environment for the shell, so
+18 −0
Original line number Diff line number Diff line
@@ -743,6 +743,24 @@ use the ``--plain`` option, like so::

    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/
.. _bpython: http://bpython-interpreter.org/