From e301d8992cb1897cc93d84fc5d78a4c0769f5a8c Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Mon, 6 Aug 2007 05:04:27 +0000 Subject: [PATCH] Fixed #5082 -- Enabled tab completion in 'django-admin.py shell' for objects that were imported into the global namespace at runtime. Thanks, dusk@woofle.net git-svn-id: http://code.djangoproject.com/svn/django/trunk@5809 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- AUTHORS | 1 + django/core/management.py | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index 3224f4773b311..d2c799ad3e366 100644 --- a/AUTHORS +++ b/AUTHORS @@ -96,6 +96,7 @@ answer newbie questions, and generally made Django that much better: Maximillian Dornseif Jeremy Dunck Andrew Durdin + dusk@woofle.net Andy Dustman Clint Ecker enlight diff --git a/django/core/management.py b/django/core/management.py index 6da1f3ea35528..0bcc612c4b8a3 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -1300,6 +1300,10 @@ def run_shell(use_plain=False): shell.mainloop() except ImportError: import code + # Set up a dictionary to serve as the environment for the shell, so + # that tab completion works on objects that are imported at runtime. + # See ticket 5082. + imported_objects = {} try: # Try activating rlcompleter, because it's handy. import readline except ImportError: @@ -1308,8 +1312,9 @@ def run_shell(use_plain=False): # We don't have to wrap the following import in a 'try', because # we already know 'readline' was imported successfully. import rlcompleter + readline.set_completer(rlcompleter.Completer(imported_objects).complete) readline.parse_and_bind("tab:complete") - code.interact() + code.interact(local=imported_objects) run_shell.args = '[--plain]' def dbshell(): @@ -1424,7 +1429,7 @@ def load_data(fixture_labels, verbosity=1): print "Installing %s fixture '%s' from %s." % \ (format, fixture_name, humanize(fixture_dir)) try: - objects = serializers.deserialize(format, fixture) + objects = serializers.deserialize(format, fixture) for obj in objects: count[0] += 1 models.add(obj.object.__class__)