WebSocket with message_type¶
WebSocket client with Pydantic message validation via the message_type parameter.
Bases: WebSocket[T], Generic[T]
WebSocket with typed messages via Pydantic.
Provides automatic serialization/deserialization of messages using Pydantic models. Messages are validated on receive and serialized on send.
Example
from pydantic import BaseModel
class TradeMessage(BaseModel): ... symbol: str ... price: float ... quantity: float
async with TypedWebSocket( ... "wss://stream.example.com/ws", TradeMessage ... ) as ws: ... async for trade in ws: # trade is TradeMessage ... print(f"{trade.symbol}: {trade.price}")
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
uri
|
str
|
WebSocket URI. |
required |
message_type
|
type[T]
|
Pydantic model class for incoming messages. |
required |
strict
|
bool
|
If True, raise ValidationError on invalid messages. If False, skip invalid messages with warning. |
True
|
**kwargs
|
Any
|
Additional kwargs passed to WebSocketManager. |
{}
|
Raises:
| Type | Description |
|---|---|
ImportError
|
If pydantic is not installed. |
Source code in src/jetsocket/typed.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | |
validation_errors
property
¶
Get the count of validation errors (non-strict mode only).
__init__ ¶
Initialize typed WebSocket.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
uri
|
str
|
WebSocket URI. |
required |
message_type
|
type[T]
|
Pydantic model class for incoming messages. |
required |
strict
|
bool
|
If True, raise ValidationError on invalid messages. |
True
|
**kwargs
|
Any
|
Additional kwargs passed to WebSocketManager. |
{}
|
Raises:
| Type | Description |
|---|---|
ImportError
|
If pydantic is not installed. |
Source code in src/jetsocket/typed.py
Installation¶
Typed messages require Pydantic:
Usage¶
from pydantic import BaseModel
from jetsocket import WebSocket
class TradeMessage(BaseModel):
symbol: str
price: float
quantity: float
async with WebSocket("wss://stream.example.com/ws", message_type=TradeMessage) as ws:
async for trade in ws: # trade: TradeMessage
print(f"{trade.symbol}: ${trade.price:.2f}")
Validation Modes¶
Strict Mode (default)¶
Raises ValidationError on invalid messages:
Non-Strict Mode¶
Skips invalid messages with a warning:
ws = WebSocket("wss://example.com/ws", message_type=TradeMessage, strict=False)
# Check error count
print(f"Validation errors: {ws.validation_errors}")
Sending Typed Messages¶
Pydantic models are automatically serialized:
class SubscribeRequest(BaseModel):
method: str
params: list[str]
request = SubscribeRequest(method="SUBSCRIBE", params=["btcusdt@trade"])
await ws.send(request) # Serialized to JSON
Field Aliases¶
Use Field(alias=...) for APIs with different naming conventions:
from pydantic import BaseModel, Field
class BinanceTrade(BaseModel):
event_type: str = Field(alias="e")
symbol: str = Field(alias="s")
price: str = Field(alias="p")
quantity: str = Field(alias="q")
Type Checking Benefits¶
With WebSocket(message_type=...), your IDE provides:
- Autocomplete for message fields
- Type error detection
- Documentation on hover