Example #1
0
    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))
Example #2
0
    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')
Example #3
0
        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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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"]])
Example #7
0
    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'))
Example #8
0
    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')
Example #9
0
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
Example #10
0
        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)
Example #11
0
    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])
Example #12
0
    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)
Example #13
0
    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, [])