def test_simple(self): inMessage = Message('a', [('s', String), ('i', Integer)]) outMessage = Message('aResponse', [('retval', DateTime)]) desc = MethodDescriptor('a', 'a', inMessage, outMessage, '') client = SimpleSoapClient('127.0.0.1:9191', '/', desc) results = client('abc', 54) self.assertEquals(results, datetime.datetime(1901, 12, 15))
def test_namespaces(self): m = Message('{some_namespace}myMessage', [('s', String), ('i', Integer)]) e = m.to_xml('a', 43) self.assertEquals(e.tag, '{some_namespace}myMessage') m1 = Message('myMessage', [('s', String), ('i', Integer)], ns='some_namespace') e2 = m1.to_xml('a', 43) self.assertEquals(e2.get('xmlns'), 'some_namespace')
def explainMethod(*args, **kwargs): if '_soap_descriptor' in kwargs: name = f.func_name _returns = kparams.get('_returns') _isCallback = kparams.get('_isCallback', False) _soapAction = kparams.get('_soapAction', name) _isAsync = kparams.get('_isAsync', False) _inMessage = kparams.get('_inMessage', name) _inVariableNames = kparams.get('_inVariableNames', {}) _outMessage = kparams.get('_outMessage', '%sResponse' % name) _outVariableNames = kparams.get('_outVariableNames', kparams.get('_outVariableName', '%sResult' % name)) _mtom = kparams.get('_mtom', False) ns = None # the decorator function does not have a reference to the # class and needs to be passed in if 'klazz' in kwargs: ns = getTNS(kwargs['klazz']) # input message param_names = f.func_code.co_varnames[ 1:f.func_code.co_argcount] try: in_params = [(_inVariableNames.get(param_names[i], param_names[i]), params[i]) for i in range(0, len(params))] except IndexError: raise Exception("%s has parameter numbers mismatching" % f.func_name) in_message = Message(_inMessage, in_params, ns=ns, typ=_inMessage) # output message out_params = [] if _returns: if isinstance(_returns, (list, tuple)): returns = zip(_outVariableNames, _returns) for key, value in returns: out_params.append((key, value)) else: out_params = [(_outVariableNames, _returns)] else: out_params = [] out_message = Message(_outMessage, out_params, ns=ns, typ=_outMessage) doc = getattr(f, '__doc__') descriptor = MethodDescriptor(f.func_name, _soapAction, in_message, out_message, doc, _isCallback, _isAsync, _mtom) return descriptor return f(*args, **kwargs)
def test_async(self): inMessage = Message('d', [('person', Person)]) outMessage = Message('dResponse', []) desc = MethodDescriptor('d', 'd', inMessage, outMessage, '') client = SimpleSoapClient('127.0.0.1:9191', '/', desc) p = Person() p.name = 'wilson' r = client(p) self.assertEquals(r, None)
def test_fault(self): inMessage = Message('fault', []) outMessage = Message('faultResponse', []) desc = MethodDescriptor('fault', 'fault', inMessage, outMessage, '') client = SimpleSoapClient('127.0.0.1:9191', '/', desc) try: client() except Fault, f: self.assertEquals(f.faultcode, 'faultFault') self.assertEquals(f.faultstring, 'Testing faults') self.assertTrue(f.detail.find('client_test.py') > -1)
def test_message_repeating(self): m = Message('myMessage', [('p', Repeating(String))]) method = m.to_xml(["a", "b", "c", "d"]) self.assertEquals(len(method.getchildren()), 4) data = m.from_xml(method) self.assertEquals(data, [["a", "b", "c", "d"]])
def test_soap_envelope(self): m = Message('myMessage', [('p', Person)]) env = make_soap_envelope(m.to_xml(Person())) self.assertTrue(env.tag.endswith('Envelope')) self.assertTrue(env.getchildren()[0].tag.endswith('Body')) m = Message('myMessage', [('p', Person)]) env = make_soap_envelope( m.to_xml(Person()), header_elements=[et.Element('header1'), et.Element('header2')]) env = et.fromstring(et.tostring(env)) self.assertTrue(env.getchildren()[0].tag.endswith('Header')) self.assertEquals(len(env.getchildren()[0].getchildren()), 2) self.assertTrue(env.getchildren()[1].tag.endswith('Body'))
def test_nested(self): inMessage = Message('b', [('p', Person), ('s', String), ('i', Integer)]) outMessage = Message('bResponse', [('retval', Address)]) desc = MethodDescriptor('b', 'b', inMessage, outMessage, '') client = SimpleSoapClient('127.0.0.1:9191', '/', desc) p = Person() p.name = 'wilson' p.addresses = [] for i in range(0, 123): a = Address() a.zip = i p.addresses.append(a) res = client(p, 'abc', 123) self.assertEquals(res.longitude, None) self.assertEquals(res.zip, 4444) self.assertEquals(res.street, 'wsgi way')
def handle_messages(messages): print messages print "^" * 80 for m in messages: name = m.get('name') p = m.find(qn('wsdl', 'part')) _messages[name] = (p.get('element'), p.get('name')) params = get_params(name) print 'params', params msg_obj = Message(name, name, params) _messages[name] = msg_obj
def explainMethod(*args, **kwargs): if kwargs.has_key('_soap_descriptor'): name = f.func_name _returns = kparams.get('_returns') _isCallback = kparams.get('_isCallback',False) _soapAction = kparams.get('_soapAction',name) _isAsync = kparams.get('_isAsync',False) _inMessage = kparams.get('_inMessage',name) _inVariableNames = kparams.get('_inVariableNames',{}) _outMessage = kparams.get('_outMessage','%sResponse'%name) _outVariableName = kparams.get('_outVariableName','retval') _mtom = kparams.get('_mtom',False) ns = None # passed in from the _get_soap_methods() call # the decorator function does not have a reference to the # class and needs to be passed in if kwargs.has_key('klazz'): ns = getTNS(kwargs['klazz']) # input message param_names = f.func_code.co_varnames[1:f.func_code.co_argcount] in_params = [(_inVariableNames.get(param_names[i],param_names[i]),params[i]) for i in range(0,len(params))] in_message = Message(_inMessage,in_params,ns=ns,typ=_inMessage) # output message if _returns: out_params = [(_outVariableName,_returns)] else: out_params = [] out_message = Message(_outMessage,out_params,ns=ns,typ=_outMessage) doc = getattr(f,'__doc__') descriptor = MethodDescriptor(f.func_name,_soapAction,in_message,out_message,doc,_isCallback,_isAsync,_mtom) return descriptor return f(*args, **kwargs)
def test_simple_message(self): m = Message('myMessage', [('s', String), ('i', Integer)]) e = m.to_xml('a', 43) self.assertEquals(e.tag, 'myMessage') self.assertEquals(e.getchildren()[0].tag, 's') self.assertEquals(e.getchildren()[1].tag, 'i') self.assertEquals(e.getchildren()[0].text, 'a') self.assertEquals(e.getchildren()[1].text, '43') values = m.from_xml(e) self.assertEquals('a', values[0]) self.assertEquals(43, values[1])
def test_to_xml_nested(self): m = Message('myMessage', [('p', Person)]) p = Person() p.name = 'steve-o' p.age = 2 p.addresses = [] for i in range(0, 1000): a = Address() a.street = '123 happy way' a.zip = i a.laditude = '45.22' a.longitude = '444.234' p.addresses.append(a) element = m.to_xml(p) self.assertEquals('myMessage', element.tag) addresses = element.getchildren()[0].find('addresses').getchildren() self.assertEquals(1000, len(addresses)) self.assertEquals('0', addresses[0].find('zip').text)
def test_class_to_xml(self): m = Message('myMessage', [('p', Person)]) p = Person() p.name = 'steve-o' p.age = 2 element = m.to_xml(p) self.assertEquals(element.tag, 'myMessage') self.assertEquals(element.getchildren()[0].find('name').text, 'steve-o') self.assertEquals(element.getchildren()[0].find('age').text, '2') self.assertEquals( len(element.getchildren()[0].find('addresses').getchildren()), 0) p1 = m.from_xml(element)[0] self.assertEquals(p1.name, p.name) self.assertEquals(p1.age, p.age) self.assertEquals(p1.addresses, [])