예제 #1
0
파일: soap_test.py 프로젝트: certik/debexpo
    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')
예제 #2
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"]])
예제 #3
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"]])
예제 #4
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))
예제 #5
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)
예제 #6
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)
예제 #7
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)
예제 #8
0
파일: soap_test.py 프로젝트: certik/debexpo
    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'))
예제 #9
0
                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
예제 #10
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])
예제 #11
0
    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, [])
예제 #12
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])
예제 #13
0
    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)
예제 #14
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')
예제 #15
0
파일: soap_test.py 프로젝트: certik/debexpo
    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,[])
예제 #16
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, [])
예제 #17
0
    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')
예제 #18
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)
예제 #19
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)
예제 #20
0
파일: wsdl2py.py 프로젝트: caot/soaplib
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
예제 #21
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)
예제 #22
0
파일: test_soap.py 프로젝트: ridha/soaplib
    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'))
예제 #23
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')
예제 #24
0
    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)
예제 #25
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'))
예제 #26
0
        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