コード例 #1
0
ファイル: test_wsgi.py プロジェクト: edwardgeorge/drivel
def test_dummy_route():
    drvsrv = mock.Mock()
    server = WSGIServer(drvsrv, 'test')
    server.watch_connections = False
    server.add_route(('foo_test', r'^/foo/'), 'foo')
    _r = [1, 2, '3']
    drvsrv.send.side_effect = lambda *args, **kwargs: MockEvent(_r)
    app = TestApp(server)
    resp = app.get('/foo/')
    assert wsgi.json.loads(resp.body) == _r
コード例 #2
0
ファイル: test_wsgi.py プロジェクト: edwardgeorge/drivel
def test_dummy_route():
    drvsrv = mock.Mock()
    server = WSGIServer(drvsrv, 'test')
    server.watch_connections = False
    server.add_route(('foo_test', r'^/foo/'), 'foo')
    drvsrv.send.side_effect = lambda *args, **kwargs: MockEvent('test response')
    app = TestApp(server)
    resp = app.get('/foo/')
    assert resp.status[:3] == "200", resp.status
    assert resp.body == 'test response\r\n'
    assert drvsrv.send.called
    # check the correct message is sent
    assert drvsrv.send.call_args[0][0:2] == ('foo', 'foo_test'), \
        drvsrv.send.call_args[0][0:2]

    # check jsonp response
    drvsrv.reset_mock()
    resp = app.get('/foo/?jsonpcallback=cb')
    assert resp.body == 'cb("test response")\r\n', resp.body
コード例 #3
0
ファイル: server.py プロジェクト: edwardgeorge/drivel
    def start(self, start_listeners=True):
        self.log("Server", "info", 'starting server "%s" (%s)' % (self.name, self.procid))
        # setup ipc connections
        blisten = self.server_config.get("broker_listen", "")
        for i in blisten.split(","):
            if i:
                host, _, port = i.partition(":")
                port = int(port)
                self.broker.connections.listen((host, port))
        conns = self.get_config_section("connections")
        for k, v in conns:
            host, _, port = v.partition(":")
            port = int(port)
            self.broker.connections.connect((host, port), target=k)
        self.broker.start()

        # wsgi server...
        self.wsgi = WSGIServer(self, self.name, config=self.get_config_section("http"))
        dirs = self.server_config.get("static_directories", None)
        if dirs is not None:
            from drivel.contrib.fileserver import StaticFileServer

            self.wsgi.app = StaticFileServer(dirs.split(","), self.wsgi.app, self)

        # components...
        components = self.get_config_section("components")
        for name in components:
            self.log("Server", "info", 'adding "%s" component to %s' % (name, self.procid))
            self.components[name] = components.import_(name)(self, name)

        # start everything listening...
        if start_listeners and "backdoor_port" in self.config.server:
            # enable backdoor console
            bdport = self.server_config.getint("backdoor_port")
            self.log("Server", "info", "enabling backdoor on port %s" % bdport)
            eventlet.spawn(
                backdoor.backdoor_server,
                listen(("127.0.0.1", bdport)),
                locals={
                    "server": self,
                    "debug": debug,
                    "exit": safe_exit(),
                    "quit": safe_exit(),
                    "stats": lambda: pprint.pprint(self.stats()),
                },
            )

        if start_listeners and self.server_config.getboolean("start_www", True):
            self.wsgi.start(listen=listen)
        if start_listeners:
            try:
                hubs.get_hub().switch()
            except KeyboardInterrupt, e:
                pass
コード例 #4
0
ファイル: test_wsgi.py プロジェクト: edwardgeorge/drivel
def test_path_subscription():
    server = WSGIServer(mock.Mock(), 'test')
    tools.assert_raises(PathNotResolved,
        server._path_to_subscriber,
        '/foo/')
    server.add_route(r'^/foo/$', 'foo')
    assert server._path_to_subscriber('/foo/') == ('foo', None, {})
    # test keyword arguments
    server.add_route(('something', r'^/bar/(?P<test>[^/]+)/$'), 'bar')
    assert server._path_to_subscriber('/bar/hello/') == ('bar', 'something', 
        {'test': 'hello'})
コード例 #5
0
ファイル: test_wsgi.py プロジェクト: edwardgeorge/drivel
def test_unregistered_path():
    server = WSGIServer(mock.Mock(), 'test')
    server.watch_connections = False
    app = TestApp(server)
    resp = app.get('/foo/', status=404)
    assert resp.status[:3] == "404", resp.status
コード例 #6
0
ファイル: server.py プロジェクト: edwardgeorge/drivel
class Server(object):
    def __init__(self, config, options):
        self.config = config
        self.options = options
        self.name = self.options.name
        if self.name is None:
            self.procid = self.name = uuid.uuid4()
        else:
            self.procid = "%s-%s" % (self.name, uuid.uuid4())
        self.server_config = self.get_config_section("server")
        self.components = {}
        self.broker = Broker(self.name, self.procid)
        self.wsgiservers = {}
        # concurrency = 4
        # if self.config.has_option('server', 'mq_concurrency'):
        # concurrency = self.config.getint('server', 'mq_concurrency')
        # self._pool = pool.Pool(max_size=concurrency)
        self._setupLogging()

    def get_config_section(self, section):
        name = self.name
        return get_config_section_for_name(self.config, section, name)

    def start(self, start_listeners=True):
        self.log("Server", "info", 'starting server "%s" (%s)' % (self.name, self.procid))
        # setup ipc connections
        blisten = self.server_config.get("broker_listen", "")
        for i in blisten.split(","):
            if i:
                host, _, port = i.partition(":")
                port = int(port)
                self.broker.connections.listen((host, port))
        conns = self.get_config_section("connections")
        for k, v in conns:
            host, _, port = v.partition(":")
            port = int(port)
            self.broker.connections.connect((host, port), target=k)
        self.broker.start()

        # wsgi server...
        self.wsgi = WSGIServer(self, self.name, config=self.get_config_section("http"))
        dirs = self.server_config.get("static_directories", None)
        if dirs is not None:
            from drivel.contrib.fileserver import StaticFileServer

            self.wsgi.app = StaticFileServer(dirs.split(","), self.wsgi.app, self)

        # components...
        components = self.get_config_section("components")
        for name in components:
            self.log("Server", "info", 'adding "%s" component to %s' % (name, self.procid))
            self.components[name] = components.import_(name)(self, name)

        # start everything listening...
        if start_listeners and "backdoor_port" in self.config.server:
            # enable backdoor console
            bdport = self.server_config.getint("backdoor_port")
            self.log("Server", "info", "enabling backdoor on port %s" % bdport)
            eventlet.spawn(
                backdoor.backdoor_server,
                listen(("127.0.0.1", bdport)),
                locals={
                    "server": self,
                    "debug": debug,
                    "exit": safe_exit(),
                    "quit": safe_exit(),
                    "stats": lambda: pprint.pprint(self.stats()),
                },
            )

        if start_listeners and self.server_config.getboolean("start_www", True):
            self.wsgi.start(listen=listen)
        if start_listeners:
            try:
                hubs.get_hub().switch()
            except KeyboardInterrupt, e:
                pass