WebSocket Requests and Responses

networkpype.websocket.request · networkpype.websocket.response

WebSocketRequest

Abstract base dataclass for all WebSocket requests.

@dataclass
class WebSocketRequest(ABC):
    payload: Any
    throttler_limit_id: str | None = None
    is_auth_required: bool = False

Fields

Field Type Default Description
payload Any Message content (type depends on subclass)
throttler_limit_id str \| None None Rate limit ID (for future use)
is_auth_required bool False If True, Auth.ws_authenticate is called

Abstract Method

@abstractmethod
async def send_with_connection(connection: WebSocketConnection) -> None

Subclasses implement this to define how the message is transmitted.


WebSocketJSONRequest

Concrete request for sending JSON-formatted messages.

@dataclass
class WebSocketJSONRequest(WebSocketRequest):
    payload: Mapping[str, Any]
    throttler_limit_id: str | None = None
    is_auth_required: bool = False

Serializes payload to JSON and sends via connection._send_json.

Example

from networkpype.websocket.request import WebSocketJSONRequest

request = WebSocketJSONRequest(
    payload={"method": "SUBSCRIBE", "params": ["btcusdt@trade"], "id": 1},
    is_auth_required=False,
)
await ws_manager.send(request)

WebSocketPlainTextRequest

Concrete request for sending plain text messages.

@dataclass
class WebSocketPlainTextRequest(WebSocketRequest):
    payload: str
    throttler_limit_id: str | None = None
    is_auth_required: bool = False

Sends payload as a raw text frame via connection._send_plain_text.

Example

from networkpype.websocket.request import WebSocketPlainTextRequest

ping = WebSocketPlainTextRequest(payload="PING")
await ws_manager.send(ping)

WebSocketResponse

Dataclass wrapping a received WebSocket message.

@dataclass
class WebSocketResponse:
    data: Any

Fields

Field Type Description
data Any Message content: dict for JSON, str for text, bytes for binary

Parsing Behaviour

WebSocketConnection._build_resp attempts to parse text messages as JSON. If parsing fails, the raw string is stored in data. Binary frames are stored as bytes.

Example

response = await ws_manager.receive()
if response:
    if isinstance(response.data, dict):
        print(f"JSON message: {response.data}")
    elif isinstance(response.data, str):
        print(f"Text message: {response.data}")
    elif isinstance(response.data, bytes):
        print(f"Binary message: {len(response.data)} bytes")