thirdparty/google_appengine/lib/django/extras/django_bash_completion
author Pawel Solyga <Pawel.Solyga@gmail.com>
Wed, 15 Oct 2008 14:06:33 +0000
changeset 338 0d78f41dde9b
parent 109 620f9b141567
permissions -rw-r--r--
Show "Created by" read-only field in Document Edit view. Update size of TinyMCE widget in Document Edit/Create views. Change user property name to founder in Document model and update files according to this change (now founder is used in Group and Document models). Remove not used variables and imports in views/site/docs/edit.py. Refactor EditForm and CreateForm in views/site/docs/edit.py so that EditForm inherits from CreateForm and just extends it. Patch by: Pawel Solyga Review by: to-be-reviewed

# #########################################################################
# This bash script adds tab-completion feature to django-admin.py and
# manage.py.
#
# Testing it out without installing
# =================================
#
# To test out the completion without "installing" this, just run this file
# directly, like so:
#
#     . ~/path/to/django_bash_completion
#
# Note: There's a dot ('.') at the beginning of that command.
#
# After you do that, tab completion will immediately be made available in your
# current Bash shell. But it won't be available next time you log in.
#
# Installing
# ==========
#
# To install this, point to this file from your .bash_profile, like so:
#
#     . ~/path/to/django_bash_completion
#
# Do the same in your .bashrc if .bashrc doesn't invoke .bash_profile.
#
# Settings will take effect the next time you log in.
#
# Uninstalling
# ============
#
# To uninstall, just remove the line from your .bash_profile and .bashrc.

# Enable extended pattern matching operators.
shopt -s extglob

_django_completion()
{
    local cur prev opts actions action_shell_opts action_runfcgi_opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    # Standalone options
    opts="--help --settings --pythonpath --version"
    # Actions
    actions="adminindex createcachetable dbshell diffsettings \
             inspectdb install reset runfcgi runserver \
             shell sql sqlall sqlclear sqlindexes sqlinitialdata \
             sqlreset sqlsequencereset startapp startproject \
             syncdb validate"
    # Action's options
    action_shell_opts="--plain"
    action_runfcgi_opts="host port socket method maxspare minspare maxchildren daemonize pidfile workdir"

    if [[ # django-admin.py, ./manage, manage.py
          ( ${COMP_CWORD} -eq 1 &&
            ( ${COMP_WORDS[0]} == django-admin.py ||
              ${COMP_WORDS[0]} == ./manage.py ||
              ${COMP_WORDS[0]} == manage.py ) )
          ||
          # python manage.py, /some/path/python manage.py (if manage.py exists)
          ( ${COMP_CWORD} -eq 2 &&
            ( $( basename ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
            ( $( basename ${COMP_WORDS[1]} ) == manage.py) &&
            ( -r ${COMP_WORDS[1]} ) ) 
          ||
          ( ${COMP_CWORD} -eq 2 &&
            ( $( basename ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
            ( $( basename ${COMP_WORDS[1]} ) == django-admin.py) &&
            ( -r ${COMP_WORDS[1]} ) ) ]] ; then

        case ${cur} in
            -*)
                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
                action=$COMPREPLY
                return 0
                ;;
            *)
                COMPREPLY=( $(compgen -W "${actions}" -- ${cur}) )
                action=$COMPREPLY
                return 0
                ;;
        esac
    else
        case ${prev} in
            adminindex|install|reset| \
            sql|sqlall|sqlclear|sqlindexes| \
            sqlinitialdata|sqlreset|sqlsequencereset)
            # App completion
            settings=""
            # If settings.py in the PWD, use that
            if [ -e settings.py ] ; then
                settings="$PWD/settings.py"
            else
                # Use the ENV variable if it is set
                if [ $DJANGO_SETTINGS_MODULE ] ; then
                    settings=$DJANGO_SETTINGS_MODULE
                fi
            fi
            # Couldn't find settings so return nothing
            if [ -z $settings ] ; then
                COMPREPLY=()
            # Otherwise inspect settings.py file
            else
                apps=`sed -n "/INSTALLED_APPS = (/,/)/p" $settings | \
                      grep -v "django.contrib" | 
                      sed -n "s/^[ ]*'\(.*\.\)*\(.*\)'.*$/\2 /pg" | \
                      tr -d "\n"`
                COMPREPLY=( $(compgen -W "${apps}" -- ${cur}) )
            fi
            return 0
            ;;

            createcachetable|dbshell|diffsettings| \
            inspectdb|runserver|startapp|startproject|syncdb| \
            validate)
                COMPREPLY=()
                return 0
                ;;
            shell)
                COMPREPLY=( $(compgen -W "$action_shell_opts" -- ${cur}) )
                return 0
                ;;
            runfcgi)
                COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) )
                return 0
                ;;
            host*|port*|socket*|method*|maxspare*|minspare*|maxchildren*|daemonize*|pidfile*|workdir*)
                if [ "$action"  == "runfcgi" ] ; then
                    COMPREPLY=( $(compgen -W "$action_runfcgi_opts" -- ${cur}) )
                    return 0
                fi
                return 0
                ;;
            *)
                #COMPREPLY=( $(compgen -W "auth core" -- ${cur}) )
                COMPREPLY=()
                return 0
                ;;
        esac
    fi
}

complete -F _django_completion django-admin.py manage.py

# Support for multiple interpreters.
unset pythons
if command -v whereis &>/dev/null; then
    python_interpreters=$(whereis python | cut -d " " -f 2-) 
    for python in $python_interpreters; do
        pythons="${pythons} $(basename $python)"
    done
    pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
else
    pythons=python    
fi

complete -F _django_completion -o default $pythons