From 962c84d89f69ca8ba59b60d9a75f6b95cddfd2f8 Mon Sep 17 00:00:00 2001 From: null Date: Fri, 1 Mar 2024 14:40:04 +0100 Subject: [PATCH] add data classes for ticker message --- app.py | 14 +++++++++++-- messages/TickerData.py | 47 ++++++++++++++++++++++++++++++++++++++++++ messages/__init__.py | 0 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 messages/TickerData.py create mode 100644 messages/__init__.py diff --git a/app.py b/app.py index 2f943c6..33836af 100644 --- a/app.py +++ b/app.py @@ -4,6 +4,7 @@ import json from rethinkdb import RethinkDB from pybit.unified_trading import WebSocket from time import sleep +from messages.TickerData import Message,TickerData r = RethinkDB() @@ -34,7 +35,10 @@ def fetch_symbols(): return [] def handle_message(message): - print(message) + msg = Message.from_json(message) + if (isinstance(msg.data, TickerData)): + print(msg.data) + def watch_symbols_table(): feed = r.table(TABLE_NAME).changes().run(rdb_conn) @@ -52,7 +56,7 @@ def subscribe_to_symbol(symbol): callback=handle_message ) -if __name__ == "__main__": +def main(): for symbol in fetch_symbols(): subscribe_to_symbol(symbol) @@ -60,3 +64,9 @@ if __name__ == "__main__": while True: sleep(1) + +if __name__ == "__main__": + main() + + + diff --git a/messages/TickerData.py b/messages/TickerData.py new file mode 100644 index 0000000..d5296c9 --- /dev/null +++ b/messages/TickerData.py @@ -0,0 +1,47 @@ +from dataclasses import dataclass +from typing import Generic, TypeVar, Optional +import json + +T = TypeVar('T') + +@dataclass +class TickerData: + symbol: str + tickDirection: str + price24hPcnt: str + lastPrice: str + prevPrice24h: str + highPrice24h: str + lowPrice24h: str + prevPrice1h: str + markPrice: str + indexPrice: str + openInterest: str + openInterestValue: str + turnover24h: str + volume24h: str + nextFundingTime: str + fundingRate: str + bid1Price: str + bid1Size: str + ask1Price: str + ask1Size: str + +@dataclass +class Message(Generic[T]): + topic: str + type: str + data: Optional[T] = None + cs: Optional[int] = None + ts: Optional[int] = None + + @staticmethod + def from_json(json_dict: dict) -> 'Message[T]': + if json_dict['topic'].startswith("tickers"): + data = TickerData(**json_dict['data']) + else: + data = None + + json_dict.pop('data', None) + return Message(**json_dict, data=data) + diff --git a/messages/__init__.py b/messages/__init__.py new file mode 100644 index 0000000..e69de29