comparison roundup/scripts/roundup_server.py @ 3278:ca122bc16277 maint-0.8

merge from HEAD
author Richard Jones <richard@users.sourceforge.net>
date Wed, 13 Apr 2005 06:11:15 +0000
parents 07f68dfab2c2
children 4fe232899be8
comparison
equal deleted inserted replaced
3275:72adcd3c747b 3278:ca122bc16277
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
16 # 16 #
17 17
18 """Command-line script that runs a server over roundup.cgi.client. 18 """Command-line script that runs a server over roundup.cgi.client.
19 19
20 $Id: roundup_server.py,v 1.74.2.3 2005-02-19 10:14:16 a1s Exp $ 20 $Id: roundup_server.py,v 1.74.2.4 2005-04-13 06:11:15 richard Exp $
21 """ 21 """
22 __docformat__ = 'restructuredtext' 22 __docformat__ = 'restructuredtext'
23 23
24 import errno, cgi, getopt, os, socket, sys, traceback, urllib 24 import errno, cgi, getopt, os, socket, sys, traceback, urllib, time
25 import ConfigParser, BaseHTTPServer, SocketServer, StringIO 25 import ConfigParser, BaseHTTPServer, SocketServer, StringIO
26 26
27 # python version check 27 # python version check
28 from roundup import configuration, version_check 28 from roundup import configuration, version_check
29 from roundup import __version__ as roundup_version 29 from roundup import __version__ as roundup_version
68 68
69 class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): 69 class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
70 TRACKER_HOMES = {} 70 TRACKER_HOMES = {}
71 TRACKERS = None 71 TRACKERS = None
72 LOG_IPADDRESS = 1 72 LOG_IPADDRESS = 1
73 DEBUG_MODE = False
73 74
74 def get_tracker(self, name): 75 def get_tracker(self, name):
75 """Return a tracker instance for given tracker name""" 76 """Return a tracker instance for given tracker name"""
76 # Note: try/except KeyError works faster that has_key() check 77 # Note: try/except KeyError works faster that has_key() check
77 # if the key is usually found in the dictionary 78 # if the key is usually found in the dictionary
114 # it'd be nice to be able to detect if these are going to have 115 # it'd be nice to be able to detect if these are going to have
115 # any effect... 116 # any effect...
116 self.send_response(400) 117 self.send_response(400)
117 self.send_header('Content-Type', 'text/html') 118 self.send_header('Content-Type', 'text/html')
118 self.end_headers() 119 self.end_headers()
119 try: 120 if self.DEBUG_MODE:
120 reload(cgitb) 121 try:
122 reload(cgitb)
123 self.wfile.write(cgitb.breaker())
124 self.wfile.write(cgitb.html())
125 except:
126 s = StringIO.StringIO()
127 traceback.print_exc(None, s)
128 self.wfile.write("<pre>")
129 self.wfile.write(cgi.escape(s.getvalue()))
130 self.wfile.write("</pre>\n")
131 else:
132 # user feedback
121 self.wfile.write(cgitb.breaker()) 133 self.wfile.write(cgitb.breaker())
122 self.wfile.write(cgitb.html()) 134 ts = time.ctime()
123 except: 135 self.wfile.write('''<p>%s: An error occurred. Please check
124 s = StringIO.StringIO() 136 the server log for more infomation.</p>'''%ts)
125 traceback.print_exc(None, s) 137 # out to the logfile
126 self.wfile.write("<pre>") 138 print 'EXCEPTION AT', ts
127 self.wfile.write(cgi.escape(s.getvalue())) 139 traceback.print_exc()
128 self.wfile.write("</pre>\n")
129 sys.stdin = save_stdin 140 sys.stdin = save_stdin
130 141
131 do_GET = do_POST = do_HEAD = run_cgi 142 do_GET = do_POST = do_HEAD = run_cgi
132 143
133 def index(self): 144 def index(self):
403 414
404 def get_server(self): 415 def get_server(self):
405 """Return HTTP server object to run""" 416 """Return HTTP server object to run"""
406 # we don't want the cgi module interpreting the command-line args ;) 417 # we don't want the cgi module interpreting the command-line args ;)
407 sys.argv = sys.argv[:1] 418 sys.argv = sys.argv[:1]
419
408 # preload all trackers unless we are in "debug" mode 420 # preload all trackers unless we are in "debug" mode
409 tracker_homes = self.trackers() 421 tracker_homes = self.trackers()
410 if self["MULTIPROCESS"] == "debug": 422 if self["MULTIPROCESS"] == "debug":
411 trackers = None 423 trackers = None
412 else: 424 else:
413 trackers = dict([(name, roundup.instance.open(home, optimize=1)) 425 trackers = dict([(name, roundup.instance.open(home, optimize=1))
414 for (name, home) in tracker_homes]) 426 for (name, home) in tracker_homes])
427
415 # build customized request handler class 428 # build customized request handler class
416 class RequestHandler(RoundupRequestHandler): 429 class RequestHandler(RoundupRequestHandler):
417 LOG_IPADDRESS = not self["LOG_HOSTNAMES"] 430 LOG_IPADDRESS = not self["LOG_HOSTNAMES"]
418 TRACKER_HOMES = dict(tracker_homes) 431 TRACKER_HOMES = dict(tracker_homes)
419 TRACKERS = trackers 432 TRACKERS = trackers
433 DEBUG_MODE = self["MULTIPROCESS"] == "debug"
434
420 # obtain request server class 435 # obtain request server class
421 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES: 436 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES:
422 print _("Multiprocess mode \"%s\" is not available, " 437 print _("Multiprocess mode \"%s\" is not available, "
423 "switching to single-process") % self["MULTIPROCESS"] 438 "switching to single-process") % self["MULTIPROCESS"]
424 self["MULTIPROCESS"] = "none" 439 self["MULTIPROCESS"] = "none"

Roundup Issue Tracker: http://roundup-tracker.org/