diff options
| author | Alex Gaynor | 2009-08-10 11:52:35 -0500 | 
|---|---|---|
| committer | Alex Gaynor | 2009-08-10 11:52:35 -0500 | 
| commit | 90681f01b4ba3261fb1a44559dc0ada539249719 (patch) | |
| tree | ae4048a057da9bd9a7aad7234dd487fc8cb131fd /debug_toolbar/management | |
| parent | b1bd5c0262a15a1c2b5c34d5c84b4215810efcd0 (diff) | |
| parent | b5ccbcdfa1b4cc71aec7c289d455298bc5cd1bfb (diff) | |
| download | django-debug-toolbar-90681f01b4ba3261fb1a44559dc0ada539249719.tar.bz2 | |
Merge commit 'rob/master'
Diffstat (limited to 'debug_toolbar/management')
| -rw-r--r-- | debug_toolbar/management/__init__.py | 0 | ||||
| -rw-r--r-- | debug_toolbar/management/commands/__init__.py | 0 | ||||
| -rw-r--r-- | debug_toolbar/management/commands/debugsqlshell.py | 84 | 
3 files changed, 84 insertions, 0 deletions
diff --git a/debug_toolbar/management/__init__.py b/debug_toolbar/management/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debug_toolbar/management/__init__.py diff --git a/debug_toolbar/management/commands/__init__.py b/debug_toolbar/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/debug_toolbar/management/commands/__init__.py diff --git a/debug_toolbar/management/commands/debugsqlshell.py b/debug_toolbar/management/commands/debugsqlshell.py new file mode 100644 index 0000000..84b4a2f --- /dev/null +++ b/debug_toolbar/management/commands/debugsqlshell.py @@ -0,0 +1,84 @@ +import os +from optparse import make_option + +from django.core.management.base import NoArgsCommand +from django.db.backends import util + +# Optional sqlparse to make the SQL look pretty... +# http://code.google.com/p/python-sqlparse/ +try: +    import sqlparse +except ImportError: +    sqlparse = None + +class PrintQueryWrapper(util.CursorDebugWrapper): +    def execute(self, sql, params=()): +        try: +            return self.cursor.execute(sql, params) +        finally: +            raw_sql = self.db.ops.last_executed_query(self.cursor, sql, params) +            if sqlparse: +                print sqlparse.format(raw_sql, reindent=True) +            else: +                print raw_sql +            print + +util.CursorDebugWrapper = PrintQueryWrapper + +# The rest is copy/paste from django/core/management/commands/shell.py + +class Command(NoArgsCommand): +    option_list = NoArgsCommand.option_list + ( +        make_option('--plain', action='store_true', dest='plain', +            help='Tells Django to use plain Python, not IPython.'), +    ) +    help = "Runs a Python interactive interpreter. Tries to use IPython, if it's available." + +    requires_model_validation = False + +    def handle_noargs(self, **options): +        # XXX: (Temporary) workaround for ticket #1796: force early loading of all +        # models from installed apps. +        from django.db.models.loading import get_models +        loaded_models = get_models() + +        use_plain = options.get('plain', False) + +        try: +            if use_plain: +                # Don't bother loading IPython, because the user wants plain Python. +                raise ImportError +            import IPython +            # Explicitly pass an empty list as arguments, because otherwise IPython +            # would use sys.argv from this script. +            shell = IPython.Shell.IPShell(argv=[]) +            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: +                pass +            else: +                # 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") + +            # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system +            # conventions and get $PYTHONSTARTUP first then import user. +            if not use_plain: +                pythonrc = os.environ.get("PYTHONSTARTUP") +                if pythonrc and os.path.isfile(pythonrc): +                    try: +                        execfile(pythonrc) +                    except NameError: +                        pass +                # This will import .pythonrc.py as a side-effect +                import user +            code.interact(local=imported_objects)  | 
