Add new endpoints in BfxRestInterfaces.py (with serializers and typings).

This commit is contained in:
Davide Casale
2022-12-12 17:06:33 +01:00
parent 376ac37273
commit 32d698285e
3 changed files with 73 additions and 4 deletions

View File

@@ -2,7 +2,7 @@ import requests
from http import HTTPStatus
from typing import List, Union, Literal, Optional
from typing import List, Union, Literal, Optional, Any
from . import serializers
from .typings import *
@@ -136,3 +136,23 @@ class BfxRestInterface(object):
data = self.__GET("liquidations/hist", params=params)
return [ serializers.Liquidation.parse(*subdata[0]) for subdata in data ]
def leaderboards(
self,
resource: str, section: Literal["hist", "last"],
sort: Optional[int] = None, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None
) -> Union[Leaderboard, Leaderboards]:
params = { "sort": sort, "start": start, "end": end, "limit": limit }
data = self.__GET(f"rankings/{resource}/{section}", params=params)
if section == "last":
return serializers.Leaderboard.parse(*data)
return [ serializers.Leaderboard.parse(*subdata) for subdata in data ]
def funding_stats(self, symbol: str, start: Optional[str] = None, end: Optional[str] = None, limit: Optional[int] = None) -> FundingStats:
params = { "start": start, "end": end, "limit": limit }
data = self.__GET(f"funding/stats/{symbol}/hist", params=params)
return [ serializers.FundingStat.parse(*subdata) for subdata in data ]

View File

@@ -13,7 +13,7 @@ class _Serializer(Generic[T]):
def __serialize(self, *args: Any, skip: Optional[List[str]]) -> Iterable[T]:
labels = list(filter(lambda label: label not in (skip or list()), self.__labels))
if len(labels) != len(args):
if len(labels) > len(args):
raise BfxRestException("<labels> and <*args> arguments should contain the same amount of elements.")
for index, label in enumerate(labels):
@@ -176,4 +176,32 @@ Liquidation = _Serializer[typings.Liquidation]("Liquidation", labels=[
"PRICE_ACQUIRED"
])
Leaderboard = _Serializer[typings.Leaderboard]("Leaderboard", labels=[
"MTS",
"_PLACEHOLDER",
"USERNAME",
"RANKING",
"_PLACEHOLDER",
"_PLACEHOLDER",
"VALUE",
"_PLACEHOLDER",
"_PLACEHOLDER",
"TWITTER_HANDLE"
])
FundingStat = _Serializer[typings.FundingStat]("FundingStat", labels=[
"TIMESTAMP",
"_PLACEHOLDER",
"_PLACEHOLDER",
"FRR",
"AVG_PERIOD",
"_PLACEHOLDER",
"_PLACEHOLDER",
"FUNDING_AMOUNT",
"FUNDING_AMOUNT_USED",
"_PLACEHOLDER",
"_PLACEHOLDER",
"FUNDING_BELOW_THRESHOLD"
])
#endregion

View File

@@ -87,7 +87,7 @@ Candle = TypedDict("Candle", {
Candles = List[Candle]
DerivativesStatus = TypedDict("DerivativesStatus", {
"KEY": str,
"KEY": Optional[str],
"MTS": int,
"DERIV_PRICE": float,
"SPOT_PRICE": float,
@@ -117,4 +117,25 @@ Liquidation = TypedDict("Liquidation", {
Liquidations = List[Liquidation]
Leaderboard = TypedDict("Leaderboard", {
"MTS": int,
"USERNAME": str,
"RANKING": int,
"VALUE": float,
"TWITTER_HANDLE": Optional[str]
})
Leaderboards = List[Leaderboard]
FundingStat = TypedDict("FundingStat", {
"TIMESTAMP": int,
"FRR": float,
"AVG_PERIOD": float,
"FUNDING_AMOUNT": float,
"FUNDING_AMOUNT_USED": float,
"FUNDING_BELOW_THRESHOLD": float
})
FundingStats = List[FundingStat]
#endregion