Skip to content

Commit

Permalink
Merge pull request #370 from pikers/kill_pydantic_from_kraken
Browse files Browse the repository at this point in the history
Kill `pydantic` from `kraken`
  • Loading branch information
goodboy authored Jul 31, 2022
2 parents e6a3e8b + 808dbb1 commit 7f3f7f0
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 36 deletions.
10 changes: 5 additions & 5 deletions piker/brokers/binance.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
from fuzzywuzzy import process as fuzzy
import numpy as np
import tractor
from pydantic.dataclasses import dataclass
import wsproto

from .._cacheables import open_cached_client
Expand Down Expand Up @@ -106,14 +105,14 @@ class Pair(Struct, frozen=True):
permissions: list[str]


@dataclass
class OHLC:
"""Description of the flattened OHLC quote format.
class OHLC(Struct):
'''
Description of the flattened OHLC quote format.
For schema details see:
https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-streams
"""
'''
time: int

open: float
Expand Down Expand Up @@ -262,6 +261,7 @@ async def bars(
for i, bar in enumerate(bars):

bar = OHLC(*bar)
bar.typecast()

row = []
for j, (name, ftype) in enumerate(_ohlc_dtype[1:]):
Expand Down
27 changes: 0 additions & 27 deletions piker/brokers/kraken/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
'''
from contextlib import asynccontextmanager as acm
from dataclasses import field
from datetime import datetime
import itertools
from typing import (
Expand All @@ -34,7 +33,6 @@
import asks
from fuzzywuzzy import process as fuzzy
import numpy as np
from pydantic.dataclasses import dataclass
import urllib.parse
import hashlib
import hmac
Expand Down Expand Up @@ -78,31 +76,6 @@
}


@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()
Expand Down
32 changes: 28 additions & 4 deletions piker/brokers/kraken/feed.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
'''
from contextlib import asynccontextmanager as acm
from dataclasses import asdict
from datetime import datetime
from typing import (
Any,
Expand Down Expand Up @@ -50,7 +49,6 @@
from . import log
from .api import (
Client,
OHLC,
)


Expand Down Expand Up @@ -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,
):
Expand Down Expand Up @@ -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:

Expand Down Expand Up @@ -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('/', '')
Expand Down
7 changes: 7 additions & 0 deletions piker/data/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,10 @@ def copy(
).decode(
msgspec.msgpack.Encoder().encode(self)
)

def typecast(
self,
# fields: Optional[list[str]] = None,
) -> None:
for fname, ftype in self.__annotations__.items():
setattr(self, fname, ftype(getattr(self, fname)))

0 comments on commit 7f3f7f0

Please sign in to comment.