annotate roundup/scripts/roundup_server.py @ 3882:46ef2a6fd79d

config option to limit nosy attachments based on size reworking of patch [SF#772323] from Philipp Gortan It tries to avoid reading the file contents just to get the file size but that was too hard for metakit backends. They don't inherit from blobfiles.FileStorage which makes it more challenging. Really that backend should be reworked to inherit from FileStorage. I'm not sure I like the default being sys.maxint. Maybe have 0 == unlimited? But what if someone really wanted to set it to 0 to mean "don't attach anything"?
author Justus Pendleton <jpend@users.sourceforge.net>
date Mon, 03 Sep 2007 17:14:09 +0000
parents 2359d6304a4f
children 679118b572d5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
2 # This module is free software, and you may redistribute it and/or modify
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
3 # under the same terms as Python, so long as this copyright message and
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
4 # disclaimer are retained in their original form.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
5 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
6 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
7 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
8 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
9 # POSSIBILITY OF SUCH DAMAGE.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
10 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
11 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
12 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
13 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
14 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
16 #
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
17
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
18 """Command-line script that runs a server over roundup.cgi.client.
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
19
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
20 $Id: roundup_server.py,v 1.89 2007-09-02 16:05:36 jpend Exp $
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
21 """
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
22 __docformat__ = 'restructuredtext'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
23
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
24 import errno, cgi, getopt, os, socket, sys, traceback, urllib, time
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
25 import ConfigParser, BaseHTTPServer, SocketServer, StringIO
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
26
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
27 # python version check
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
28 from roundup import configuration, version_check
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
29 from roundup import __version__ as roundup_version
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
30
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
31 # Roundup modules of use here
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
32 from roundup.cgi import cgitb, client
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
33 from roundup.cgi.PageTemplates.PageTemplate import PageTemplate
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
34 import roundup.instance
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
35 from roundup.i18n import _
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
36
2181
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
37 # "default" favicon.ico
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
38 # generate by using "icotool" and tools/base64
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
39 import zlib, base64
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
40 favico = zlib.decompress(base64.decodestring('''
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
41 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
42 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
43 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
44 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
45 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
46 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
47 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
48 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
49 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
50 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI=
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
51 '''.strip()))
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
52
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
53 DEFAULT_PORT = 8080
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
54
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
55 # See what types of multiprocess server are available
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
56 # Note: the order is important. Preferred multiprocess type
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
57 # is the last element of this list.
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
58 # "debug" means "none" + no tracker/template cache
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
59 MULTIPROCESS_TYPES = ["debug", "none"]
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
60 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
61 import thread
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
62 except ImportError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
63 pass
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
64 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
65 MULTIPROCESS_TYPES.append("thread")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
66 if hasattr(os, 'fork'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
67 MULTIPROCESS_TYPES.append("fork")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
68 DEFAULT_MULTIPROCESS = MULTIPROCESS_TYPES[-1]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
69
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
70 class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
71 TRACKER_HOMES = {}
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
72 TRACKERS = None
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
73 LOG_IPADDRESS = 1
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
74 DEBUG_MODE = False
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
75 CONFIG = None
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
76
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
77 def get_tracker(self, name):
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
78 """Return a tracker instance for given tracker name"""
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
79 # Note: try/except KeyError works faster that has_key() check
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
80 # if the key is usually found in the dictionary
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
81 #
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
82 # Return cached tracker instance if we have a tracker cache
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
83 if self.TRACKERS:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
84 try:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
85 return self.TRACKERS[name]
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
86 except KeyError:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
87 pass
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
88 # No cached tracker. Look for home path.
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
89 try:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
90 tracker_home = self.TRACKER_HOMES[name]
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
91 except KeyError:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
92 raise client.NotFound
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
93 # open the instance
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
94 tracker = roundup.instance.open(tracker_home)
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
95 # and cache it if we have a tracker cache
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
96 if self.TRACKERS:
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
97 self.TRACKERS[name] = tracker
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
98 return tracker
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
99
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
100 def run_cgi(self):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
101 """ Execute the CGI command. Wrap an innner call in an error
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
102 handler so all errors can be caught.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
103 """
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
104 save_stdin = sys.stdin
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
105 sys.stdin = self.rfile
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
106 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
107 self.inner_run_cgi()
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
108 except client.NotFound:
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
109 self.send_error(404, self.path)
2273
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2230
diff changeset
110 except client.Unauthorised, message:
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2230
diff changeset
111 self.send_error(403, '%s (%s)'%(self.path, message))
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
112 except:
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
113 exc, val, tb = sys.exc_info()
2191
f7f6b6981a13 sqlite backend uses the global lock again
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
114 if hasattr(socket, 'timeout') and isinstance(val, socket.timeout):
2200
25b95aa44d60 socket timeout error logging can fail
Richard Jones <richard@users.sourceforge.net>
parents: 2191
diff changeset
115 self.log_error('timeout')
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
116 else:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
117 # it'd be nice to be able to detect if these are going to have
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
118 # any effect...
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
119 self.send_response(400)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
120 self.send_header('Content-Type', 'text/html')
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
121 self.end_headers()
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
122 if self.DEBUG_MODE:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
123 try:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
124 reload(cgitb)
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
125 self.wfile.write(cgitb.breaker())
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
126 self.wfile.write(cgitb.html())
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
127 except:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
128 s = StringIO.StringIO()
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
129 traceback.print_exc(None, s)
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
130 self.wfile.write("<pre>")
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
131 self.wfile.write(cgi.escape(s.getvalue()))
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
132 self.wfile.write("</pre>\n")
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
133 else:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
134 # user feedback
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
135 self.wfile.write(cgitb.breaker())
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
136 ts = time.ctime()
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
137 self.wfile.write('''<p>%s: An error occurred. Please check
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
138 the server log for more infomation.</p>'''%ts)
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
139 # out to the logfile
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
140 print 'EXCEPTION AT', ts
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
141 traceback.print_exc()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
142 sys.stdin = save_stdin
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
143
2592
5a8d9465827e implement the HTTP HEAD command [SF#992544]
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
144 do_GET = do_POST = do_HEAD = run_cgi
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
145
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
146 def index(self):
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
147 ''' Print up an index of the available trackers
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
148 '''
3205
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
149 keys = self.TRACKER_HOMES.keys()
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
150 if len(keys) == 1:
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
151 self.send_response(302)
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
152 self.send_header('Location', urllib.quote(keys[0]) + '/index')
3849
9d37a6779530 End headers when redirecting to tracker. Closes [SF#1706114].
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3787
diff changeset
153 self.end_headers()
3205
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
154 else:
dbd6ba721943 if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3112
diff changeset
155 self.send_response(200)
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
156
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
157 self.send_header('Content-Type', 'text/html')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
158 self.end_headers()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
159 w = self.wfile.write
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
160
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
161 if self.CONFIG and self.CONFIG['TEMPLATE']:
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
162 template = open(self.CONFIG['TEMPLATE']).read()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
163 pt = PageTemplate()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
164 pt.write(template)
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
165 extra = { 'trackers': self.TRACKERS }
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
166 w(pt.pt_render(extra_context=extra))
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
167 else:
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
168 w(_('<html><head><title>Roundup trackers index</title></head>\n'
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
169 '<body><h1>Roundup trackers index</h1><ol>\n'))
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
170 keys.sort()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
171 for tracker in keys:
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
172 w('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n'%{
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
173 'tracker_url': urllib.quote(tracker),
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
174 'tracker_name': cgi.escape(tracker)})
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
175 w('</ol></body></html>')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
176
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
177 def inner_run_cgi(self):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
178 ''' This is the inner part of the CGI handling
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
179 '''
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
180 rest = self.path
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
181
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
182 # file-like object for the favicon.ico file information
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
183 favicon_fileobj = None
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
184
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
185 if rest == '/favicon.ico':
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
186 # check to see if a custom favicon was specified, and set
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
187 # favicon_fileobj to the input file
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
188 if self.CONFIG is not None:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
189 favicon_filepath = os.path.abspath(self.CONFIG['FAVICON'])
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
190
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
191 if os.access(favicon_filepath, os.R_OK):
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
192 favicon_fileobj = open(favicon_filepath, 'rb')
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
193
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
194
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
195 if favicon_fileobj is None:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
196 favicon_fileobj = StringIO.StringIO(favico)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
197
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
198 self.send_response(200)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
199 self.send_header('Content-Type', 'image/x-icon')
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
200 self.end_headers()
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
201
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
202 # this bufsize is completely arbitrary, I picked 4K because it sounded good.
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
203 # if someone knows of a better buffer size, feel free to plug it in.
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
204 bufsize = 4 * 1024
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
205 Processing = True
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
206 while Processing:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
207 data = favicon_fileobj.read(bufsize)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
208 if len(data) > 0:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
209 self.wfile.write(data)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
210 else:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
211 Processing = False
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
212
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
213 favicon_fileobj.close()
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
214
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
215 return
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
216
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
217 i = rest.rfind('?')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
218 if i >= 0:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
219 rest, query = rest[:i], rest[i+1:]
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
220 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
221 query = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
222
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
223 # no tracker - spit out the index
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
224 if rest == '/':
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
225 self.index()
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
226 return
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
227
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
228 # figure the tracker
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
229 l_path = rest.split('/')
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
230 tracker_name = urllib.unquote(l_path[1])
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
231
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
232 # handle missing trailing '/'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
233 if len(l_path) == 2:
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
234 self.send_response(301)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
235 # redirect - XXX https??
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
236 protocol = 'http'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
237 url = '%s://%s%s/'%(protocol, self.headers['host'], self.path)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
238 self.send_header('Location', url)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
239 self.end_headers()
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
240 self.wfile.write('Moved Permanently')
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
241 return
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
242
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
243 # figure out what the rest of the path is
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
244 if len(l_path) > 2:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
245 rest = '/'.join(l_path[2:])
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
246 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
247 rest = '/'
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
248
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
249 # Set up the CGI environment
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
250 env = {}
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
251 env['TRACKER_NAME'] = tracker_name
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
252 env['REQUEST_METHOD'] = self.command
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
253 env['PATH_INFO'] = urllib.unquote(rest)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
254 if query:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
255 env['QUERY_STRING'] = query
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
256 if self.headers.typeheader is None:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
257 env['CONTENT_TYPE'] = self.headers.type
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
258 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
259 env['CONTENT_TYPE'] = self.headers.typeheader
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
260 length = self.headers.getheader('content-length')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
261 if length:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
262 env['CONTENT_LENGTH'] = length
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
263 co = filter(None, self.headers.getheaders('cookie'))
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
264 if co:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
265 env['HTTP_COOKIE'] = ', '.join(co)
1299
b2d04ce03802 Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 1251
diff changeset
266 env['HTTP_AUTHORIZATION'] = self.headers.getheader('authorization')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
267 env['SCRIPT_NAME'] = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
268 env['SERVER_NAME'] = self.server.server_name
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
269 env['SERVER_PORT'] = str(self.server.server_port)
636
3569dfce4bc5 The correct var is "HTTP_HOST"
Richard Jones <richard@users.sourceforge.net>
parents: 635
diff changeset
270 env['HTTP_HOST'] = self.headers['host']
2943
996e2bab8d8a propagate CGI_SHOW_TIMING from os.environ to request environment
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2852
diff changeset
271 if os.environ.has_key('CGI_SHOW_TIMING'):
996e2bab8d8a propagate CGI_SHOW_TIMING from os.environ to request environment
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2852
diff changeset
272 env['CGI_SHOW_TIMING'] = os.environ['CGI_SHOW_TIMING']
3574
7bf2b4523b75 fix failure with browsers not sending "Accept-Language" header [SF#1435335]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3438
diff changeset
273 env['HTTP_ACCEPT_LANGUAGE'] = self.headers.get('accept-language')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
274
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
275 # do the roundup thing
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
276 tracker = self.get_tracker(tracker_name)
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
277 tracker.Client(tracker, self, env).main()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
278
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
279 def address_string(self):
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
280 if self.LOG_IPADDRESS:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
281 return self.client_address[0]
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
282 else:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
283 host, port = self.client_address
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
284 return socket.getfqdn(host)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
285
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
286 def log_message(self, format, *args):
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
287 ''' Try to *safely* log to stderr.
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
288 '''
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
289 try:
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
290 BaseHTTPServer.BaseHTTPRequestHandler.log_message(self,
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
291 format, *args)
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
292 except IOError:
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
293 # stderr is no longer viable
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
294 pass
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
295
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
296 def start_response(self, headers, response):
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
297 self.send_response(response)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
298 for key, value in headers:
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
299 self.send_header(key, value)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
300 self.end_headers()
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
301
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
302 def error():
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
303 exc_type, exc_value = sys.exc_info()[:2]
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
304 return _('Error: %s: %s' % (exc_type, exc_value))
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
305
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
306 def setgid(group):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
307 if group is None:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
308 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
309 if not hasattr(os, 'setgid'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
310 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
311
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
312 # if root, setgid to the running user
3279
6e7462bbafde fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents: 3277
diff changeset
313 if os.getuid():
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
314 print _('WARNING: ignoring "-g" argument, not root')
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
315 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
316
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
317 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
318 import grp
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
319 except ImportError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
320 raise ValueError, _("Can't change groups - no grp module")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
321 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
322 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
323 gid = int(group)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
324 except ValueError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
325 gid = grp.getgrnam(group)[2]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
326 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
327 grp.getgrgid(gid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
328 except KeyError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
329 raise ValueError,_("Group %(group)s doesn't exist")%locals()
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
330 os.setgid(gid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
331
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
332 def setuid(user):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
333 if not hasattr(os, 'getuid'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
334 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
335
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
336 # People can remove this check if they're really determined
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
337 if user is None:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
338 if os.getuid():
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
339 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
340 raise ValueError, _("Can't run as root!")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
341
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
342 if os.getuid():
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
343 print _('WARNING: ignoring "-u" argument, not root')
3733
2addec69757a fix: setuid called when run by non-root
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3609
diff changeset
344 return
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
345
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
346 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
347 import pwd
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
348 except ImportError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
349 raise ValueError, _("Can't change users - no pwd module")
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
350 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
351 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
352 uid = int(user)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
353 except ValueError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
354 uid = pwd.getpwnam(user)[2]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
355 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
356 pwd.getpwuid(uid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
357 except KeyError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
358 raise ValueError, _("User %(user)s doesn't exist")%locals()
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
359 os.setuid(uid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
360
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
361 class TrackerHomeOption(configuration.FilePathOption):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
362
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
363 # Tracker homes do not need any description strings
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
364 def format(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
365 return "%(name)s = %(value)s\n" % {
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
366 "name": self.setting,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
367 "value": self.value2str(self._value),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
368 }
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
369
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
370 class ServerConfig(configuration.Config):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
371
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
372 SETTINGS = (
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
373 ("main", (
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
374 (configuration.Option, "host", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
375 "Host name of the Roundup web server instance.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
376 "If empty, listen on all network interfaces."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
377 (configuration.IntegerNumberOption, "port", DEFAULT_PORT,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
378 "Port to listen on."),
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
379 (configuration.NullableFilePathOption, "favicon", "favicon.ico",
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
380 "Path to favicon.ico image file."
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
381 " If unset, built-in favicon.ico is used."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
382 (configuration.NullableOption, "user", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
383 "User ID as which the server will answer requests.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
384 "In order to use this option, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
385 "the server must be run initially as root.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
386 "Availability: Unix."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
387 (configuration.NullableOption, "group", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
388 "Group ID as which the server will answer requests.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
389 "In order to use this option, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
390 "the server must be run initially as root.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
391 "Availability: Unix."),
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
392 (configuration.BooleanOption, "nodaemon", "no",
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
393 "don't fork (this overrides the pidfile mechanism)'"),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
394 (configuration.BooleanOption, "log_hostnames", "no",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
395 "Log client machine names instead of IP addresses "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
396 "(much slower)"),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
397 (configuration.NullableFilePathOption, "pidfile", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
398 "File to which the server records "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
399 "the process id of the daemon.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
400 "If this option is not set, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
401 "the server will run in foreground\n"),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
402 (configuration.NullableFilePathOption, "logfile", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
403 "Log file path. If unset, log to stderr."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
404 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
405 "Set processing of each request in separate subprocess.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
406 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)),
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
407 (configuration.NullableFilePathOption, "template", "",
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
408 "Tracker index template. If unset, built-in will be used."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
409 )),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
410 ("trackers", (), "Roundup trackers to serve.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
411 "Each option in this section defines single Roundup tracker.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
412 "Option name identifies the tracker and will appear in the URL.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
413 "Option value is tracker home directory path.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
414 "The path may be either absolute or relative\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
415 "to the directory containig this config file."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
416 )
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
417
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
418 # options recognized by config
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
419 OPTIONS = {
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
420 "host": "n:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
421 "port": "p:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
422 "group": "g:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
423 "user": "u:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
424 "logfile": "l:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
425 "pidfile": "d:",
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
426 "nodaemon": "D",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
427 "log_hostnames": "N",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
428 "multiprocess": "t:",
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
429 "template": "i:",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
430 }
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
431
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
432 def __init__(self, config_file=None):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
433 configuration.Config.__init__(self, config_file, self.SETTINGS)
3022
9523de67ecad merge from maint-0-8
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2943
diff changeset
434 self.sections.append("trackers")
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
435
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
436 def _adjust_options(self, config):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
437 """Add options for tracker homes"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
438 # return early if there are no tracker definitions.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
439 # trackers must be specified on the command line.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
440 if not config.has_section("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
441 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
442 # config defaults appear in all sections.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
443 # filter them out.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
444 defaults = config.defaults().keys()
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
445 for name in config.options("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
446 if name not in defaults:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
447 self.add_option(TrackerHomeOption(self, "trackers", name))
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
448
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
449 def getopt(self, args, short_options="", long_options=(),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
450 config_load_options=("C", "config"), **options
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
451 ):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
452 options.update(self.OPTIONS)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
453 return configuration.Config.getopt(self, args,
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
454 short_options, long_options, config_load_options, **options)
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
455
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
456 def _get_name(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
457 return "Roundup server"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
458
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
459 def trackers(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
460 """Return tracker definitions as a list of (name, home) pairs"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
461 trackers = []
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
462 for option in self._get_section_options("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
463 trackers.append((option, os.path.abspath(
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
464 self["TRACKERS_" + option.upper()])))
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
465 return trackers
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
466
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
467 def set_logging(self):
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
468 """Initialise logging to the configured file, if any."""
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
469 # appending, unbuffered
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
470 sys.stdout = sys.stderr = open(self["LOGFILE"], 'a', 0)
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
471
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
472 def get_server(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
473 """Return HTTP server object to run"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
474 # we don't want the cgi module interpreting the command-line args ;)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
475 sys.argv = sys.argv[:1]
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
476
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
477 # preload all trackers unless we are in "debug" mode
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
478 tracker_homes = self.trackers()
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
479 if self["MULTIPROCESS"] == "debug":
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
480 trackers = None
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
481 else:
2852
37e6ebd5ba29 when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2848
diff changeset
482 trackers = dict([(name, roundup.instance.open(home, optimize=1))
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
483 for (name, home) in tracker_homes])
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
484
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
485 # build customized request handler class
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
486 class RequestHandler(RoundupRequestHandler):
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
487 LOG_IPADDRESS = not self["LOG_HOSTNAMES"]
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
488 TRACKER_HOMES = dict(tracker_homes)
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
489 TRACKERS = trackers
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
490 DEBUG_MODE = self["MULTIPROCESS"] == "debug"
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
491 CONFIG = self
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
492
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
493 # obtain request server class
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
494 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES:
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
495 print _("Multiprocess mode \"%s\" is not available, "
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
496 "switching to single-process") % self["MULTIPROCESS"]
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
497 self["MULTIPROCESS"] = "none"
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
498 server_class = BaseHTTPServer.HTTPServer
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
499 elif self["MULTIPROCESS"] == "fork":
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
500 class ForkingServer(SocketServer.ForkingMixIn,
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
501 BaseHTTPServer.HTTPServer):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
502 pass
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
503 server_class = ForkingServer
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
504 elif self["MULTIPROCESS"] == "thread":
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
505 class ThreadingServer(SocketServer.ThreadingMixIn,
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
506 BaseHTTPServer.HTTPServer):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
507 pass
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
508 server_class = ThreadingServer
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
509 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
510 server_class = BaseHTTPServer.HTTPServer
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
511 # obtain server before changing user id - allows to
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
512 # use port < 1024 if started as root
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
513 try:
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
514 httpd = server_class((self["HOST"], self["PORT"]), RequestHandler)
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
515 except socket.error, e:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
516 if e[0] == errno.EADDRINUSE:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
517 raise socket.error, \
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
518 _("Unable to bind to port %s, port already in use.") \
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
519 % self["PORT"]
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
520 raise
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
521 # change user and/or group
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
522 setgid(self["GROUP"])
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
523 setuid(self["USER"])
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
524 # return the server
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
525 return httpd
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
526
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
527 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
528 import win32serviceutil
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
529 except:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
530 RoundupService = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
531 else:
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
532
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
533 # allow the win32
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
534 import win32service
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
535
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
536 class SvcShutdown(Exception):
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
537 pass
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
538
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
539 class RoundupService(win32serviceutil.ServiceFramework):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
540
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
541 _svc_name_ = "roundup"
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
542 _svc_display_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
543
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
544 running = 0
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
545 server = None
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
546
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
547 def SvcDoRun(self):
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
548 import servicemanager
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
549 self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
550 config = ServerConfig()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
551 (optlist, args) = config.getopt(sys.argv[1:])
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
552 if not config["LOGFILE"]:
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
553 servicemanager.LogMsg(servicemanager.EVENTLOG_ERROR_TYPE,
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
554 servicemanager.PYS_SERVICE_STOPPED,
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
555 (self._svc_display_name_, "\r\nMissing logfile option"))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
556 self.ReportServiceStatus(win32service.SERVICE_STOPPED)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
557 return
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
558 config.set_logging()
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
559 self.server = config.get_server()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
560 self.running = 1
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
561 self.ReportServiceStatus(win32service.SERVICE_RUNNING)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
562 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
563 servicemanager.PYS_SERVICE_STARTED, (self._svc_display_name_,
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
564 " at %s:%s" % (config["HOST"], config["PORT"])))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
565 while self.running:
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
566 self.server.handle_request()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
567 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
568 servicemanager.PYS_SERVICE_STOPPED,
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
569 (self._svc_display_name_, ""))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
570 self.ReportServiceStatus(win32service.SERVICE_STOPPED)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
571
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
572 def SvcStop(self):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
573 self.running = 0
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
574 # make dummy connection to self to terminate blocking accept()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
575 addr = self.server.socket.getsockname()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
576 if addr[0] == "0.0.0.0":
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
577 addr = ("127.0.0.1", addr[1])
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
578 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
579 sock.connect(addr)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
580 sock.close()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
581 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
582
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
583 def usage(message=''):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
584 if RoundupService:
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
585 os_part = \
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
586 ""''' -c <Command> Windows Service options.
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
587 If you want to run the server as a Windows Service, you
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
588 must use configuration file to specify tracker homes.
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
589 Logfile option is required to run Roundup Tracker service.
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
590 Typing "roundup-server -c help" shows Windows Services
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
591 specifics.'''
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
592 else:
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
593 os_part = ""''' -u <UID> runs the Roundup web server as this UID
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
594 -g <GID> runs the Roundup web server as this GID
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
595 -d <PIDfile> run the server in the background and write the server's PID
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
596 to the file indicated by PIDfile. The -l option *must* be
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
597 specified if -d is used.'''
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
598 if message:
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
599 message += '\n'
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
600 print _('''%(message)sUsage: roundup-server [options] [name=tracker home]*
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
601
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
602 Options:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
603 -v print the Roundup version number and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
604 -h print this text and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
605 -S create or update configuration file and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
606 -C <fname> use configuration file <fname>
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
607 -n <name> set the host name of the Roundup web server instance
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
608 -p <port> set the port to listen on (default: %(port)s)
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
609 -l <fname> log to the file indicated by fname instead of stderr/stdout
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
610 -N log client machine names instead of IP addresses (much slower)
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
611 -i set tracker index template
2843
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
612 -t <mode> multiprocess mode (default: %(mp_def)s).
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
613 Allowed values: %(mp_types)s.
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
614 %(os_part)s
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
615
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
616 Long options:
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
617 --version print the Roundup version number and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
618 --help print this text and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
619 --save-config create or update configuration file and exit
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
620 --config <fname> use configuration file <fname>
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
621 All settings of the [main] section of the configuration file
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
622 also may be specified in form --<name>=<value>
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
623
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
624 Examples:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
625
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
626 roundup-server -S -C /opt/roundup/etc/roundup-server.ini \\
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
627 -n localhost -p 8917 -l /var/log/roundup.log \\
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
628 support=/var/spool/roundup-trackers/support
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
629
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
630 roundup-server -C /opt/roundup/etc/roundup-server.ini
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
631
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
632 roundup-server support=/var/spool/roundup-trackers/support
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
633
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
634 roundup-server -d /var/run/roundup.pid -l /var/log/roundup.log \\
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
635 support=/var/spool/roundup-trackers/support
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
636
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
637 Configuration file format:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
638 Roundup Server configuration file has common .ini file format.
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
639 Configuration file created with 'roundup-server -S' contains
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
640 detailed explanations for each option. Please see that file
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
641 for option descriptions.
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
642
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
643 How to use "name=tracker home":
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
644 These arguments set the tracker home(s) to use. The name is how the
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
645 tracker is identified in the URL (it's the first part of the URL path).
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
646 The tracker home is the directory that was identified when you did
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
647 "roundup-admin init". You may specify any number of these name=home
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
648 pairs on the command-line. Make sure the name part doesn't include
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
649 any url-unsafe characters like spaces, as these confuse IE.
2843
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
650 ''') % {
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
651 "message": message,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
652 "os_part": os_part,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
653 "port": DEFAULT_PORT,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
654 "mp_def": DEFAULT_MULTIPROCESS,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
655 "mp_types": ", ".join(MULTIPROCESS_TYPES),
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
656 }
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
657
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
658
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
659 def writepidfile(pidfile):
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
660 ''' Write a pidfile (only). Do not daemonize. '''
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
661 pid = os.getpid()
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
662 if pid:
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
663 pidfile = open(pidfile, 'w')
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
664 pidfile.write(str(pid))
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
665 pidfile.close()
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
666
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
667 def daemonize(pidfile):
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
668 ''' Turn this process into a daemon.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
669 - make sure the sys.std(in|out|err) are completely cut off
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
670 - make our parent PID 1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
671
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
672 Write our new PID to the pidfile.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
673
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
674 From A.M. Kuuchling (possibly originally Greg Ward) with
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
675 modification from Oren Tirosh, and finally a small mod from me.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
676 '''
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
677 # Fork once
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
678 if os.fork() != 0:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
679 os._exit(0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
680
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
681 # Create new session
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
682 os.setsid()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
683
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
684 # Second fork to force PPID=1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
685 pid = os.fork()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
686 if pid:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
687 pidfile = open(pidfile, 'w')
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
688 pidfile.write(str(pid))
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
689 pidfile.close()
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
690 os._exit(0)
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
691
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
692 os.chdir("/")
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
693
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
694 # close off std(in|out|err), redirect to devnull so the file
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
695 # descriptors can't be used again
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
696 devnull = os.open('/dev/null', 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
697 os.dup2(devnull, 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
698 os.dup2(devnull, 1)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
699 os.dup2(devnull, 2)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
700
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
701 undefined = []
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
702 def run(port=undefined, success_message=None):
1249
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
703 ''' Script entry point - handle args and figure out what to to.
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
704 '''
1606
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
705 # time out after a minute if we can
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
706 if hasattr(socket, 'setdefaulttimeout'):
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
707 socket.setdefaulttimeout(60)
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
708
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
709 config = ServerConfig()
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
710 # additional options
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
711 short_options = "hvS"
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
712 if RoundupService:
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
713 short_options += 'c'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
714 try:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
715 (optlist, args) = config.getopt(sys.argv[1:],
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
716 short_options, ("help", "version", "save-config",))
2773
6fb4b692c133 oops. forgot to reenable ConfigurationError handling, disabled for debugging.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2772
diff changeset
717 except (getopt.GetoptError, configuration.ConfigurationError), e:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
718 usage(str(e))
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
719 return
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
720
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
721 # if running in windows service mode, don't do any other stuff
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
722 if ("-c", "") in optlist:
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
723 # acquire command line options recognized by service
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
724 short_options = "cC:"
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
725 long_options = ["config"]
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
726 for (long_name, short_name) in config.OPTIONS.items():
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
727 short_options += short_name
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
728 long_name = long_name.lower().replace("_", "-")
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
729 if short_name[-1] == ":":
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
730 long_name += "="
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
731 long_options.append(long_name)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
732 optlist = getopt.getopt(sys.argv[1:], short_options, long_options)[0]
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
733 svc_args = []
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
734 for (opt, arg) in optlist:
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
735 if opt in ("-C", "-l"):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
736 # make sure file name is absolute
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
737 svc_args.extend((opt, os.path.abspath(arg)))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
738 elif opt in ("--config", "--logfile"):
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
739 # ditto, for long options
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
740 svc_args.append("=".join(opt, os.path.abspath(arg)))
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
741 elif opt != "-c":
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
742 svc_args.extend(opt)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
743 RoundupService._exe_args_ = " ".join(svc_args)
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
744 # pass the control to serviceutil
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
745 win32serviceutil.HandleCommandLine(RoundupService,
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
746 argv=sys.argv[:1] + args)
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
747 return
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
748
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
749 # add tracker names from command line.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
750 # this is done early to let '--save-config' handle the trackers.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
751 if args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
752 for arg in args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
753 try:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
754 name, home = arg.split('=')
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
755 except ValueError:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
756 raise ValueError, _("Instances must be name=home")
2772
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
757 config.add_option(TrackerHomeOption(config, "trackers", name))
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
758 config["TRACKERS_" + name.upper()] = home
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
759
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
760 # handle remaining options
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
761 if optlist:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
762 for (opt, arg) in optlist:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
763 if opt in ("-h", "--help"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
764 usage()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
765 elif opt in ("-v", "--version"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
766 print '%s (python %s)' % (roundup_version,
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
767 sys.version.split()[0])
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
768 elif opt in ("-S", "--save-config"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
769 config.save()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
770 print _("Configuration saved to %s") % config.filepath
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
771 # any of the above options prevent server from running
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
772 return
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
773
2774
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
774 # port number in function arguments overrides config and command line
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
775 if port is not undefined:
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
776 config.PORT = port
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
777
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
778 if config["LOGFILE"]:
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
779 config["LOGFILE"] = os.path.abspath(config["LOGFILE"])
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
780 # switch logging from stderr/stdout to logfile
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
781 config.set_logging()
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
782 if config["PIDFILE"]:
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
783 config["PIDFILE"] = os.path.abspath(config["PIDFILE"])
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
784
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
785 # fork the server from our parent if a pidfile is specified
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
786 if config["PIDFILE"]:
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
787 if not hasattr(os, 'fork'):
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
788 print _("Sorry, you can't run the server as a daemon"
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
789 " on this Operating System")
1409
8dc60d87ab42 Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents: 1367
diff changeset
790 sys.exit(0)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
791 else:
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
792 if config['NODAEMON']:
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
793 writepidfile(config["PIDFILE"])
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
794 else:
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
795 daemonize(config["PIDFILE"])
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
796
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
797 # create the server
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
798 httpd = config.get_server()
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
799
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
800 if success_message:
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
801 print success_message
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
802 else:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
803 print _('Roundup server started on %(HOST)s:%(PORT)s') \
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
804 % config
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
805
1311
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
806 try:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
807 httpd.serve_forever()
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
808 except KeyboardInterrupt:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
809 print 'Keyboard Interrupt: exiting'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
810
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
811 if __name__ == '__main__':
593
2256f81293c1 Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 592
diff changeset
812 run()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
813
2543
6eda7612676d allow ids in addition to names for -g and -u arguments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2521
diff changeset
814 # vim: set filetype=python sts=4 sw=4 et si :

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