view roundup/scripts/roundup_xmlrpc_server.py @ 3909:e89bcb28f683

indexargs_url force ids to int ids appear as hyperdb.String instances, which confused indexargs_url when they appear in the filterspec. They need to be treated as treated as integers when generating URLs. It feels sort of hacky to check for 'id' like this but I'm at a loss for what else to do in this case. Suggestions are welcome :) Maybe we should look into using some other hyperdb class to represent ids? this fixes [SF#783492] Some trailing whitespace also got trimmed.
author Justus Pendleton <jpend@users.sourceforge.net>
date Tue, 18 Sep 2007 16:59:42 +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()

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