Django manage.py wrapper script for Google App Engine
I’m used to running mange.py in my Django apps and I kept forgetting the name of the Google App Engine equivalents. My script only knows how to do two things at the moment, “runserver” and “publish” but now I can manage everything the way I’m accustomed to.
Update: Aprill 11 – Added toggle_debug, automatically switches debug off when publishing and back on for development.
#!/usr/bin/env python
#
# Simple convience script for common publishing and develop tasks
# This script expects dev_appserver.py to be in your $PATH
import os, sys, re
def main(argv):
command = ""
try:
command = argv[1]
except:
usage()
exit(2)
if command == 'publish':
publish()
elif command == 'publish-debug':
publish(True)
elif command == 'runserver':
runserver()
elif command == "--help" or command == "-h":
usage()
exit(0)
def usage():
print """
Usage: python manage.py [command]
Commands:
publish - 'updates' Google App Engine with your current version
publish-debug - 'updates' Goolge App Engine with debug turned on
runserver - launches the development server on port 8080
Options:
--help, -h - Prints this screen
For more information on a particular command, run [command] --help
"""
def get_gae_dir():
""" Locate dev_appserver.py and return the directory is in. """
# There's probably a smarter way to do this...
script = 'dev_appserver.py'
stdin, stdout = os.popen2('which %s'%script)
xpath = stdout.read().strip()
stdout.close()
stdin.close()
# If the file is a symlink, find out where the actual file lives.
try:
tmpdir = os.readlink(xpath)
except OSError:
tmpdir = xpath
return os.path.abspath(os.path.dirname(tmpdir))
def toggle_debug(status):
st = 'False'
if status:
st = 'True'
os.rename('settings.py','settings.py.bak')
orig = open('settings.py.bak').read()
p = re.compile('DEBUG\s=\s(True|False)')
n = p.sub('DEBUG = %s'%st,orig)
nw = open('settings.py','w')
nw.write(n)
nw.close()
def gae_parent(script):
DIR_PATH = get_gae_dir()
DEV_APPSERVER_PATH = os.path.join(DIR_PATH,'google/appengine/tools/%s'%script)
EXTRA_PATHS = [
DIR_PATH,
os.path.join(DIR_PATH, 'lib', 'django'),
os.path.join(DIR_PATH, 'lib', 'webob'),
os.path.join(DIR_PATH, 'lib', 'yaml', 'lib'),
]
sys.path = EXTRA_PATHS + sys.path
execfile(DEV_APPSERVER_PATH, globals())
def publish(debug=False):
if(debug):
toggle_debug(True)
else:
toggle_debug(False)
sys.argv[1] = "update"
try:
sys.argv[2] = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
except IndexError:
sys.argv.append(os.path.abspath(os.path.dirname(os.path.realpath(__file__))))
gae_parent('appcfg.py')
def runserver():
toggle_debug(True)
sys.argv[1] = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
gae_parent('dev_appserver_main.py')
if __name__ == '__main__':
main(sys.argv)
Advertisement
Django Google App Engine Snippets « Hone Watson Bookmarks 3:36 am on April 11, 2008 Permalink |
[...] 11, 2008 by honewatson Steven Osborn wrote this Django manage.py for Google App [...]