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 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_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_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 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_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_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 get_output_message(ns): _returns = kparams.get('_returns') _out_message = kparams.get('_out_message', '%sResponse' % f.func_name) kparams.get('_out_variable_name') out_params = TypeInfo() if _returns: if isinstance(_returns, (list, tuple)): default_names = ['%sResult%d' % (f.func_name, i) for i in range(len(_returns))] _out_variable_names = kparams.get( '_out_variable_names', default_names) assert (len(_returns) == len(_out_variable_names)) var_pair = zip(_out_variable_names,_returns) out_params = TypeInfo(var_pair) else: _out_variable_name = kparams.get( '_out_variable_name', '%sResult' % f.func_name) out_params[_out_variable_name] = _returns message=Message.produce(type_name=_out_message,namespace=ns, members=out_params) message.__namespace__ = ns message.resolve_namespace(message, ns) return message
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_class_to_xml(self): m = Message.produce( namespace=None, type_name='myMessage', members={'p': Person} ) m.resolve_namespace("punk") m.p = Person() m.p.name = 'steve-o' m.p.age = 2 m.p.addresses = [] element = m.to_xml(m,m.get_namespace()) self.assertEquals(element.tag, '{%s}myMessage' % m.get_namespace()) self.assertEquals(element.getchildren()[0].find('{%s}name' % m.get_namespace()).text, 'steve-o') self.assertEquals(element.getchildren()[0].find('{%s}age' % m.get_namespace()).text, '2') self.assertEquals( len(element.getchildren()[0].find('{%s}addresses' % m.get_namespace()).getchildren()), 0) p1 = m.from_xml(element)[0] self.assertEquals(p1.name, m.p.name) self.assertEquals(p1.age, m.p.age) self.assertEquals(p1.addresses, [])
def test_to_xml_nested(self): m = Message.produce( namespace=None, type_name='myMessage', members={'p':Person} ) m.resolve_namespace("m") p = Person() p.name = 'steve-o' p.age = 2 p.addresses = [] for i in range(0, 100): a = Address() a.street = '123 happy way' a.zip = i a.laditude = '45.22' a.longitude = '444.234' p.addresses.append(a) m_inst = m(p=p) element = m.to_xml(m_inst,m.get_namespace()) print etree.tostring(element, pretty_print=True) self.assertEquals('{%s}myMessage' % m.get_namespace(), element.tag) addresses = element.getchildren()[0].find('{%s}addresses' % m.get_namespace()).getchildren() self.assertEquals(100, len(addresses)) self.assertEquals('0', addresses[0].find('{%s}zip' % m.get_namespace()).text)
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 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,[])
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, [])
def test_namespaces(self): m = Message.produce( namespace="some_namespace", type_name='myMessage', members={'s': String, 'i': Integer}, ) mi = m() mi.s = 'a' e = m.to_xml(mi,m.get_namespace()) self.assertEquals(e.tag, '{some_namespace}myMessage')
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 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_soap_envelope(self): m = Message.produce( namespace=None, type_name='myMessage', members={'p': Person} ) env = make_soap_envelope(m.to_xml(Person(),m.get_namespace())) self.assertTrue(env.tag.endswith('Envelope')) self.assertTrue(env.getchildren()[0].tag.endswith('Body')) m = Message.produce( namespace=None, type_name='myMessage', members={'p': Person} ) env = make_soap_envelope(m.to_xml(Person(),m.get_namespace()), header_elements=[etree.Element('header1'), etree.Element('header2')]) env = etree.fromstring(etree.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_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 test_simple_message(self): m = Message.produce( namespace=None, type_name='myMessage', members={'s': String, 'i': Integer} ) m.resolve_namespace('test') m_inst = m(s="a", i=43) e = m.to_xml(m_inst,m.get_namespace()) self.assertEquals(e.tag, '{%s}myMessage' % m.get_namespace()) self.assertEquals(e.find('{%s}s' % m.get_namespace()).text, 'a') self.assertEquals(e.find('{%s}i' % m.get_namespace()).text, '43') values = m.from_xml(e) self.assertEquals('a', values.s) self.assertEquals(43, values.i)
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 explain_method(*args, **kwargs): if '_method_descriptor' in kwargs: # input message def get_input_message(ns): _in_message = kparams.get('_in_message', f.func_name) _in_variable_names = kparams.get('_in_variable_names', {}) arg_count = f.func_code.co_argcount param_names = f.func_code.co_varnames[1:arg_count] try: in_params = TypeInfo() for i in range(len(params)): e0 = _in_variable_names.get(param_names[i], param_names[i]) e1 = params[i] in_params[e0] = e1 except IndexError, e: raise Exception("%s has parameter numbers mismatching" % f.func_name) message=Message.produce(type_name=_in_message, namespace=ns, members=in_params) message.__namespace__ = ns message.resolve_namespace(message, ns) return message def get_output_message(ns): _returns = kparams.get('_returns') _out_message = kparams.get('_out_message', '%sResponse' % f.func_name) kparams.get('_out_variable_name') out_params = TypeInfo() if _returns: if isinstance(_returns, (list, tuple)): default_names = ['%sResult%d' % (f.func_name, i) for i in range(len(_returns))] _out_variable_names = kparams.get( '_out_variable_names', default_names) assert (len(_returns) == len(_out_variable_names)) var_pair = zip(_out_variable_names,_returns) out_params = TypeInfo(var_pair) else: _out_variable_name = kparams.get( '_out_variable_name', '%sResult' % f.func_name) out_params[_out_variable_name] = _returns message=Message.produce(type_name=_out_message,namespace=ns, members=out_params) message.__namespace__ = ns message.resolve_namespace(message, ns) return message _is_callback = kparams.get('_is_callback', False) _public_name = kparams.get('_public_name', f.func_name) _is_async = kparams.get('_is_async', False) if _is_async: logger.warning("Async methods are not supported in this " "release. _is_async is ignored.") _is_async = False _mtom = kparams.get('_mtom', False) _in_header = kparams.get('_in_header', None) _out_header = kparams.get('_out_header', None) # the decorator function does not have a reference to the # class and needs to be passed in ns = kwargs['clazz'].get_tns() in_message = get_input_message(ns) out_message = get_output_message(ns) if not (_in_header is None): _in_header.resolve_namespace(_in_header, ns) if not (_out_header is None): _out_header.resolve_namespace(_out_header, ns) doc = getattr(f, '__doc__') descriptor = MethodDescriptor(f.func_name, _public_name, in_message, out_message, doc, _is_callback, _is_async, _mtom, _in_header, _out_header) return descriptor