def __init__(self): CLEO_wsdl = 'http://cougar.cs.cornell.edu/CLEO/CLEO_WS.asmx?WSDL' CLEO_namespace = 'http://cleo.lepp.cornell.edu/CLEO' config = SOAPpy.SOAPConfig() config.debug = 0 config.buildWithNamespacePrefix = False self.proxy = SOAPpy.WSDL.Proxy(CLEO_wsdl, config, namespace=CLEO_namespace, noroot=1) meths = self.proxy.methods.values() for m in meths: m.namespace = CLEO_namespace
def main(argv): global db dbname = 'db/mcids' type = None args = argv[1:] debug = False port = 1080 while args: if args[0] == '-db' and len(args) > 1: dbname = args[1] args = args[2:] elif args[0] == '-D': debug = True args = args[1:] elif args[0] == '-p' and len(args) > 1: port = int(args[1]) args = args[2:] elif type is None and not args[0].startswith('-'): type = args[0] args = args[1:] else: usage(dbname) db = sql.connect(dbname) generator.load(type) # This is set up so the very next allocation from the SOAP service # will result in a database write. That way, you can start and # stop the SOAP service, and as long as there weren't any SOAP calls, # we're not allocating blocks of MCIDs. # for i in xrange(generator.iterations): generator.next_mcid() config = SOAPpy.SOAPConfig() #config.dumpSOAPIn = True server = SOAPpy.SOAPServer(("mcid.internal", port), namespace = NS, config = config, RequestHandler = RESTRequestHandler) server.registerFunction(generator.next_mcid_str, path='mcid', namespace=NS) server.registerFunction(generator.next_mcid, path='mcid', namespace=NS) # On unix root, try to setuid to the 'mcid_server' account for # least privilege # if not debug: try: from os import _exit, setuid, setgid, fork, dup2, open, close, \ O_RDONLY, O_WRONLY, O_APPEND, O_CREAT from pwd import getpwnam except ImportError: pass else: pw = getpwnam('mcid_server') pid = fork() if pid: print >>file(PID_FILE, 'w'), pid _exit(0) fd = open('/dev/null', O_RDONLY) dup2(fd, 0) fd = open(LOG_FILE, O_WRONLY | O_APPEND | O_CREAT) dup2(fd, 1) dup2(fd, 2) close(fd) setgid(pw.pw_gid) setuid(pw.pw_uid) server.serve_forever()
def main(argv): from os import getpid global status args = argv[1:] debug = False port = DEFAULT_PORT username = DEFAULT_USERNAME pid_file = PID_FILE log_file = LOG_FILE while args: if args[0] == '-D': debug = True args = args[1:] elif args[0] == '-C' and len(args) > 1: args = file(args[1]).read().split() + args[2:] elif args[0] == '-p' and len(args) > 1: port = int(args[1]) args = args[2:] elif args[0] == '-u' and len(args) > 1: username = args[1] args = args[2:] elif args[0] == '-pid' and len(args) > 1: pid_file = args[1] args = args[2:] elif args[0] == '-log' and len(args) > 1: log_file = args[1] args = args[2:] elif args[0] == '-db' and len(args) > 1: db_options['db'] = args[1] args = args[2:] elif args[0] == '-user' and len(args) > 1: db_options['user'] = args[1] args = args[2:] elif args[0] == '-host' and len(args) > 1: db_options['host'] = args[1] args = args[2:] else: usage() config = SOAPpy.SOAPConfig() #config.dumpSOAPIn = True server = SOAPpy.SOAPServer(('0.0.0.0', port), namespace = NS, config = config, RequestHandler = RESTRequestHandler) status = Status() for g in generators: # Create function names of the form # next_{}_set # # for example: # next_mcid_set() # next_tracking_number_set() # server.registerFunction(g.soap_set, funcName = 'next_%s_set' % g.name, namespace = NS) setattr(status, '%s_requests' % g.name, 0) status.uid = status.gid = 0 status.log_file = None status.version = __version__ if not debug: try: from os import _exit, setuid, setgid, fork, dup2, open, close, \ O_RDONLY, O_WRONLY, O_APPEND, O_CREAT from pwd import getpwnam except ImportError: pass else: pw = getpwnam(username) status.user = username pid = fork() if pid: print >>file(pid_file, 'w'), pid _exit(0) fd = open('/dev/null', O_RDONLY) dup2(fd, 0) fd = open(log_file, O_WRONLY | O_APPEND | O_CREAT) dup2(fd, 1) dup2(fd, 2) close(fd) setgid(pw.pw_gid) setuid(pw.pw_uid) status.uid = pw.pw_uid status.gid = pw.pw_gid status.log_file = log_file status.port = port status.db_host = db_options['host'] status.db_user = db_options['user'] status.db = db_options['db'] status.pid = getpid() status.started = datetime.utcnow() status.requests = 0 server.serve_forever()
def main(argv): global status, mcids, tracking_numbers, proxy, mcid_cache, tn_cache, tns_cache_path, mcid_cache_path args = argv[1:] debug = False username = DEFAULT_USERNAME port = DEFAULT_PORT try: socket.gethostbyname(DEFAULT_HOST) host = DEFAULT_HOST except socket.error: host = '127.0.0.1' pid_file = PID_FILE log_file = LOG_FILE url = DEFAULT_URL appliance = None use_cache = False while args: if args[0] == '-D': debug = True args = args[1:] elif args[0] == '-C' and len(args) > 1: args = file(args[1]).read().split() + args[2:] elif args[0] == '-p' and len(args) > 1: port = int(args[1]) args = args[2:] elif args[0] == '-h' and len(args) > 1: host = args[1] args = args[2:] elif args[0] == '-u' and len(args) > 1: username = args[1] args = args[2:] elif args[0] == '-pid' and len(args) > 1: pid_file = args[1] args = args[2:] elif args[0] == '-log' and len(args) > 1: log_file = args[1] args = args[2:] elif args[0] == '-url' and len(args) > 1: url = args[1] args = args[2:] elif args[0] == '-usecache' and len(args) > 1: use_cache = True mcid_cache_path = os.path.join(args[1], mcid_cache_path) tns_cache_path = os.path.join(args[1], tns_cache_path) args = args[2:] elif not args[0].startswith('-') and not appliance: appliance = args[0] args = args[1:] else: usage() if not appliance: appliance = socket.getfqdn() if use_cache: print "Using cache for mcids and tracking numbers: loading archived sets" f = open(mcid_cache_path, 'r') mcid_cache = pickle.load(f) print "Loaded " + str(len(mcid_cache)) + " mcid sets" mcids = infinite_sequence(next_mcid_cache, appliance) f.close() f = open(tns_cache_path, 'r') tn_cache = pickle.load(f) f.close() print "Loaded " + str(len(tn_cache)) + " tracking number sets" tracking_numbers = infinite_sequence(next_tn_cache, appliance) else: proxy = SOAPpy.SOAPProxy(url, namespace='http://www.medcommons.net/globals') mcids = infinite_sequence(proxy.next_mcid_set, appliance) tracking_numbers = infinite_sequence(proxy.next_tracking_number_set, appliance) status = Status() status.port = port status.host = host status.uid = status.gid = 0 status.url = url status.requests = status.mcid_requests = 0 status.tracking_number_requests = 0 status.version = __version__ config = SOAPpy.SOAPConfig() #config.dumpSOAPIn = True server = SOAPpy.SOAPServer((host, port), namespace=NS2, config=config, RequestHandler=RESTRequestHandler) server.registerFunction(next_mcid_str, namespace=NS2) server.registerFunction(next_mcid, namespace=NS2) server.registerFunction(next_tracking_number_str, namespace=NS2) server.registerFunction(next_tracking_number, namespace=NS2) # backwards compatibility server.registerFunction(next_mcid_str, path='mcid', namespace=NS1) server.registerFunction(next_mcid, path='mcid', namespace=NS1) # On unix root, try to setuid to the 'mc_locals' account for # least privilege # if not debug: try: from os import _exit, setuid, setgid, fork, dup2, \ O_RDONLY, O_WRONLY, O_APPEND, O_CREAT from pwd import getpwnam except ImportError: pass else: pw = getpwnam(username) status.user = username pid = fork() if pid: print >> file(pid_file, 'w'), pid _exit(0) fd = os.open('/dev/null', O_RDONLY) dup2(fd, 0) fd = os.open(log_file, O_WRONLY | O_APPEND | O_CREAT) dup2(fd, 1) dup2(fd, 2) os.close(fd) setgid(pw.pw_gid) setuid(pw.pw_uid) status.gid = pw.pw_gid status.uid = pw.pw_uid status.started = datetime.utcnow() server.serve_forever()