#!/usr/bin/python -O # # A server which CAN pass the compliancy test at validator.xmlrpc.com # # import sys sys.path.append('..') import xmlrpc import traceback PORT = 23456 def main(): METHODS = { 'validator1.arrayOfStructsTest' : arrayOfStructsTest, 'validator1.countTheEntities' : countTheEntities, 'validator1.easyStructTest' : easyStructTest, 'validator1.echoStructTest' : echoStructTest, 'validator1.manyTypesTest' : manyTypesTest, 'validator1.moderateSizeArrayCheck' : moderateSizeArrayCheck, 'validator1.simpleStructReturnTest' : simpleStructReturnTest, 'validator1.nestedStructTest' : nestedStructTest } s = xmlrpc.server() s.addMethods(METHODS) s.bindAndListen(PORT) while 1: try: s.work() except: traceback.print_exc() def arrayOfStructsTest(server, source, name, args): s = 0 for dict in args[0]: s = s + dict['curly'] return s def easyStructTest(server, source, name, args): dict = args[0] s = 0 for key in ('moe', 'larry', 'curly'): s = s + dict[key] return s def echoStructTest(server, source, name, args): return args[0] def countTheEntities(server, source, name, args): specialChars = { '>' : 'ctRightAngleBrackets', '<' : 'ctLeftAngleBrackets', '&' : 'ctAmpersands', '\'' : 'ctApostrophes', '"' : 'ctQuotes' } sums = {} for k in specialChars.values(): sums[k] = 0 s = args[0] for c in s: if specialChars.has_key(c): tag = specialChars[c] sums[tag] = sums[tag] + 1 return sums def manyTypesTest(server, source, name, args): return args def moderateSizeArrayCheck(server, source, name, args): array = args[0] return array[0] + array[-1] def nestedStructTest(server, source, name, args): dict = args[0]['2000']['04']['01'] return dict['moe'] + dict['curly'] + dict['larry'] def simpleStructReturnTest(server, source, name, args): num = args[0] return { 'times10' : num*10, 'times100' : num*100, 'times1000' : num*1000 } main()