Esempio n. 1
0
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
Esempio n. 2
0
 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
Esempio n. 3
0
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.'
Esempio n. 4
0
    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))
Esempio n. 5
0
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.'
Esempio n. 6
0
    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