#!/usr/bin/env python # This server validates as of 4/23/01 when run with UserLand's SOAP validator # (http://validator.soapware.org/). import getopt import sys sys.path.insert (1, '..') from SOAPpy import SOAP ident = '$Id: soapware.py 98 2003-03-08 05:10:01Z warnes $' def whichToolkit (): return SOAP.SOAPUserAgent () def countTheEntities (s): counts = {'ctLeftAngleBrackets': 0, 'ctRightAngleBrackets': 0, 'ctAmpersands': 0, 'ctApostrophes': 0, 'ctQuotes': 0} for i in s: if i == '<': counts['ctLeftAngleBrackets'] += 1 elif i == '>': counts['ctRightAngleBrackets'] += 1 elif i == '&': counts['ctAmpersands'] += 1 elif i == "'": counts['ctApostrophes'] += 1 elif i == '"': counts['ctQuotes'] += 1 return counts def easyStructTest (stooges): return stooges['larry'] + stooges['moe'] + stooges['curly'] def echoStructTest (myStruct): return myStruct def manyTypesTest (num, bool, state, doub, dat, bin): return [num, SOAP.booleanType (bool), state, doub, SOAP.dateTimeType (dat), bin] def moderateSizeArrayCheck (myArray): return myArray[0] + myArray[-1] def nestedStructTest (myStruct): return easyStructTest (myStruct.year2000.month04.day01) def simpleStructReturnTest (myNumber): return {'times10': myNumber * 10, 'times100': myNumber * 100, 'times1000': myNumber * 1000} namespace = 'http://www.soapware.org/' DEFAULT_HOST = 'localhost' DEFAULT_PORT = 8080 def usage (error = None): sys.stdout = sys.stderr if error != None: print error print """usage: %s [options] If a long option shows an argument is mandatory, it's mandatory for the equivalent short option also. The default (if any) is shown in brackets. -?, --help display this usage -h, --host=HOST use HOST in the address to listen on [%s] -p, --port=PORT listen on PORT [%d] """ % (sys.argv[0], DEFAULT_HOST, DEFAULT_PORT), sys.exit (0) def main (): host = DEFAULT_HOST port = DEFAULT_PORT try: opts, args = getopt.getopt (sys.argv[1:], '?h:p:', ['help', 'host', 'port']) for opt, arg in opts: if opt in ('-?', '--help'): usage () elif opt in ('-h', '--host'): host = arg elif opt in ('-p', '--port'): port = int (arg) else: raise AttributeError, \ "Recognized but unimplemented option `%s'" % opt except SystemExit: raise except: usage (sys.exc_info ()[1]) server = SOAP.SOAPServer ((host, port)) server.registerFunction (whichToolkit, namespace) server.registerFunction (countTheEntities) server.registerFunction (easyStructTest) server.registerFunction (echoStructTest) server.registerFunction (manyTypesTest) server.registerFunction (moderateSizeArrayCheck) server.registerFunction (nestedStructTest) server.registerFunction (simpleStructReturnTest) server.serve_forever() if __name__ == '__main__': try: sys.exit (main ()) except KeyboardInterrupt: sys.exit (0)