def format_close_event(event: wsproto.events.CloseConnection) -> str: try: ret = CloseReason(event.code).name except ValueError: ret = f"UNKNOWN_ERROR={event.code}" if event.reason: ret += f" (reason: {event.reason})" return ret
def format_websocket_error(self, websocket: WebSocketData) -> str: try: ret = CloseReason(websocket.close_code).name except ValueError: ret = f"UNKNOWN_ERROR={websocket.close_code}" if websocket.close_reason: ret += f" (reason: {websocket.close_reason})" return ret
async def test_websocket_failure(app, client): @app.websocket('/failure') async def failme(request, ws, **params): raise NotImplementedError('OUCH') async with client: async with client.websocket('/failure') as ws: await ws.recv() assert ws.closure.code == CloseReason(1011) assert ws.closure.reason == 'Task died prematurely.'
async def _close_websocket(self, code: Union[CloseReason, int], reason: str = ''): if isinstance(code, int): code = CloseReason(code) await self._event_queue.put(_CLOSE_MESSAGE) self._close_code = code self._close_reason = reason logger.debug('%s closed by %r', self, ConnectionClosed(code, reason))
async def test_websocket_closure_from_within(app, client): @app.websocket('/failure') async def failme(request, ws, **params): await ws.close() await ws.recv() async with client: async with client.websocket('/failure') as ws: await ws.send(b'This shall never be received.') assert ws.closure.code == CloseReason(1000) assert ws.closure.reason == 'Closed.'
def name(self) -> str: """The type of close code.""" try: name = CloseReason(self._code).name except ValueError: if 1000 <= self._code <= 2999: name = 'RFC_RESERVED' elif 3000 <= self._code <= 3999: name = 'IANA_RESERVED' elif 4000 <= self._code <= 4999: name = 'PRIVATE_RESERVED' else: name = 'INVALID_CODE' return name