Index: ../../django/django/core/management.py
===================================================================
--- ../../django/django/core/management.py      (revision 4306)
+++ ../../django/django/core/management.py      (working copy)
@@ -1136,6 +1136,65 @@
         inner_run()
 runserver.args = '[--noreload] [--adminmedia=ADMIN_MEDIA_PATH]
[optional port number, or ipaddr:port]'

+def runcherrypy(addr, port, use_reloader=True, admin_media_dir=''):
+    "Starts a cherrypy Web server for development, with the paste
translogger middleware."
+    from django.core.servers.basehttp import run, AdminMediaHandler,
WSGIServerException
+    from django.core.handlers.wsgi import WSGIHandler
+    from cherrypy import wsgiserver
+    from paste import translogger
+
+    if not addr:
+        addr = '127.0.0.1'
+    if not port.isdigit():
+        sys.stderr.write(style.ERROR("Error: %r is not a valid port
number.\n" % port))
+        sys.exit(1)
+    quit_command = sys.platform == 'win32' and 'CTRL-BREAK' or
'CONTROL-C'
+
+    def inner_run():
+        from django.conf import settings
+        print "Validating models..."
+        validate()
+        fRed = chr(27) + '[31m'
+        fNone = chr(27) + '[0m'
+        print "\nDjango version %s, using settings %r" %
(get_version(), settings.SETTINGS_MODULE)
+        print "%sCherryPy server%s is running at http://%s:%s/"; %
(fRed, fNone, addr, port)
+        print "Quit the server with %s." % quit_command
+        try:
+            import django
+            path = admin_media_dir or django.__path__[0] +
'/contrib/admin/media'
+            handler = AdminMediaHandler(WSGIHandler(), path)
+
+            # wrap handler in logger middleware
+            handler = translogger.TransLogger(
+                handler,
+                format = '[%(time)s] "%(REQUEST_METHOD)s
%(REQUEST_URI)s %(HTTP_VERSION)s" %(status)s %(bytes)s',
+                setup_console_handler=True
+            )
+            server = wsgiserver.CherryPyWSGIServer((addr, int(port)),
handler, server_name=addr)
+            server.start()
+        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(style.ERROR("Error: %s" % error_text) +
'\n')
+            sys.exit(1)
+        except KeyboardInterrupt:
+            sys.exit(0)
+    if use_reloader:
+        from django.utils import autoreload
+        autoreload.main(inner_run)
+    else:
+        inner_run()
+runcherrypy.args = '[--noreload] [--adminmedia=ADMIN_MEDIA_PATH]
[optional port number, or ipaddr:port]'
+
+
 def createcachetable(tablename):
     "Creates the table needed to use the SQL cache backend"
     from django.db import backend, connection, transaction,
get_creation_module, models
@@ -1251,6 +1310,7 @@
     'reset': reset,
     'runfcgi': runfcgi,
     'runserver': runserver,
+    'runcherrypy': runcherrypy,
     'shell': run_shell,
     'sql': get_sql_create,
     'sqlall': get_sql_all,
@@ -1386,6 +1446,16 @@
             except ValueError:
                 addr, port = '', args[1]
         action_mapping[action](addr, port, options.use_reloader,
options.admin_media_path)
+    elif action =='runcherrypy':
+        if len(args) < 2:
+            addr = ''
+            port = '8000'
+        else:
+            try:
+                addr, port = args[1].split(':')
+            except ValueError:
+                addr, port = '', args[1]
+        action_mapping[action](addr, port, options.use_reloader,
options.admin_media_path)
     elif action == 'runfcgi':
         action_mapping[action](args[1:])
     else:


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to