Source code for wsproto.events

# -*- coding: utf-8 -*-
"""
wsproto/events
~~~~~~~~~~~~~~

Events that result from processing data on a WebSocket connection.
"""


[docs]class Event(object): """ Base class for wsproto events. """ pass
[docs]class ConnectionRequested(Event): def __init__(self, proposed_subprotocols, h11request): self.proposed_subprotocols = proposed_subprotocols self.h11request = h11request def __repr__(self): path = self.h11request.target headers = dict(self.h11request.headers) host = headers[b'host'] version = headers[b'sec-websocket-version'] subprotocol = headers.get(b'sec-websocket-protocol', None) extensions = [] fmt = '<%s host=%s path=%s version=%s subprotocol=%r extensions=%r>' return fmt % (self.__class__.__name__, host, path, version, subprotocol, extensions)
[docs]class ConnectionEstablished(Event): def __init__(self, subprotocol=None, extensions=None): self.subprotocol = subprotocol self.extensions = extensions if self.extensions is None: self.extensions = [] def __repr__(self): return '<ConnectionEstablished subprotocol=%r extensions=%r>' % \ (self.subprotocol, self.extensions)
[docs]class ConnectionClosed(Event): """ The ConnectionClosed event is fired after the connection is considered closed. wsproto automatically emits a CLOSE frame when it receives one, to complete the close-handshake. """ def __init__(self, code, reason=None): #: The close status code, see :class:`CloseReason #: <wsproto.frame_protocol.CloseReason>`. self.code = code self.reason = reason def __repr__(self): return '<%s code=%r reason="%s">' % (self.__class__.__name__, self.code, self.reason)
[docs]class ConnectionFailed(ConnectionClosed): pass
[docs]class DataReceived(Event): def __init__(self, data, frame_finished, message_finished): self.data = data # This has no semantic content, but is provided just in case some # weird edge case user wants to be able to reconstruct the # fragmentation pattern of the original stream. You don't want it: self.frame_finished = frame_finished # This is the field that you almost certainly want: self.message_finished = message_finished
[docs]class TextReceived(DataReceived): pass
[docs]class BytesReceived(DataReceived): pass
[docs]class PingReceived(Event): def __init__(self, payload): self.payload = payload
[docs]class PongReceived(Event): def __init__(self, payload): self.payload = payload