diff options
Diffstat (limited to 'module/web/run_server.py')
-rwxr-xr-x | module/web/run_server.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/module/web/run_server.py b/module/web/run_server.py new file mode 100755 index 000000000..34fca46c8 --- /dev/null +++ b/module/web/run_server.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os +import sys +import django +from django.core.servers.basehttp import AdminMediaHandler, WSGIServerException, WSGIServer, WSGIRequestHandler +from django.core.handlers.wsgi import WSGIHandler + +os.environ["DJANGO_SETTINGS_MODULE"] = 'settings' + +class Output: + def __init__(self, stream): + self.stream = stream + def write(self, data): # Do nothing + return None + #self.stream.write(data) + #self.stream.flush() + def __getattr__(self, attr): + return getattr(self.stream, attr) + +#sys.stderr = Output(sys.stderr) +#sys.stdout = Output(sys.stdout) + +def handle(* args): + try: + if len(args) == 1: + try: + addr, port = args[0].split(":") + except: + addr = "127.0.0.1" + port = args[0] + else: + addr = args[0] + port = args[1] + except: + addr = '127.0.0.1' + port = '8000' + + #print addr, port + + admin_media_path = '' + shutdown_message = '' + quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C' + + from django.conf import settings + from django.utils import translation + + #print "Django version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE) + #print "Development server is running at http://%s:%s/" % (addr, port) + #print "Quit the server with %s." % quit_command + + translation.activate(settings.LANGUAGE_CODE) + + try: + handler = AdminMediaHandler(WSGIHandler(), admin_media_path) + run(addr, int(port), handler) + + except WSGIServerException, e: + # Use helpful error messages instead of ugly tracebacks. + ERRORS = { + 13: "You don't have permission to access that port.", + 98: "That port is already in use.", + 99: "That IP address can't be assigned-to.", + } + try: + error_text = ERRORS[e.args[0].args[0]] + except (AttributeError, KeyError): + error_text = str(e) + sys.stderr.write(("Error: %s" % error_text) + '\n') + # Need to use an OS exit because sys.exit doesn't work in a thread + #os._exit(1) + except KeyboardInterrupt: + if shutdown_message: + print shutdown_message + sys.exit(0) + +class ownRequestHandler(WSGIRequestHandler): + def log_message(self, format, *args): + return + + +def run(addr, port, wsgi_handler): + server_address = (addr, port) + httpd = WSGIServer(server_address, ownRequestHandler) + httpd.set_app(wsgi_handler) + httpd.serve_forever() + +if __name__ == "__main__": + handle(*sys.argv[1:]) |