Ticket #9653: runservercp.py

File runservercp.py, 2.6 KB (added by lakin@…, 15 years ago)

A runservercp command which allows one to use the cherrypy server instead of the built in one.

Line 
1from django.core.management.base import BaseCommand, CommandError
2from optparse import make_option
3import os
4
5import cherrypy
6
7class Command(BaseCommand):
8 option_list = BaseCommand.option_list + (
9 make_option('--noreload', action='store_false', dest='use_reloader', default=True,
10 help='Tells Django to NOT use the auto-reloader.'),
11 make_option('--adminmedia', dest='admin_media_path', default='',
12 help='Specifies the directory from which to serve admin media.'),
13 )
14 help = "Starts a lightweight Web server for development."
15 args = '[optional port number, or ipaddr:port]'
16
17 # Validation is called explicitly each time the server is reloaded.
18 requires_model_validation = False
19
20 def handle(self, addrport='', *args, **options):
21 import django
22 from django.core.servers.basehttp import AdminMediaHandler
23 from django.core.handlers.wsgi import WSGIHandler
24 if args:
25 raise CommandError('Usage is runservercp %s' % self.args)
26 if not addrport:
27 addr = ''
28 port = '8000'
29 else:
30 try:
31 addr, port = addrport.split(':')
32 except ValueError:
33 addr, port = '', addrport
34 if not addr:
35 addr = '127.0.0.1'
36
37 if not port.isdigit():
38 raise CommandError("%r is not a valid port number." % port)
39
40 use_reloader = options.get('use_reloader', True)
41 admin_media_path = options.get('admin_media_path', '')
42
43 from django.conf import settings
44 from django.utils import translation
45 print "Validating models..."
46 self.validate(display_num_errors=True)
47 print "\nDjango version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE)
48 print "Development server is running at http://%s:%s/" % (addr, port)
49
50 # django.core.management.base forces the locale to en-us. We should
51 # set it up correctly for the first request (particularly important
52 # in the "--noreload" case).
53 translation.activate(settings.LANGUAGE_CODE)
54
55 try:
56 path = admin_media_path or django.__path__[0] + '/contrib/admin/media'
57
58 handler = AdminMediaHandler(WSGIHandler(), path)
59 cherrypy.config.update({
60 'server.socket_host': addr,
61 'server.socket_port': int(port),
62 'engine.autoreload_on': use_reloader
63 })
64
65 cherrypy.tree.graft(handler, '/')
66
67 cherrypy.engine.start()
68 cherrypy.engine.block()
69 finally:
70 cherrypy.engine.exit()
71
Back to Top