Fix bug regarding new typing with dataclasses.

This commit is contained in:
Davide Casale
2023-01-16 18:18:12 +01:00
parent e185da4cc9
commit 2afcc76647
4 changed files with 57 additions and 54 deletions

View File

@@ -1,6 +1,6 @@
from .exceptions import LabelerSerializerException from .exceptions import LabelerSerializerException
from typing import Generic, TypeVar, Iterable, Optional, List, Tuple, Any, cast from typing import Type, Generic, TypeVar, Iterable, Optional, List, Tuple, Any, cast
T = TypeVar("T") T = TypeVar("T")
@@ -10,8 +10,8 @@ class _Type(object):
self.__setattr__(key, value) self.__setattr__(key, value)
class _Serializer(Generic[T]): class _Serializer(Generic[T]):
def __init__(self, name: str, labels: List[str], IGNORE: List[str] = [ "_PLACEHOLDER" ]): def __init__(self, name: str, klass: Type[_Type], labels: List[str], IGNORE: List[str] = [ "_PLACEHOLDER" ]):
self.name, self.__labels, self.__IGNORE = name, labels, IGNORE self.name, self.klass, self.__labels, self.__IGNORE = name, klass, labels, IGNORE
def _serialize(self, *args: Any, skip: Optional[List[str]] = None) -> Iterable[Tuple[str, Any]]: def _serialize(self, *args: Any, skip: Optional[List[str]] = None) -> Iterable[Tuple[str, Any]]:
labels = list(filter(lambda label: label not in (skip or list()), self.__labels)) labels = list(filter(lambda label: label not in (skip or list()), self.__labels))
@@ -24,4 +24,7 @@ class _Serializer(Generic[T]):
yield label, args[index] yield label, args[index]
def parse(self, *values: Any, skip: Optional[List[str]] = None) -> T: def parse(self, *values: Any, skip: Optional[List[str]] = None) -> T:
return cast(T, _Type(**dict(self._serialize(*values, skip=skip)))) return cast(T, self.klass(**dict(self._serialize(*values, skip=skip))))
def generate_labeler_serializer(name: str, klass: T, labels: List[str], IGNORE: List[str] = [ "_PLACEHOLDER" ]) -> _Serializer[T]:
return _Serializer[T](name, klass, labels, IGNORE)

View File

@@ -20,12 +20,12 @@ class _Notification(_Serializer, Generic[T]):
__LABELS = [ "MTS", "TYPE", "MESSAGE_ID", "_PLACEHOLDER", "NOTIFY_INFO", "CODE", "STATUS", "TEXT" ] __LABELS = [ "MTS", "TYPE", "MESSAGE_ID", "_PLACEHOLDER", "NOTIFY_INFO", "CODE", "STATUS", "TEXT" ]
def __init__(self, serializer: Optional[_Serializer] = None, iterate: bool = False): def __init__(self, serializer: Optional[_Serializer] = None, iterate: bool = False):
super().__init__("Notification", _Notification.__LABELS, IGNORE = [ "_PLACEHOLDER" ]) super().__init__("Notification", Notification, _Notification.__LABELS, IGNORE = [ "_PLACEHOLDER" ])
self.serializer, self.iterate = serializer, iterate self.serializer, self.iterate = serializer, iterate
def parse(self, *values: Any, skip: Optional[List[str]] = None) -> Notification[T]: def parse(self, *values: Any, skip: Optional[List[str]] = None) -> Notification[T]:
notification = cast(Notification[T], _Type(**dict(self._serialize(*values)))) notification = cast(Notification[T], Notification(**dict(self._serialize(*values))))
if isinstance(self.serializer, _Serializer): if isinstance(self.serializer, _Serializer):
NOTIFY_INFO = cast(List[Any], notification.NOTIFY_INFO) NOTIFY_INFO = cast(List[Any], notification.NOTIFY_INFO)
@@ -34,7 +34,7 @@ class _Notification(_Serializer, Generic[T]):
if len(NOTIFY_INFO) == 1 and isinstance(NOTIFY_INFO[0], list): if len(NOTIFY_INFO) == 1 and isinstance(NOTIFY_INFO[0], list):
NOTIFY_INFO = NOTIFY_INFO[0] NOTIFY_INFO = NOTIFY_INFO[0]
notification.NOTIFY_INFO = cast(T, _Type(**dict(self.serializer._serialize(*NOTIFY_INFO, skip=skip)))) notification.NOTIFY_INFO = cast(T, self.serializer.klass(**dict(self.serializer._serialize(*NOTIFY_INFO, skip=skip))))
else: notification.NOTIFY_INFO = cast(T, [ _Type(**dict(self.serializer._serialize(*data, skip=skip))) for data in NOTIFY_INFO ]) else: notification.NOTIFY_INFO = cast(T, [ self.serializer.klass(**dict(self.serializer._serialize(*data, skip=skip))) for data in NOTIFY_INFO ])
return notification return notification

View File

@@ -1,16 +1,16 @@
from . import types from . import types
from .. labeler import _Serializer from .. labeler import generate_labeler_serializer
from .. notification import _Notification from .. notification import _Notification
#region Serializers definition for Rest Public Endpoints #region Serializers definition for Rest Public Endpoints
PlatformStatus = _Serializer[types.PlatformStatus]("PlatformStatus", labels=[ PlatformStatus = generate_labeler_serializer("PlatformStatus", klass=types.PlatformStatus, labels=[
"OPERATIVE" "OPERATIVE"
]) ])
TradingPairTicker = _Serializer[types.TradingPairTicker]("TradingPairTicker", labels=[ TradingPairTicker = generate_labeler_serializer("TradingPairTicker", klass=types.TradingPairTicker, labels=[
"SYMBOL", "SYMBOL",
"BID", "BID",
"BID_SIZE", "BID_SIZE",
@@ -24,7 +24,7 @@ TradingPairTicker = _Serializer[types.TradingPairTicker]("TradingPairTicker", la
"LOW" "LOW"
]) ])
FundingCurrencyTicker = _Serializer[types.FundingCurrencyTicker]("FundingCurrencyTicker", labels=[ FundingCurrencyTicker = generate_labeler_serializer("FundingCurrencyTicker", klass=types.FundingCurrencyTicker, labels=[
"SYMBOL", "SYMBOL",
"FRR", "FRR",
"BID", "BID",
@@ -44,7 +44,7 @@ FundingCurrencyTicker = _Serializer[types.FundingCurrencyTicker]("FundingCurrenc
"FRR_AMOUNT_AVAILABLE" "FRR_AMOUNT_AVAILABLE"
]) ])
TickersHistory = _Serializer[types.TickersHistory]("TickersHistory", labels=[ TickersHistory = generate_labeler_serializer("TickersHistory", klass=types.TickersHistory, labels=[
"SYMBOL", "SYMBOL",
"BID", "BID",
"_PLACEHOLDER", "_PLACEHOLDER",
@@ -60,14 +60,14 @@ TickersHistory = _Serializer[types.TickersHistory]("TickersHistory", labels=[
"MTS" "MTS"
]) ])
TradingPairTrade = _Serializer[types.TradingPairTrade]("TradingPairTrade", labels=[ TradingPairTrade = generate_labeler_serializer("TradingPairTrade", klass=types.TradingPairTrade, labels=[
"ID", "ID",
"MTS", "MTS",
"AMOUNT", "AMOUNT",
"PRICE" "PRICE"
]) ])
FundingCurrencyTrade = _Serializer[types.FundingCurrencyTrade]("FundingCurrencyTrade", labels=[ FundingCurrencyTrade = generate_labeler_serializer("FundingCurrencyTrade", klass=types.FundingCurrencyTrade, labels=[
"ID", "ID",
"MTS", "MTS",
"AMOUNT", "AMOUNT",
@@ -75,38 +75,38 @@ FundingCurrencyTrade = _Serializer[types.FundingCurrencyTrade]("FundingCurrencyT
"PERIOD" "PERIOD"
]) ])
TradingPairBook = _Serializer[types.TradingPairBook]("TradingPairBook", labels=[ TradingPairBook = generate_labeler_serializer("TradingPairBook", klass=types.TradingPairBook, labels=[
"PRICE", "PRICE",
"COUNT", "COUNT",
"AMOUNT" "AMOUNT"
]) ])
FundingCurrencyBook = _Serializer[types.FundingCurrencyBook]("FundingCurrencyBook", labels=[ FundingCurrencyBook = generate_labeler_serializer("FundingCurrencyBook", klass=types.FundingCurrencyBook, labels=[
"RATE", "RATE",
"PERIOD", "PERIOD",
"COUNT", "COUNT",
"AMOUNT" "AMOUNT"
]) ])
TradingPairRawBook = _Serializer[types.TradingPairRawBook]("TradingPairRawBook", labels=[ TradingPairRawBook = generate_labeler_serializer("TradingPairRawBook", klass=types.TradingPairRawBook, labels=[
"ORDER_ID", "ORDER_ID",
"PRICE", "PRICE",
"AMOUNT" "AMOUNT"
]) ])
FundingCurrencyRawBook = _Serializer[types.FundingCurrencyRawBook]("FundingCurrencyRawBook", labels=[ FundingCurrencyRawBook = generate_labeler_serializer("FundingCurrencyRawBook", klass=types.FundingCurrencyRawBook, labels=[
"OFFER_ID", "OFFER_ID",
"PERIOD", "PERIOD",
"RATE", "RATE",
"AMOUNT" "AMOUNT"
]) ])
Statistic = _Serializer[types.Statistic]("Statistic", labels=[ Statistic = generate_labeler_serializer("Statistic", klass=types.Statistic, labels=[
"MTS", "MTS",
"VALUE" "VALUE"
]) ])
Candle = _Serializer[types.Candle]("Candle", labels=[ Candle = generate_labeler_serializer("Candle", klass=types.Candle, labels=[
"MTS", "MTS",
"OPEN", "OPEN",
"CLOSE", "CLOSE",
@@ -115,7 +115,7 @@ Candle = _Serializer[types.Candle]("Candle", labels=[
"VOLUME" "VOLUME"
]) ])
DerivativesStatus = _Serializer[types.DerivativesStatus]("DerivativesStatus", labels=[ DerivativesStatus = generate_labeler_serializer("DerivativesStatus", klass=types.DerivativesStatus, labels=[
"KEY", "KEY",
"MTS", "MTS",
"_PLACEHOLDER", "_PLACEHOLDER",
@@ -142,7 +142,7 @@ DerivativesStatus = _Serializer[types.DerivativesStatus]("DerivativesStatus", la
"CLAMP_MAX" "CLAMP_MAX"
]) ])
Liquidation = _Serializer[types.Liquidation]("Liquidation", labels=[ Liquidation = generate_labeler_serializer("Liquidation", klass=types.Liquidation, labels=[
"_PLACEHOLDER", "_PLACEHOLDER",
"POS_ID", "POS_ID",
"MTS", "MTS",
@@ -157,7 +157,7 @@ Liquidation = _Serializer[types.Liquidation]("Liquidation", labels=[
"PRICE_ACQUIRED" "PRICE_ACQUIRED"
]) ])
Leaderboard = _Serializer[types.Leaderboard]("Leaderboard", labels=[ Leaderboard = generate_labeler_serializer("Leaderboard", klass=types.Leaderboard, labels=[
"MTS", "MTS",
"_PLACEHOLDER", "_PLACEHOLDER",
"USERNAME", "USERNAME",
@@ -170,7 +170,7 @@ Leaderboard = _Serializer[types.Leaderboard]("Leaderboard", labels=[
"TWITTER_HANDLE" "TWITTER_HANDLE"
]) ])
FundingStatistic = _Serializer[types.FundingStatistic]("FundingStatistic", labels=[ FundingStatistic = generate_labeler_serializer("FundingStatistic", klass=types.FundingStatistic, labels=[
"TIMESTAMP", "TIMESTAMP",
"_PLACEHOLDER", "_PLACEHOLDER",
"_PLACEHOLDER", "_PLACEHOLDER",
@@ -189,7 +189,7 @@ FundingStatistic = _Serializer[types.FundingStatistic]("FundingStatistic", label
#region Serializers definition for Rest Authenticated Endpoints #region Serializers definition for Rest Authenticated Endpoints
Wallet = _Serializer[types.Wallet]("Wallet", labels=[ Wallet = generate_labeler_serializer("Wallet", klass=types.Wallet, labels=[
"WALLET_TYPE", "WALLET_TYPE",
"CURRENCY", "CURRENCY",
"BALANCE", "BALANCE",
@@ -199,7 +199,7 @@ Wallet = _Serializer[types.Wallet]("Wallet", labels=[
"TRADE_DETAILS" "TRADE_DETAILS"
]) ])
Order = _Serializer[types.Order]("Order", labels=[ Order = generate_labeler_serializer("Order", klass=types.Order, labels=[
"ID", "ID",
"GID", "GID",
"CID", "CID",
@@ -234,7 +234,7 @@ Order = _Serializer[types.Order]("Order", labels=[
"META" "META"
]) ])
Position = _Serializer[types.Position]("Position", labels=[ Position = generate_labeler_serializer("Position", klass=types.Position, labels=[
"SYMBOL", "SYMBOL",
"STATUS", "STATUS",
"AMOUNT", "AMOUNT",
@@ -257,7 +257,7 @@ Position = _Serializer[types.Position]("Position", labels=[
"META" "META"
]) ])
FundingOffer = _Serializer[types.FundingOffer]("FundingOffer", labels=[ FundingOffer = generate_labeler_serializer("FundingOffer", klass=types.FundingOffer, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"MTS_CREATED", "MTS_CREATED",
@@ -281,7 +281,7 @@ FundingOffer = _Serializer[types.FundingOffer]("FundingOffer", labels=[
"_PLACEHOLDER" "_PLACEHOLDER"
]) ])
Trade = _Serializer[types.Trade]("Trade", labels=[ Trade = generate_labeler_serializer("Trade", klass=types.Trade, labels=[
"ID", "ID",
"PAIR", "PAIR",
"MTS_CREATE", "MTS_CREATE",
@@ -296,7 +296,7 @@ Trade = _Serializer[types.Trade]("Trade", labels=[
"CID" "CID"
]) ])
OrderTrade = _Serializer[types.OrderTrade]("OrderTrade", labels=[ OrderTrade = generate_labeler_serializer("OrderTrade", klass=types.OrderTrade, labels=[
"ID", "ID",
"PAIR", "PAIR",
"MTS_CREATE", "MTS_CREATE",
@@ -311,7 +311,7 @@ OrderTrade = _Serializer[types.OrderTrade]("OrderTrade", labels=[
"CID" "CID"
]) ])
Ledger = _Serializer[types.Ledger]("Ledger", labels=[ Ledger = generate_labeler_serializer("Ledger", klass=types.Ledger, labels=[
"ID", "ID",
"CURRENCY", "CURRENCY",
"_PLACEHOLDER", "_PLACEHOLDER",
@@ -323,7 +323,7 @@ Ledger = _Serializer[types.Ledger]("Ledger", labels=[
"DESCRIPTION" "DESCRIPTION"
]) ])
FundingCredit = _Serializer[types.FundingCredit]("FundingCredit", labels=[ FundingCredit = generate_labeler_serializer("FundingCredit", klass=types.FundingCredit, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"SIDE", "SIDE",

View File

@@ -1,12 +1,12 @@
from . import types from . import types
from .. labeler import _Serializer from .. labeler import generate_labeler_serializer
from .. notification import _Notification from .. notification import _Notification
#region Serializers definition for Websocket Public Channels #region Serializers definition for Websocket Public Channels
TradingPairTicker = _Serializer[types.TradingPairTicker]("TradingPairTicker", labels=[ TradingPairTicker = generate_labeler_serializer("TradingPairTicker", klass=types.TradingPairTicker, labels=[
"BID", "BID",
"BID_SIZE", "BID_SIZE",
"ASK", "ASK",
@@ -19,7 +19,7 @@ TradingPairTicker = _Serializer[types.TradingPairTicker]("TradingPairTicker", la
"LOW" "LOW"
]) ])
FundingCurrencyTicker = _Serializer[types.FundingCurrencyTicker]("FundingCurrencyTicker", labels=[ FundingCurrencyTicker = generate_labeler_serializer("FundingCurrencyTicker", klass=types.FundingCurrencyTicker, labels=[
"FRR", "FRR",
"BID", "BID",
"BID_PERIOD", "BID_PERIOD",
@@ -38,14 +38,14 @@ FundingCurrencyTicker = _Serializer[types.FundingCurrencyTicker]("FundingCurrenc
"FRR_AMOUNT_AVAILABLE" "FRR_AMOUNT_AVAILABLE"
]) ])
TradingPairTrade = _Serializer[types.TradingPairTrade]("TradingPairTrade", labels=[ TradingPairTrade = generate_labeler_serializer("TradingPairTrade", klass=types.TradingPairTrade, labels=[
"ID", "ID",
"MTS", "MTS",
"AMOUNT", "AMOUNT",
"PRICE" "PRICE"
]) ])
FundingCurrencyTrade = _Serializer[types.FundingCurrencyTrade]("FundingCurrencyTrade", labels=[ FundingCurrencyTrade = generate_labeler_serializer("FundingCurrencyTrade", klass=types.FundingCurrencyTrade, labels=[
"ID", "ID",
"MTS", "MTS",
"AMOUNT", "AMOUNT",
@@ -53,33 +53,33 @@ FundingCurrencyTrade = _Serializer[types.FundingCurrencyTrade]("FundingCurrencyT
"PERIOD" "PERIOD"
]) ])
TradingPairBook = _Serializer[types.TradingPairBook]("TradingPairBook", labels=[ TradingPairBook = generate_labeler_serializer("TradingPairBook", klass=types.TradingPairBook, labels=[
"PRICE", "PRICE",
"COUNT", "COUNT",
"AMOUNT" "AMOUNT"
]) ])
FundingCurrencyBook = _Serializer[types.FundingCurrencyBook]("FundingCurrencyBook", labels=[ FundingCurrencyBook = generate_labeler_serializer("FundingCurrencyBook", klass=types.FundingCurrencyBook, labels=[
"RATE", "RATE",
"PERIOD", "PERIOD",
"COUNT", "COUNT",
"AMOUNT" "AMOUNT"
]) ])
TradingPairRawBook = _Serializer[types.TradingPairRawBook]("TradingPairRawBook", labels=[ TradingPairRawBook = generate_labeler_serializer("TradingPairRawBook", klass=types.TradingPairRawBook, labels=[
"ORDER_ID", "ORDER_ID",
"PRICE", "PRICE",
"AMOUNT" "AMOUNT"
]) ])
FundingCurrencyRawBook = _Serializer[types.FundingCurrencyRawBook]("FundingCurrencyRawBook", labels=[ FundingCurrencyRawBook = generate_labeler_serializer("FundingCurrencyRawBook", klass=types.FundingCurrencyRawBook, labels=[
"OFFER_ID", "OFFER_ID",
"PERIOD", "PERIOD",
"RATE", "RATE",
"AMOUNT" "AMOUNT"
]) ])
Candle = _Serializer[types.Candle]("Candle", labels=[ Candle = generate_labeler_serializer("Candle", klass=types.Candle, labels=[
"MTS", "MTS",
"OPEN", "OPEN",
"CLOSE", "CLOSE",
@@ -88,7 +88,7 @@ Candle = _Serializer[types.Candle]("Candle", labels=[
"VOLUME" "VOLUME"
]) ])
DerivativesStatus = _Serializer[types.DerivativesStatus]("DerivativesStatus", labels=[ DerivativesStatus = generate_labeler_serializer("DerivativesStatus", klass=types.DerivativesStatus, labels=[
"TIME_MS", "TIME_MS",
"_PLACEHOLDER", "_PLACEHOLDER",
"DERIV_PRICE", "DERIV_PRICE",
@@ -118,7 +118,7 @@ DerivativesStatus = _Serializer[types.DerivativesStatus]("DerivativesStatus", la
#region Serializers definition for Websocket Authenticated Channels #region Serializers definition for Websocket Authenticated Channels
Order = _Serializer[types.Order]("Order", labels=[ Order = generate_labeler_serializer("Order", klass=types.Order, labels=[
"ID", "ID",
"GID", "GID",
"CID", "CID",
@@ -153,7 +153,7 @@ Order = _Serializer[types.Order]("Order", labels=[
"META" "META"
]) ])
Position = _Serializer[types.Position]("Position", labels=[ Position = generate_labeler_serializer("Position", klass=types.Position, labels=[
"SYMBOL", "SYMBOL",
"STATUS", "STATUS",
"AMOUNT", "AMOUNT",
@@ -176,7 +176,7 @@ Position = _Serializer[types.Position]("Position", labels=[
"META" "META"
]) ])
TradeExecuted = _Serializer[types.TradeExecuted]("TradeExecuted", labels=[ TradeExecuted = generate_labeler_serializer("TradeExecuted", klass=types.TradeExecuted, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"MTS_CREATE", "MTS_CREATE",
@@ -191,7 +191,7 @@ TradeExecuted = _Serializer[types.TradeExecuted]("TradeExecuted", labels=[
"CID" "CID"
]) ])
TradeExecutionUpdate = _Serializer[types.TradeExecutionUpdate]("TradeExecutionUpdate", labels=[ TradeExecutionUpdate = generate_labeler_serializer("TradeExecutionUpdate", klass=types.TradeExecutionUpdate, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"MTS_CREATE", "MTS_CREATE",
@@ -206,7 +206,7 @@ TradeExecutionUpdate = _Serializer[types.TradeExecutionUpdate]("TradeExecutionUp
"CID" "CID"
]) ])
FundingOffer = _Serializer[types.FundingOffer]("FundingOffer", labels=[ FundingOffer = generate_labeler_serializer("FundingOffer", klass=types.FundingOffer, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"MTS_CREATED", "MTS_CREATED",
@@ -230,7 +230,7 @@ FundingOffer = _Serializer[types.FundingOffer]("FundingOffer", labels=[
"_PLACEHOLDER" "_PLACEHOLDER"
]) ])
FundingCredit = _Serializer[types.FundingCredit]("FundingCredit", labels=[ FundingCredit = generate_labeler_serializer("FundingCredit", klass=types.FundingCredit, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"SIDE", "SIDE",
@@ -255,7 +255,7 @@ FundingCredit = _Serializer[types.FundingCredit]("FundingCredit", labels=[
"POSITION_PAIR" "POSITION_PAIR"
]) ])
FundingLoan = _Serializer[types.FundingLoan]("FundingLoan", labels=[ FundingLoan = generate_labeler_serializer("FundingLoan", klass=types.FundingLoan, labels=[
"ID", "ID",
"SYMBOL", "SYMBOL",
"SIDE", "SIDE",
@@ -279,7 +279,7 @@ FundingLoan = _Serializer[types.FundingLoan]("FundingLoan", labels=[
"NO_CLOSE" "NO_CLOSE"
]) ])
Wallet = _Serializer[types.Wallet]("Wallet", labels=[ Wallet = generate_labeler_serializer("Wallet", klass=types.Wallet, labels=[
"WALLET_TYPE", "WALLET_TYPE",
"CURRENCY", "CURRENCY",
"BALANCE", "BALANCE",
@@ -289,7 +289,7 @@ Wallet = _Serializer[types.Wallet]("Wallet", labels=[
"META" "META"
]) ])
BalanceInfo = _Serializer[types.BalanceInfo]("BalanceInfo", labels=[ BalanceInfo = generate_labeler_serializer("BalanceInfo", klass=types.BalanceInfo, labels=[
"AUM", "AUM",
"AUM_NET", "AUM_NET",
]) ])