Exemplo n.º 1
0
    def test_no_gc_collect(self):
        class PingService(Service):
            @srpc(_returns=Boolean)
            def ping():
                return True

        application = Application([PingService],
                                  'some_tns',
                                  in_protocol=XmlDocument(),
                                  out_protocol=XmlDocument())

        server = NullServer(application)
        origin_collect = gc.collect
        origin_MIN_GC_INTERVAL = const.MIN_GC_INTERVAL
        try:
            gc.collect = lambda: 1 / 0
            with self.assertRaises(ZeroDivisionError):
                const.MIN_GC_INTERVAL = 0
                server.service.ping()
            # No raise
            const.MIN_GC_INTERVAL = float('inf')
            server.service.ping()
        finally:
            gc.collect = origin_collect
            const.MIN_GC_INTERVAL = origin_MIN_GC_INTERVAL
Exemplo n.º 2
0
    def test_ostr(self):
        queue = set()

        class MessageService(Service):
            @srpc(String, String, _returns=Array(String))
            def send_message(s, k):
                queue.add((s, k))
                return [s, k]

        application = Application([MessageService],
                                  'some_tns',
                                  in_protocol=XmlDocument(),
                                  out_protocol=XmlDocument())

        ostr_server = NullServer(application, ostr=True)

        queue.clear()
        ret = ostr_server.service.send_message("zabaaa", k="hobaa")
        assert set([("zabaaa", "hobaa")]) == queue
        assert etree.fromstring(b''.join(ret)).xpath(
            '//tns:string/text()',
            namespaces=application.interface.nsmap) == ['zabaaa', 'hobaa']

        queue.clear()
        ostr_server.service.send_message(k="hobaa")
        assert set([(None, "hobaa")]) == queue

        queue.clear()
        ostr_server.service.send_message("zobaaa", s="hobaa")
        assert set([("hobaa", None)]) == queue
Exemplo n.º 3
0
 def setup(self):
     super(TestServicesSoap, self).setup()
     self.server = NullServer(application, ostr=True)
     # Unfortunately there's no easy way to just give a SUDS client a
     # complete WSDL string, it only accepts a URL to it. So we create one.
     self.wsdl = _write_wsdl(self.server)
     self.client = Client('file://%s' % self.wsdl, cache=None)
Exemplo n.º 4
0
def register_application(app):
    key = (app.tns, app.name)

    from spyne.server.null import NullServer

    try:
        import traceback
        stack = traceback.format_stack()
    except ImportError:
        stack = None

    prev = _applications.get(key, None)

    if prev is not None:
        if hash(prev.app) == hash(app):
            logger.debug("Application %r previously registered as %r is the same"
                        " as %r. Skipping." % (prev.app, key, app))
            prev.inst_stack.append(stack)

        else:
            logger.warning("Overwriting application %r(%r)." % (key, app))

            if prev.inst_stack is not None:
                stack_traces = []
                for s in prev.inst_stack:
                    if s is not None:
                        stack_traces.append(''.join(s))
                logger.debug("Stack trace of the instantiation:\n%s" %
                                   '====================\n'.join(stack_traces))

    _applications[key] = _ApplicationMetaData(app=app, inst_stack=[stack],
                                                          null=NullServer(app))

    logger.debug("Registering %r as %r" % (app, key))
Exemplo n.º 5
0
def client(connection_type, testdb_uri):
    print("GETTING CLIENT")
    if connection_type == 'local':
        client = JSONConnection(app_name='Hydra Local Test Suite', db_url=testdb_uri)
        #fake a login using the test's session
        client.user_id = 1
        client.connect()
    else:

        from spyne.server.null import NullServer
        from hydra_server import initialize_api_server

        hydra_server = initialize_api_server(testdb_uri, test=True)

        null_server = NullServer(hydra_server.json_application, ostr=True)

        #The url argument here is to avoid the connection complaining.
        #It's not actually used, as we're using a null (testing) server
        client = RemoteJSONConnection(url='localhost:8080/json',
                                      app_name='Hydra Remote Test Suite',
                                      test_server=null_server)
        client.login('root', '')

    client.testutils = hydra_base.util.testing.TestUtil(client)
    pytest.root_user_id = 1
    pytest.user_a = client.testutils.create_user("UserA")
    pytest.user_b = client.testutils.create_user("UserB")
    pytest.user_c = client.testutils.create_user("UserC", role='developer')
    yield client
    #???
    hydra_base.db.close_session()
    try:
        drop_tables(testdb_uri)
    except Exception as err:
        print("Error dropping DB")
Exemplo n.º 6
0
    def test_remote_call_error(self):
        from spyne import mrpc
        v = 'deger'

        class SomeComplexModel(ComplexModel):
            @mrpc(_returns=SelfReference)
            def put(self, ctx):
                return v

        class SomeService(ServiceBase):
            @rpc(_returns=SomeComplexModel)
            def get(ctx):
                return SomeComplexModel()

        null = NullServer(Application([SomeService], tns='some_tns'))

        try:
            null.service.put()
        except ResourceNotFoundError:
            pass
        else:
            raise Exception(
                "Must fail with: \"Requested resource "
                "'{spyne.test.model.test_complex}SomeComplexModel' not found\""
            )
Exemplo n.º 7
0
    def test_wrapped_array_in_wrapped_response(self):
        from spyne.model.complex import ComplexModel, Array
        from spyne.model.primitive import Unicode

        class Permission(ComplexModel):
            _type_info = [
                ('application', Unicode),
                ('feature', Unicode),
            ]

        class SomeService(ServiceBase):
            @srpc(_returns=Array(Permission))
            def yay():
                return [
                    Permission(application='app', feature='f1'),
                    Permission(application='app', feature='f2')
                ]

        app = Application([SomeService],
                          'tns',
                          in_protocol=JsonDocument(),
                          out_protocol=JsonDocument(ignore_wrappers=False))

        server = NullServer(app, ostr=True)
        retstr = ''.join(server.service.yay())
        print(retstr)
        assert retstr == '{"yayResponse": {"yayResult": [' \
            '{"Permission": {"application": "app", "feature": "f1"}}, ' \
            '{"Permission": {"application": "app", "feature": "f2"}}]}}'
Exemplo n.º 8
0
    def test_call(self):
        queue = set()

        class MessageService(Service):
            @srpc(String, String)
            def send_message(s, k):
                queue.add((s, k))

        application = Application([MessageService],
                                  'some_tns',
                                  in_protocol=XmlDocument(),
                                  out_protocol=XmlDocument())

        server = NullServer(application)

        queue.clear()
        server.service.send_message("zabaaa", k="hobaa")
        assert set([("zabaaa", "hobaa")]) == queue

        queue.clear()
        server.service.send_message(k="hobaa")
        assert set([(None, "hobaa")]) == queue

        queue.clear()
        server.service.send_message("zobaaa", s="hobaa")
        assert set([("hobaa", None)]) == queue
Exemplo n.º 9
0
    def illustrate_wrappers(self):
        from spyne.model.complex import ComplexModel, Array
        from spyne.model.primitive import Unicode

        class Permission(ComplexModel):
            _type_info = [
                ('application', Unicode),
                ('feature', Unicode),
            ]

        class SomeService(ServiceBase):
            @srpc(_returns=Array(Permission))
            def yay():
                return [
                    Permission(application='app', feature='f1'),
                    Permission(application='app', feature='f2')
                ]

        app = Application([SomeService],
                          'tns',
                          in_protocol=JsonDocument(),
                          out_protocol=JsonDocument(ignore_wrappers=False))

        server = NullServer(app, ostr=True)
        print ''.join(server.service.yay())
Exemplo n.º 10
0
    def test_call(self):
        queue = set()

        class MessageService(ServiceBase):
            @srpc(String)
            def send_message(s):
                queue.add(s)

        application = Application([MessageService], 'some_tns',
            interface=Wsdl11(), in_protocol=Soap11(), out_protocol=Soap11())

        server = NullServer(application)
        server.service.send_message("zabaaa")

        assert set(["zabaaa"]) == queue
Exemplo n.º 11
0
    def test_callback_name(self):
        callback_name = 'some_callback'
        retval = 42

        class SomeService(ServiceBase):
            @srpc(_returns=Integer)
            def yay():
                return retval

        app = Application([SomeService],
                          'tns',
                          in_protocol=JsonDocument(),
                          out_protocol=JsonP(callback_name))

        server = NullServer(app, ostr=True)
        assert ''.join(
            server.service.yay()) == '%s(%d);' % (callback_name, retval)
Exemplo n.º 12
0
    def test_call_one_arg(self):
        queue = set()

        class MessageService(Service):
            @srpc(String)
            def send_message(s):
                queue.add(s)

        application = Application([MessageService],
                                  'some_tns',
                                  in_protocol=XmlDocument(),
                                  out_protocol=XmlDocument())

        server = NullServer(application)
        server.service.send_message("zabaaa")

        assert set(["zabaaa"]) == queue
Exemplo n.º 13
0
    def test_remote_call_success(self):
        from spyne import mrpc

        class SomeComplexModel(ComplexModel):
            i = Integer

            @mrpc(_returns=SelfReference)
            def echo(self, ctx):
                return self

        class SomeService(ServiceBase):
            @rpc(_returns=SomeComplexModel)
            def get(ctx):
                return SomeComplexModel()

        null = NullServer(Application([SomeService], tns='some_tns'))
        v = SomeComplexModel(i=5)
        assert null.service.echo(v) is v
Exemplo n.º 14
0
    def test_callback_name(self):
        callback_name = 'some_callback'
        retval = 42

        class SomeService(ServiceBase):
            @srpc(_returns=Integer)
            def yay():
                return retval

        app = Application([SomeService], 'tns',
                                in_protocol=JsonDocument(),
                                out_protocol=JsonP(callback_name))

        server = NullServer(app, ostr=True)
        ret = server.service.yay()
        ret = list(ret)
        print(ret)
        assert b''.join(ret) == b''.join((callback_name.encode('utf8'), b'(',
                                             str(retval).encode('utf8'), b');'))
Exemplo n.º 15
0
    def test_simple_aux_nullserver(self):
        data = []

        class Service(ServiceBase):
            @srpc(String)
            def call(s):
                data.append(s)

        class AuxService(ServiceBase):
            __aux__ = SyncAuxProc()

            @srpc(String)
            def call(s):
                data.append(s)

        app = Application([Service, AuxService], 'tns','name', Soap11(), Soap11())
        server = NullServer(app)
        server.service.call("hey")

        assert data == ['hey', 'hey']
Exemplo n.º 16
0
    def test_callback_name(self):
        callback_name = 'some_callback'

        class SomeComplexModel(ComplexModel):
            i = Integer
            s = Unicode

        v1 = 42
        v2 = SomeComplexModel(i=42, s='foo')

        class SomeService(ServiceBase):
            @srpc(_returns=Integer)
            def yay():
                return v1

            @srpc(_returns=SomeComplexModel)
            def complex():
                return v2

        app = Application([SomeService],
                          'tns',
                          in_protocol=JsonDocument(),
                          out_protocol=JsonP(callback_name))

        server = NullServer(app, ostr=True)

        ret = server.service.yay()
        ret = list(ret)
        print(b''.join(ret))
        assert b''.join(ret) == b''.join((callback_name.encode('utf8'), b'(',
                                          str(v1).encode('utf8'), b');'))

        ret = server.service.complex()
        ret = list(ret)
        print(b''.join(ret))
        assert b''.join(ret) == b''.join((callback_name.encode('utf8'), b'(',
                                          json.dumps({
                                              "i": 42,
                                              "s": "foo"
                                          }), b');'))
Exemplo n.º 17
0
if __name__ == '__main__':
    import logging
    from pprint import pprint

    logging.basicConfig(level=logging.INFO)

    # mutes context markers. set logging level to logging.INFO to enable
    # them.
    logging.getLogger('spyne.server.null').setLevel(logging.CRITICAL)

    print("With serialization")
    print("==================")
    print()

    null = NullServer(application, ostr=True)
    ret_stream = null.service.say_hello('Dave', 5)
    ret_string = ''.join(ret_stream)
    print(ret_string)
    print()

    print("Without serialization")
    print("=====================")
    print()

    null = NullServer(application, ostr=False)
    ret = null.service.say_hello('Dave', 5)

    # because the return value is a generator, we need to iterate over it to
    # see the actual return values.
    pprint(list(ret))
Exemplo n.º 18
0
def server():
    return NullServer(application, ostr=True)
Exemplo n.º 19
0
Arquivo: log.py Projeto: tunks/spyne
class SomeService(ServiceBase):
    @rpc()
    def server_exception(ctx):
        raise Exception("boo!")

    @rpc()
    def server_fault(ctx):
        raise Fault("Server", "boo and you know it!")

    @rpc()
    def client_fault(ctx):
        raise Fault("Client", "zzzz...")


server = NullServer(Application([SomeService], 'spyne.examples.logging'))

if __name__ == "__main__":
    import logging
    logging.basicConfig(level=logging.DEBUG)

    logging.info(G("all fault tracebacks are logged"))
    logging.getLogger('spyne.application').setLevel(logging.DEBUG)

    try:
        server.service.server_exception()
    except:
        pass
    try:
        server.service.server_fault()
    except:
Exemplo n.º 20
0
 def setup(self):
     super(TestServicesJson, self).setup()
     self.server = NullServer(application, ostr=True)