1 #! /usr/bin/env python
2 #
3 # Copyright (C) 2007 Stefan Seefeld
4 # All rights reserved.
5 # For license terms see the file COPYING.txt.
6 #
8 import getopt, os, sys, socket
9 from roundup.xmlrpc import RoundupServer, RoundupRequestHandler
10 from roundup.instance import TrackerError
11 from SimpleXMLRPCServer import SimpleXMLRPCServer
13 def usage():
14 print """
16 Options:
17 -i instance home -- specify the issue tracker "home directory" to administer
18 -V -- be verbose when importing
19 -p, --port <port> -- port to listen on
21 """
23 def run():
25 try:
26 opts, args = getopt.getopt(sys.argv[1:],
27 'e:i:p:V', ['encoding=', 'port='])
28 except getopt.GetoptError, e:
29 usage()
30 return 1
32 verbose = False
33 tracker = ''
34 port = 8000
35 encoding = None
37 for opt, arg in opts:
38 if opt == '-V':
39 verbose = True
40 elif opt == '-i':
41 tracker = arg
42 elif opt in ['-p', '--port']:
43 port = int(arg)
44 elif opt in ['-e', '--encoding']:
45 encoding = encoding
47 if sys.version_info[0:2] < (2,5):
48 if encoding:
49 print 'encodings not supported with python < 2.5'
50 sys.exit(-1)
51 server = SimpleXMLRPCServer(('', port), RoundupRequestHandler)
52 else:
53 server = SimpleXMLRPCServer(('', port), RoundupRequestHandler,
54 allow_none=True, encoding=encoding)
55 if not os.path.exists(tracker):
56 print 'Instance home does not exist.'
57 sys.exit(-1)
58 try:
59 object = RoundupServer(tracker, verbose)
60 except TrackerError:
61 print 'Instance home does not exist.'
62 sys.exit(-1)
64 server.register_instance(object)
66 # Go into the main listener loop
67 print 'Roundup XMLRPC server started on %s:%d' \
68 % (socket.gethostname(), port)
69 try:
70 server.serve_forever()
71 except KeyboardInterrupt:
72 print 'Keyboard Interrupt: exiting'
74 if __name__ == '__main__':
75 run()