Mercurial > p > roundup > code
view roundup/scripts/roundup_xmlrpc_server.py @ 3916:57ad3e2c2545
handle bad cookies
Roundup's cgi gets all cookies from all apps on the same server. some
apps aren't as well behaved as roundup and generate cookies that do
not follow the spec perfectly. This causes python's Cookie module to
throw an exception when trying to parse them. In the spirit of being
liberal in what we accept, we create a LiberalCookie class that can
handle those out-of-spec cookies and allow roundup to continue onward.
[SF#1691708]
code from S. Woodside
| author | Justus Pendleton <jpend@users.sourceforge.net> |
|---|---|
| date | Sat, 22 Sep 2007 21:20:57 +0000 |
| parents | cf6c45201980 |
| children | edf526c91412 |
line wrap: on
line source
#! /usr/bin/env python # # Copyright (C) 2007 Stefan Seefeld # All rights reserved. # For license terms see the file COPYING.txt. # import getopt, os, sys, socket from roundup.xmlrpc import RoundupServer, RoundupRequestHandler from roundup.instance import TrackerError from SimpleXMLRPCServer import SimpleXMLRPCServer def usage(): print """ Options: -i instance home -- specify the issue tracker "home directory" to administer -V -- be verbose when importing -p, --port <port> -- port to listen on """ def run(): try: opts, args = getopt.getopt(sys.argv[1:], 'e:i:p:V', ['encoding=', 'port=']) except getopt.GetoptError, e: usage() return 1 verbose = False tracker = '' port = 8000 encoding = None for opt, arg in opts: if opt == '-V': verbose = True elif opt == '-i': tracker = arg elif opt in ['-p', '--port']: port = int(arg) elif opt in ['-e', '--encoding']: encoding = encoding if sys.version_info[0:2] < (2,5): if encoding: print 'encodings not supported with python < 2.5' sys.exit(-1) server = SimpleXMLRPCServer(('', port), RoundupRequestHandler) else: server = SimpleXMLRPCServer(('', port), RoundupRequestHandler, allow_none=True, encoding=encoding) if not os.path.exists(tracker): print 'Instance home does not exist.' sys.exit(-1) try: object = RoundupServer(tracker, verbose) except TrackerError: print 'Instance home does not exist.' sys.exit(-1) server.register_instance(object) # Go into the main listener loop print 'Roundup XMLRPC server started on %s:%d' \ % (socket.gethostname(), port) try: server.serve_forever() except KeyboardInterrupt: print 'Keyboard Interrupt: exiting' if __name__ == '__main__': run()
