From b3058b8c7886abefe6baf192a663061c223e3b01 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Sat, 30 Jul 2022 14:30:48 -0400 Subject: [PATCH] Drop remaining `pydantic` usage, convert `OHLC` to our struct variant --- piker/brokers/kraken/api.py | 26 -------------------------- piker/brokers/kraken/feed.py | 32 ++++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/piker/brokers/kraken/api.py b/piker/brokers/kraken/api.py index b08d9f52..8bef1995 100644 --- a/piker/brokers/kraken/api.py +++ b/piker/brokers/kraken/api.py @@ -34,7 +34,6 @@ import pendulum import asks from fuzzywuzzy import process as fuzzy import numpy as np -from pydantic.dataclasses import dataclass import urllib.parse import hashlib import hmac @@ -78,31 +77,6 @@ _symbol_info_translation: dict[str, str] = { } -@dataclass -class OHLC: - ''' - Description of the flattened OHLC quote format. - - For schema details see: - https://docs.kraken.com/websockets/#message-ohlc - - ''' - chan_id: int # internal kraken id - chan_name: str # eg. ohlc-1 (name-interval) - pair: str # fx pair - time: float # Begin time of interval, in seconds since epoch - etime: float # End time of interval, in seconds since epoch - open: float # Open price of interval - high: float # High price within interval - low: float # Low price within interval - close: float # Close price of interval - vwap: float # Volume weighted average price within interval - volume: float # Accumulated volume **within interval** - count: int # Number of trades within interval - # (sampled) generated tick data - ticks: list[Any] = field(default_factory=list) - - def get_config() -> dict[str, Any]: conf, path = config.load() diff --git a/piker/brokers/kraken/feed.py b/piker/brokers/kraken/feed.py index e8cfd9b6..0f41a3ec 100644 --- a/piker/brokers/kraken/feed.py +++ b/piker/brokers/kraken/feed.py @@ -19,7 +19,6 @@ Real-time and historical data feed endpoints. ''' from contextlib import asynccontextmanager as acm -from dataclasses import asdict from datetime import datetime from typing import ( Any, @@ -50,7 +49,6 @@ from piker.data._web_bs import open_autorecon_ws, NoBsWs from . import log from .api import ( Client, - OHLC, ) @@ -88,6 +86,30 @@ class Pair(Struct): ordermin: float # minimum order volume for pair +class OHLC(Struct): + ''' + Description of the flattened OHLC quote format. + + For schema details see: + https://docs.kraken.com/websockets/#message-ohlc + + ''' + chan_id: int # internal kraken id + chan_name: str # eg. ohlc-1 (name-interval) + pair: str # fx pair + time: float # Begin time of interval, in seconds since epoch + etime: float # End time of interval, in seconds since epoch + open: float # Open price of interval + high: float # High price within interval + low: float # Low price within interval + close: float # Close price of interval + vwap: float # Volume weighted average price within interval + volume: float # Accumulated volume **within interval** + count: int # Number of trades within interval + # (sampled) generated tick data + ticks: list[Any] = [] + + async def stream_messages( ws: NoBsWs, ): @@ -176,12 +198,14 @@ async def process_data_feed_msgs( pair ]: if 'ohlc' in chan_name: - yield 'ohlc', OHLC( + ohlc = OHLC( chan_id, chan_name, pair, *payload_array[0] ) + ohlc.typecast() + yield 'ohlc', ohlc elif 'spread' in chan_name: @@ -214,7 +238,7 @@ def normalize( ohlc: OHLC, ) -> dict: - quote = asdict(ohlc) + quote = ohlc.to_dict() quote['broker_ts'] = quote['time'] quote['brokerd_ts'] = time.time() quote['symbol'] = quote['pair'] = quote['pair'].replace('/', '')