summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2010-02-13 22:48:12 +0100
committerGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2010-02-13 22:48:12 +0100
commit9901aaf3d6ead464863039c9f1b5a88b3e3df987 (patch)
tree284c547eb15e5970667ec291fdc9fadbf1b8dbee
parentcnl fix, webif. add dialog - destionation choosable (diff)
downloadpyload-9901aaf3d6ead464863039c9f1b5a88b3e3df987.tar.xz
django builtin server improvement
-rw-r--r--module/web/ServerThread.py27
-rwxr-xr-xmodule/web/run_server.py66
-rwxr-xr-xmodule/web/run_unix.py21
3 files changed, 71 insertions, 43 deletions
diff --git a/module/web/ServerThread.py b/module/web/ServerThread.py
index 5d0dc8738..712cd4304 100644
--- a/module/web/ServerThread.py
+++ b/module/web/ServerThread.py
@@ -64,26 +64,14 @@ class WebServer(threading.Thread):
command2 = ['lighttpd', '-D', '-f', join(path, "lighttpd", "lighttpd.conf")]
self.p2 = Popen(command2, stderr=PIPE, stdin=PIPE, stdout=PIPE)
-
-
+
else:
- self.pycore.logger.info("Starting django buildin Webserver: %s:%s" % (host, port))
+ self.pycore.logger.info("Starting django builtin Webserver: %s:%s" % (host, port))
- if os.name == 'posix':
- command = ['python', join(self.pycore.path, "module", "web", "run_unix.py"), "runserver", "%s:%s" % (host, port)]
- self.p = Popen(command, close_fds=True, stderr=PIPE, stdin=PIPE, stdout=PIPE)
- #os.system("python " + join(self.pycore.path,"module","web","manage.py runserver %s:%s" % (host,port)))
- #@TODO: better would be real python code
+ command = ['python', join(self.pycore.path, "module", "web", "run_server.py"), "%s:%s" % (host, port)]
+ self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=PIPE)
+ while self.running:
sleep(1)
- with open("webserver.pid", "r") as f:
- self.pid = int(f.read().strip())
- while self.running:
- sleep(1)
- else:
- command = ['python', join(self.pycore.path, "module", "web", "manage.py"), "runserver", "%s:%s" % (host, port)]
- self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=PIPE)
- while self.running:
- sleep(1)
def quit(self):
@@ -92,11 +80,6 @@ class WebServer(threading.Thread):
self.p2.kill()
return True
- if os.name == 'posix':
- try:
- os.kill(self.pid, SIGINT)
- except:
- pass
else:
self.p.kill()
diff --git a/module/web/run_server.py b/module/web/run_server.py
new file mode 100755
index 000000000..3bb9b13f7
--- /dev/null
+++ b/module/web/run_server.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+from django.core.management.base import BaseCommand, CommandError
+import os
+import sys
+
+os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
+
+def handle( *args ):
+ import django
+ from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException
+ from django.core.handlers.wsgi import WSGIHandler
+
+ 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 "\nDjango 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)
+
+if __name__ == "__main__":
+ handle(*sys.argv[1:])
diff --git a/module/web/run_unix.py b/module/web/run_unix.py
deleted file mode 100755
index 09c67b282..000000000
--- a/module/web/run_unix.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from __future__ import with_statement
-import os
-
-pid = os.fork()
-if pid:
- with open("webserver.pid", "w") as f:
- f.write(str(pid))
-else:
- from django.core.management import execute_manager
-
- try:
- import settings # Assumed to be in the same directory.
- except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
- sys.exit(1)
-
- if __name__ == "__main__":
- execute_manager(settings) \ No newline at end of file