Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #1202 -- Changed 'manage.py shell' to use IPython if present. A…

…lso added '--plain' option, which overrides IPython to use the standard Python interactive prompt

git-svn-id: http://code.djangoproject.com/svn/django/trunk@1930 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 5e6d6fafae96fa55d754e88cc4cf814b75c32c13 1 parent 51f4e95
@adrianholovaty adrianholovaty authored
Showing with 31 additions and 6 deletions.
  1. +18 −6 django/core/management.py
  2. +13 −0 docs/django-admin.txt
View
24 django/core/management.py
@@ -814,11 +814,19 @@ def createcachetable(tablename):
db.db.commit()
createcachetable.args = "[tablename]"
-def run_shell():
- "Runs a Python interactive interpreter"
- import code
- code.interact()
-run_shell.args = ''
+def run_shell(use_plain=False):
+ "Runs a Python interactive interpreter. Tries to use IPython, if it's available."
+ try:
+ if use_plain:
+ # Don't bother loading IPython, because the user wants plain Python.
+ raise ImportError
+ import IPython
+ shell = IPython.Shell.IPShell()
+ shell.mainloop()
+ except ImportError:
+ import code
+ code.interact()
+run_shell.args = '[--plain]'
# Utilities for command-line script
@@ -878,6 +886,8 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING):
help='Python path to settings module, e.g. "myproject.settings.main". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.')
parser.add_option('--pythonpath',
help='Lets you manually add a directory the Python path, e.g. "/home/djangoprojects/myproject".')
+ parser.add_option('--plain', action='store_true', dest='plain',
+ help='Tells Django to use plain Python, not IPython, for "shell" command.')
options, args = parser.parse_args()
# Take care of options.
@@ -913,7 +923,9 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING):
sys.exit(1)
else:
action_mapping[action](username, email, password)
- elif action in ('init', 'shell', 'validate'):
+ elif action == 'shell':
+ action_mapping[action](options.plain is True)
+ elif action in ('init', 'validate'):
action_mapping[action]()
elif action == 'inspectdb':
try:
View
13 docs/django-admin.txt
@@ -156,6 +156,19 @@ Port 7000 on IP address 1.2.3.4::
django-admin.py runserver 1.2.3.4:7000
+shell
+-----
+
+Starts the Python interactive interpreter.
+
+**New in Django development version:** Uses IPython_, if it's installed. If you
+have IPython installed and want to force use of the "plain" Python interpreter,
+use the ``--plain`` option, like so::
+
+ django-admin.py shell --plain
+
+.. _IPython: http://ipython.scipy.org/
+
sql [modelmodule modelmodule ...]
---------------------------------
Please sign in to comment.
Something went wrong with that request. Please try again.