import asyncio from yawf import App, BaseHandler app = App(name="test") @app.route("/echo") class Echo(BaseHandler): @asyncio.coroutine def handle(self, *args, **kwargs): app.logger.debug("recieved a websocket connection") while self.websocket.open: app.logger.debug("websocket.open {}".format(self.websocket.open)) app.logger.debug("waiting for value from client") value = yield from self.websocket.recv() if value is None: break app.logger.debug("recieved `{}` from client".format(value)) yield from self.websocket.send(value) app.logger.debug("sent value back to client") app.logger.debug("closing the websocket now.") app.run("localhost", 8765, debug=True)
def test_run_app_debug(evloop, mock_loop): app = App(name="testapp") app.run("localhost", 8765, debug=True, loop=mock_loop) assert app.logger.level == 10 # debug assert app.debug is True
def test_run_app(evloop, mock_loop): app = App(name="testapp") app.run("localhost", 8765, loop=mock_loop) assert mock_loop.run_until_complete.called assert mock_loop.run_forever.called assert mock_loop.close.called
class Chatroom(BaseHandler): recv_schema = ChatroomSchema send_schema = ChatroomSchema @asyncio.coroutine def handle(self, ws, *args, **kwargs): app.logger.debug("recieved a websocket connection") while ws.open: value = yield from self.recv_json(ws) if value is None: self.remove_websocket(ws) break app.logger.debug("recieved `{}` from client".format(value)) app.logger.debug("distributing message to {}" " clients".format(len(self.websockets))) yield from self.distribute_message(value) app.logger.debug("closing the websocket now.") @asyncio.coroutine def distribute_message(self, message): websockets = list(self.websockets) for ws in websockets: if ws.open: app.logger.debug("sending message to {}".format(ws)) yield from self.send_json(ws, message) else: app.logger.debug("websocket was closed, removing client") self.remove_websocket(ws) app.run("localhost", 8765, debug=True)