Mercurial > p > roundup > code
annotate roundup/scripts/roundup_server.py @ 3696:790363e96852
Sorting/grouping by multiple properties.
- Implement sorting/grouping by multiple properties for the web
interface. I'm now using @sort0/@sortdir0,@sort1/@sortdir1,... and
@group0/@groupdir0,... when generating URLs from a search template.
These are converted to a list internally. When saving URLs (e.g. when
storing queries) I'm using @sort=prop1,prop2,... and @group=... with
optional '-' prepended to individual props.
This means saved URLs are backward compatible with existing trackers
(and yes, this was a design goal).
I need the clumsy version with @sort0,@sort1 etc, because I'm
currently using several selectors and checkboxes (as the classic
template does, too). I don't think there is a way around that in HTML?
- Updated (hopefully all) documentation to reflect the new URL format
and the consequences in the web-interface.
- I've set the number of sort/group properties in the classic template
to two -- this can easily be reverted by changing n_sort to 1.
Richard, would you look over these changes? I've set a tag before and
(will set) after commit, so that it would be easy to merge out.
Don't be too scared about the size of the change, most is documentation,
the guts are in cgi/templating.py and small changes in the classic
template.
| author | Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net> |
|---|---|
| date | Wed, 30 Aug 2006 20:28:26 +0000 |
| parents | f2fda3e6fc8b |
| children | 2addec69757a |
| 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 |
|
3609
f2fda3e6fc8b
umask is now configurable (with the same 0002 default)
Richard Jones <richard@users.sourceforge.net>
parents:
3574
diff
changeset
|
20 $Id: roundup_server.py,v 1.83 2006-04-27 04:59:37 richard 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 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
33 import roundup.instance |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
34 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
|
35 |
|
2181
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
36 # "default" favicon.ico |
|
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
37 # 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
|
38 import zlib, base64 |
|
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
39 favico = zlib.decompress(base64.decodestring(''' |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
40 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
41 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
42 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
43 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
44 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
45 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
46 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
47 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
48 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
49 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI= |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
50 '''.strip())) |
|
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
51 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
52 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
|
53 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
54 # 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
|
55 # 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
|
56 # 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
|
57 # "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
|
58 MULTIPROCESS_TYPES = ["debug", "none"] |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
59 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
60 import thread |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
61 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
62 pass |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
63 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
64 MULTIPROCESS_TYPES.append("thread") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
65 if hasattr(os, 'fork'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
66 MULTIPROCESS_TYPES.append("fork") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
67 DEFAULT_MULTIPROCESS = MULTIPROCESS_TYPES[-1] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
68 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
69 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
|
70 TRACKER_HOMES = {} |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
71 TRACKERS = None |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
72 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
|
73 DEBUG_MODE = False |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
74 CONFIG = None |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
76 def get_tracker(self, name): |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
77 """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
|
78 # 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
|
79 # 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
|
80 # |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
81 # 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
|
82 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
83 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
84 return self.TRACKERS[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
85 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
86 pass |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
87 # 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
|
88 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
89 tracker_home = self.TRACKER_HOMES[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
90 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
91 raise client.NotFound |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
92 # open the instance |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
93 tracker = roundup.instance.open(tracker_home) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
94 # 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
|
95 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
96 self.TRACKERS[name] = tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
97 return tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
98 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
99 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
|
100 """ 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
|
101 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
|
102 """ |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
103 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
|
104 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
|
105 try: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
106 self.inner_run_cgi() |
|
992
6003d6fa02a5
new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents:
661
diff
changeset
|
107 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
|
108 self.send_error(404, self.path) |
|
2273
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2230
diff
changeset
|
109 except client.Unauthorised, message: |
|
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2230
diff
changeset
|
110 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
|
111 except: |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
112 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
|
113 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
|
114 self.log_error('timeout') |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
115 else: |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
116 # 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
|
117 # any effect... |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
118 self.send_response(400) |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 try: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
123 reload(cgitb) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
124 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
|
125 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
|
126 except: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
127 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
|
128 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
|
129 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
|
130 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
|
131 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
|
132 else: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
133 # user feedback |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
134 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
|
135 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
|
136 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
|
137 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
|
138 # 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
|
139 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
|
140 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
|
141 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
|
142 |
|
2592
5a8d9465827e
implement the HTTP HEAD command [SF#992544]
Richard Jones <richard@users.sourceforge.net>
parents:
2566
diff
changeset
|
143 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
|
144 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
145 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
|
146 ''' 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
|
147 ''' |
|
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
|
148 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
|
149 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
|
150 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
|
151 self.send_header('Location', urllib.quote(keys[0]) + '/index') |
|
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 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
|
153 self.send_response(200) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
154 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
|
155 self.end_headers() |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
156 w = self.wfile.write |
|
2328
b54ad9ed394a
join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2308
diff
changeset
|
157 w(_('<html><head><title>Roundup trackers index</title></head>\n' |
|
b54ad9ed394a
join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2308
diff
changeset
|
158 '<body><h1>Roundup trackers index</h1><ol>\n')) |
|
1251
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
159 keys.sort() |
|
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
160 for tracker in keys: |
|
2566
dd2b9f5a104c
don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2543
diff
changeset
|
161 w('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n'%{ |
|
1251
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
162 'tracker_url': urllib.quote(tracker), |
|
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
163 'tracker_name': cgi.escape(tracker)}) |
|
2566
dd2b9f5a104c
don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2543
diff
changeset
|
164 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
|
165 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
166 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
|
167 ''' 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
|
168 ''' |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
169 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
|
170 |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
171 # 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
|
172 favicon_fileobj = None |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
173 |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
174 if rest == '/favicon.ico': |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
175 # 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
|
176 # favicon_fileobj to the input file |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
177 if self.CONFIG is not None: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
178 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
|
179 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
180 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
|
181 favicon_fileobj = open(favicon_filepath, 'rb') |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
182 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
183 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
184 if favicon_fileobj is None: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
185 favicon_fileobj = StringIO.StringIO(favico) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
186 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
187 self.send_response(200) |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
188 self.send_header('Content-Type', 'image/x-icon') |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
189 self.end_headers() |
|
3438
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 # 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
|
192 # 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
|
193 bufsize = 4 * 1024 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
194 Processing = True |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
195 while Processing: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
196 data = favicon_fileobj.read(bufsize) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
197 if len(data) > 0: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
198 self.wfile.write(data) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
199 else: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
200 Processing = False |
|
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 favicon_fileobj.close() |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
203 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
204 return |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
205 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
206 i = rest.rfind('?') |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
207 if i >= 0: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
208 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
|
209 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
210 query = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
211 |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
212 # 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
|
213 if rest == '/': |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
214 self.index() |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
215 return |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
216 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
217 # 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
|
218 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
|
219 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
|
220 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
221 # handle missing trailing '/' |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
222 if len(l_path) == 2: |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
223 self.send_response(301) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
224 # redirect - XXX https?? |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
225 protocol = 'http' |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
226 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
|
227 self.send_header('Location', url) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
228 self.end_headers() |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
229 self.wfile.write('Moved Permanently') |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
230 return |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
231 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
232 # 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
|
233 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
|
234 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
|
235 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
236 rest = '/' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
237 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
238 # 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
|
239 env = {} |
|
1251
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 if query: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
244 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
|
245 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
|
246 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
|
247 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
248 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
|
249 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
|
250 if length: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
251 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
|
252 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
|
253 if co: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
254 env['HTTP_COOKIE'] = ', '.join(co) |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1251
diff
changeset
|
255 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
|
256 env['SCRIPT_NAME'] = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
257 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
264 # do the roundup thing |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
265 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
|
266 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
|
267 |
|
1735
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
268 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
|
269 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
|
270 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
|
271 else: |
|
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
272 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
|
273 return socket.getfqdn(host) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
274 |
|
2021
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
275 def log_message(self, format, *args): |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
276 ''' Try to *safely* log to stderr. |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
277 ''' |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
278 try: |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
279 BaseHTTPServer.BaseHTTPRequestHandler.log_message(self, |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
280 format, *args) |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
281 except IOError: |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
282 # stderr is no longer viable |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
283 pass |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
284 |
|
1871
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
285 def error(): |
|
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
286 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
|
287 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
|
288 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
289 def setgid(group): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
290 if group is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
291 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
292 if not hasattr(os, 'setgid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
293 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
294 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
295 # if root, setgid to the running user |
|
3279
6e7462bbafde
fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents:
3277
diff
changeset
|
296 if os.getuid(): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
297 print _('WARNING: ignoring "-g" argument, not root') |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
298 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
299 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
300 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
301 import grp |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
302 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
303 raise ValueError, _("Can't change groups - no grp module") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
304 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
305 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
306 gid = int(group) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
307 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
308 gid = grp.getgrnam(group)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
309 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
310 grp.getgrgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
311 except KeyError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
312 raise ValueError,_("Group %(group)s doesn't exist")%locals() |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
313 os.setgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
314 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
315 def setuid(user): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
316 if not hasattr(os, 'getuid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
317 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
318 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
319 # People can remove this check if they're really determined |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
320 if user is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
321 if os.getuid(): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
322 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
323 raise ValueError, _("Can't run as root!") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
324 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
325 if os.getuid(): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
326 print _('WARNING: ignoring "-u" argument, not root') |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
327 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
328 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
329 import pwd |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
330 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
331 raise ValueError, _("Can't change users - no pwd module") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
332 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
333 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
334 uid = int(user) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
335 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
336 uid = pwd.getpwnam(user)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
337 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
338 pwd.getpwuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
339 except KeyError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
340 raise ValueError, _("User %(user)s doesn't exist")%locals() |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
341 os.setuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
342 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
343 class TrackerHomeOption(configuration.FilePathOption): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
344 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
345 # Tracker homes do not need any description strings |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
346 def format(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
347 return "%(name)s = %(value)s\n" % { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
348 "name": self.setting, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
349 "value": self.value2str(self._value), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
350 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
351 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
352 class ServerConfig(configuration.Config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
353 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
354 SETTINGS = ( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
355 ("main", ( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
356 (configuration.Option, "host", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
357 "Host name of the Roundup web server instance.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
358 "If empty, listen on all network interfaces."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
359 (configuration.IntegerNumberOption, "port", DEFAULT_PORT, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
360 "Port to listen on."), |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
361 (configuration.NullableFilePathOption, "favicon", "favicon.ico", |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
362 "Path to favicon.ico image file." |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
363 " If unset, built-in favicon.ico is used."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
364 (configuration.NullableOption, "user", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
365 "User ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
366 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
367 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
368 "Availability: Unix."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
369 (configuration.NullableOption, "group", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
370 "Group ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
371 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
372 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
373 "Availability: Unix."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
374 (configuration.BooleanOption, "log_hostnames", "no", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
375 "Log client machine names instead of IP addresses " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
376 "(much slower)"), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
377 (configuration.NullableFilePathOption, "pidfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
378 "File to which the server records " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
379 "the process id of the daemon.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
380 "If this option is not set, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
381 "the server will run in foreground\n"), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
382 (configuration.NullableFilePathOption, "logfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
383 "Log file path. If unset, log to stderr."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
384 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
385 "Set processing of each request in separate subprocess.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
386 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
387 )), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
388 ("trackers", (), "Roundup trackers to serve.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
389 "Each option in this section defines single Roundup tracker.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
390 "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
|
391 "Option value is tracker home directory path.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
392 "The path may be either absolute or relative\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
393 "to the directory containig this config file."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
394 ) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
395 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
396 # options recognized by config |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
397 OPTIONS = { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
398 "host": "n:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
399 "port": "p:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
400 "group": "g:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
401 "user": "u:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
402 "logfile": "l:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
403 "pidfile": "d:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
404 "log_hostnames": "N", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
405 "multiprocess": "t:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
406 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
407 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
408 def __init__(self, config_file=None): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
409 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
|
410 self.sections.append("trackers") |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
411 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
412 def _adjust_options(self, config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
413 """Add options for tracker homes""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
414 # return early if there are no tracker definitions. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
415 # trackers must be specified on the command line. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
416 if not config.has_section("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
417 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
418 # config defaults appear in all sections. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
419 # filter them out. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
420 defaults = config.defaults().keys() |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
421 for name in config.options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
422 if name not in defaults: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
423 self.add_option(TrackerHomeOption(self, "trackers", name)) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
424 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
425 def getopt(self, args, short_options="", long_options=(), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
426 config_load_options=("C", "config"), **options |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
427 ): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
428 options.update(self.OPTIONS) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
429 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
|
430 short_options, long_options, config_load_options, **options) |
|
2835
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 _get_name(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
433 return "Roundup server" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
434 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
435 def trackers(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
436 """Return tracker definitions as a list of (name, home) pairs""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
437 trackers = [] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
438 for option in self._get_section_options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
439 trackers.append((option, os.path.abspath( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
440 self["TRACKERS_" + option.upper()]))) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
441 return trackers |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
442 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
443 def set_logging(self): |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
444 """Initialise logging to the configured file, if any.""" |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
445 # appending, unbuffered |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
446 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
|
447 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
448 def get_server(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
449 """Return HTTP server object to run""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
450 # 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
|
451 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
|
452 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
453 # 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
|
454 tracker_homes = self.trackers() |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
455 if self["MULTIPROCESS"] == "debug": |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
456 trackers = None |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
457 else: |
|
2852
37e6ebd5ba29
when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2848
diff
changeset
|
458 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
|
459 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
|
460 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
461 # build customized request handler class |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
462 class RequestHandler(RoundupRequestHandler): |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
463 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
|
464 TRACKER_HOMES = dict(tracker_homes) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
465 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
|
466 DEBUG_MODE = self["MULTIPROCESS"] == "debug" |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
467 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
|
468 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
469 # obtain request server class |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
470 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES: |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
471 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
|
472 "switching to single-process") % self["MULTIPROCESS"] |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
473 self["MULTIPROCESS"] = "none" |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
474 server_class = BaseHTTPServer.HTTPServer |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
475 elif self["MULTIPROCESS"] == "fork": |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
476 class ForkingServer(SocketServer.ForkingMixIn, |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
477 BaseHTTPServer.HTTPServer): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
478 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
479 server_class = ForkingServer |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
480 elif self["MULTIPROCESS"] == "thread": |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
481 class ThreadingServer(SocketServer.ThreadingMixIn, |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
482 BaseHTTPServer.HTTPServer): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
483 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
484 server_class = ThreadingServer |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
485 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
486 server_class = BaseHTTPServer.HTTPServer |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
487 # obtain server before changing user id - allows to |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
488 # use port < 1024 if started as root |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
489 try: |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
490 httpd = server_class((self["HOST"], self["PORT"]), RequestHandler) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
491 except socket.error, e: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
492 if e[0] == errno.EADDRINUSE: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
493 raise socket.error, \ |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
494 _("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
|
495 % self["PORT"] |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
496 raise |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
497 # change user and/or group |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
498 setgid(self["GROUP"]) |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
499 setuid(self["USER"]) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
500 # return the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
501 return httpd |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
502 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
503 try: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
504 import win32serviceutil |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
505 except: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
506 RoundupService = None |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
507 else: |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
508 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
509 # allow the win32 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
510 import win32service |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
511 |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
512 class SvcShutdown(Exception): |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
513 pass |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
514 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
515 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
|
516 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
517 _svc_name_ = "roundup" |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
518 _svc_display_name_ = "Roundup Bug Tracker" |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
519 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
520 running = 0 |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
521 server = None |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
522 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
523 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
|
524 import servicemanager |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
525 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
|
526 config = ServerConfig() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
527 (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
|
528 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
|
529 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
|
530 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
|
531 (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
|
532 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
|
533 return |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
534 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
|
535 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
|
536 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
|
537 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
|
538 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
|
539 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
|
540 " 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
|
541 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
|
542 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
|
543 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
|
544 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
|
545 (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
|
546 self.ReportServiceStatus(win32service.SERVICE_STOPPED) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
547 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
548 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
|
549 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
|
550 # 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
|
551 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
|
552 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
|
553 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
|
554 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
|
555 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
|
556 sock.close() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
557 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
558 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
559 def usage(message=''): |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
560 if RoundupService: |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
561 os_part = \ |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
562 ""''' -c <Command> Windows Service options. |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
563 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
|
564 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
|
565 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
|
566 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
|
567 specifics.''' |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
568 else: |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
569 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
|
570 -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
|
571 -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
|
572 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
|
573 specified if -d is used.''' |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
574 if message: |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
575 message += '\n' |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
576 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
|
577 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
578 Options: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
579 -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
|
580 -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
|
581 -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
|
582 -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
|
583 -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
|
584 -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
|
585 -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
|
586 -N log client machine names instead of IP addresses (much slower) |
|
2843
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
587 -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
|
588 Allowed values: %(mp_types)s. |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
589 %(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
|
590 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
591 Long options: |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
592 --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
|
593 --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
|
594 --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
|
595 --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
|
596 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
|
597 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
|
598 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
599 Examples: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
600 |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
601 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
|
602 -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
|
603 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
|
604 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
605 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
|
606 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
607 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
|
608 |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
609 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
|
610 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
|
611 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
612 Configuration file format: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
613 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
|
614 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
|
615 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
|
616 for option descriptions. |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
617 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
618 How to use "name=tracker home": |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
619 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
|
620 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
|
621 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
|
622 "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
|
623 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
|
624 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
|
625 ''') % { |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
626 "message": message, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
627 "os_part": os_part, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
628 "port": DEFAULT_PORT, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
629 "mp_def": DEFAULT_MULTIPROCESS, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
630 "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
|
631 } |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
632 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
633 |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
634 def daemonize(pidfile): |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
635 ''' Turn this process into a daemon. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
636 - 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
|
637 - make our parent PID 1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
638 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
639 Write our new PID to the pidfile. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
640 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
641 From A.M. Kuuchling (possibly originally Greg Ward) with |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
642 modification from Oren Tirosh, and finally a small mod from me. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
643 ''' |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
644 # Fork once |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
645 if os.fork() != 0: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
646 os._exit(0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
647 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
648 # Create new session |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
649 os.setsid() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
650 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
651 # Second fork to force PPID=1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
652 pid = os.fork() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
653 if pid: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
654 pidfile = open(pidfile, 'w') |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
655 pidfile.write(str(pid)) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
656 pidfile.close() |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
657 os._exit(0) |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
658 |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
659 os.chdir("/") |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
660 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
661 # 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
|
662 # descriptors can't be used again |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
663 devnull = os.open('/dev/null', 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
664 os.dup2(devnull, 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
665 os.dup2(devnull, 1) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
666 os.dup2(devnull, 2) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
667 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
668 undefined = [] |
|
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
669 def run(port=undefined, success_message=None): |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
670 ''' 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
|
671 ''' |
|
1606
8b0bd0b897e6
added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents:
1554
diff
changeset
|
672 # 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
|
673 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
|
674 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
|
675 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
676 config = ServerConfig() |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
677 # additional options |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
678 short_options = "hvS" |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
679 if RoundupService: |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
680 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
|
681 try: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
682 (optlist, args) = config.getopt(sys.argv[1:], |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
683 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
|
684 except (getopt.GetoptError, configuration.ConfigurationError), e: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
685 usage(str(e)) |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
686 return |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
687 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
688 # 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
|
689 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
|
690 # 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
|
691 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
|
692 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
|
693 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
|
694 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
|
695 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
|
696 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
|
697 long_name += "=" |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
698 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
|
699 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
|
700 svc_args = [] |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
701 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
|
702 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
|
703 # 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
|
704 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
|
705 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
|
706 # 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
|
707 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
|
708 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
|
709 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
|
710 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
|
711 # pass the control to serviceutil |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
712 win32serviceutil.HandleCommandLine(RoundupService, |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
713 argv=sys.argv[:1] + args) |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
714 return |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
715 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
716 # add tracker names from command line. |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
717 # 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
|
718 if args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
719 for arg in args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
720 try: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
721 name, home = arg.split('=') |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
722 except ValueError: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
723 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
|
724 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
|
725 config["TRACKERS_" + name.upper()] = home |
|
2308
e21c3a447a62
translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2287
diff
changeset
|
726 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
727 # handle remaining options |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
728 if optlist: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
729 for (opt, arg) in optlist: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
730 if opt in ("-h", "--help"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
731 usage() |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
732 elif opt in ("-v", "--version"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
733 print '%s (python %s)' % (roundup_version, |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
734 sys.version.split()[0]) |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
735 elif opt in ("-S", "--save-config"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
736 config.save() |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
737 print _("Configuration saved to %s") % config.filepath |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
738 # 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
|
739 return |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
740 |
|
2774
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
741 # 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
|
742 if port is not undefined: |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
743 config.PORT = port |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
744 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
745 if config["LOGFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
746 config["LOGFILE"] = os.path.abspath(config["LOGFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
747 # switch logging from stderr/stdout to logfile |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
748 config.set_logging() |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
749 if config["PIDFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
750 config["PIDFILE"] = os.path.abspath(config["PIDFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
751 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
752 # 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
|
753 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
|
754 if not hasattr(os, 'fork'): |
|
2308
e21c3a447a62
translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2287
diff
changeset
|
755 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
|
756 " 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
|
757 sys.exit(0) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
758 else: |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
759 daemonize(config["PIDFILE"]) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
760 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
761 # create the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
762 httpd = config.get_server() |
|
1047
1890c611de08
add daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
992
diff
changeset
|
763 |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
764 if success_message: |
|
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
765 print success_message |
|
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
766 else: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
767 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
|
768 % config |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
769 |
|
1311
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
770 try: |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
771 httpd.serve_forever() |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
772 except KeyboardInterrupt: |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
773 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
|
774 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
775 if __name__ == '__main__': |
|
593
2256f81293c1
Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
592
diff
changeset
|
776 run() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
777 |
|
2543
6eda7612676d
allow ids in addition to names for -g and -u arguments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2521
diff
changeset
|
778 # vim: set filetype=python sts=4 sw=4 et si : |
