Skip to content

Commit 72ebe25

Browse files
committed
fix: align WebSocketMessage with parsed event type
1 parent 481e5c2 commit 72ebe25

2 files changed

Lines changed: 60 additions & 24 deletions

File tree

‎massive/websocket/models/models.py‎

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional, List, Union, NewType
1+
from typing import List, Optional, Union
22
from .common import EventType
33
from ...modelclass import modelclass
44

@@ -444,26 +444,21 @@ def from_dict(d):
444444
)
445445

446446

447-
WebSocketMessage = NewType(
448-
"WebSocketMessage",
449-
List[
450-
Union[
451-
EquityAgg,
452-
CurrencyAgg,
453-
EquityTrade,
454-
CryptoTrade,
455-
EquityQuote,
456-
ForexQuote,
457-
CryptoQuote,
458-
Imbalance,
459-
LimitUpLimitDown,
460-
Level2Book,
461-
IndexValue,
462-
LaunchpadValue,
463-
FairMarketValue,
464-
FuturesTrade,
465-
FuturesQuote,
466-
FuturesAgg,
467-
]
468-
],
469-
)
447+
WebSocketMessage = Union[
448+
EquityAgg,
449+
CurrencyAgg,
450+
EquityTrade,
451+
CryptoTrade,
452+
EquityQuote,
453+
ForexQuote,
454+
CryptoQuote,
455+
Imbalance,
456+
LimitUpLimitDown,
457+
Level2Book,
458+
IndexValue,
459+
LaunchpadValue,
460+
FairMarketValue,
461+
FuturesTrade,
462+
FuturesQuote,
463+
FuturesAgg,
464+
]

‎test_websocket/test_model_types.py‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import logging
2+
import unittest
3+
4+
from massive.websocket import EquityTrade, Market, WebSocketMessage
5+
from massive.websocket.models import parse, parse_single
6+
7+
8+
def accept_message(message: WebSocketMessage) -> WebSocketMessage:
9+
"""Exercise the public single-message type contract under mypy."""
10+
return message
11+
12+
13+
class WebSocketModelTypesTest(unittest.TestCase):
14+
trade = {
15+
"ev": "T",
16+
"sym": "AAPL",
17+
"x": 10,
18+
"i": "5096",
19+
"z": 3,
20+
"p": 161.87,
21+
"s": 300,
22+
"c": [14, 41],
23+
"t": 1651684192462,
24+
"q": 4009402,
25+
}
26+
27+
def test_single_parsed_event_matches_message_contract(self):
28+
message = parse_single(self.trade, logging.getLogger(), Market.Stocks)
29+
30+
self.assertIsInstance(message, EquityTrade)
31+
self.assertIs(accept_message(message), message)
32+
33+
def test_parse_returns_a_batch_of_messages(self):
34+
messages = parse([self.trade], logging.getLogger(), Market.Stocks)
35+
36+
self.assertEqual(len(messages), 1)
37+
self.assertIsInstance(messages[0], EquityTrade)
38+
39+
40+
if __name__ == "__main__":
41+
unittest.main()

0 commit comments

Comments
 (0)